!function t(e, n, i) {
 function r(s, a) {
  if (!n[s]) {
   if (!e[s]) {
    var c = "function" == typeof require && require;
    if (!a && c) return c(s, !0);
    if (o) return o(s, !0);
    var u = new Error("Cannot find module '" + s + "'");
    throw u.code = "MODULE_NOT_FOUND", u;
   }
   var l = n[s] = {
    exports: {}
   };
   e[s][0].call(l.exports, function(t) {
    var n = e[s][1][t];
    return r(n ? n : t);
   }, l, l.exports, t, e, n, i);
  }
  return n[s].exports;
 }
 for (var o = "function" == typeof require && require, s = 0; s < i.length; s++) r(i[s]);
 return r;
}({
 1: [ function(t, e) {
  function n() {
   if (!s) {
    s = !0;
    for (var t, e = o.length; e; ) {
     t = o, o = [];
     for (var n = -1; ++n < e; ) t[n]();
     e = o.length;
    }
    s = !1;
   }
  }
  function i() {}
  var r = e.exports = {}, o = [], s = !1;
  r.nextTick = function(t) {
   o.push(t), s || setTimeout(n, 0);
  }, r.title = "browser", r.browser = !0, r.env = {}, r.argv = [], r.version = "", 
  r.versions = {}, r.on = i, r.addListener = i, r.once = i, r.off = i, r.removeListener = i, 
  r.removeAllListeners = i, r.emit = i, r.binding = function() {
   throw new Error("process.binding is not supported");
  }, r.cwd = function() {
   return "/";
  }, r.chdir = function() {
   throw new Error("process.chdir is not supported");
  }, r.umask = function() {
   return 0;
  };
 }, {} ],
 2: [ function(t, e) {
  var n = t("h5client/config");
  n.gtype = t("jsmancala/register"), n.urlGame = "http://play-mancala.com", n.urlGplus = "https://plus.google.com/+Playmancalanow", 
  n.urlFbApp = "https://apps.facebook.com/playmancala", n.urlFb = "https://www.facebook.com/playmancala", 
  n.defMessageThread = "1e318dce-e776-4def-b572-0a64c5b175dd", n.menuStrings = {
   home: {
    title: [ "mancala_menu_home_title" ],
    slogan: [ "mancala_menu_home_slogan" ]
   },
   sp: {
    title: [ "mancala_menu_sp_title" ],
    slogan: [ "mancala_menu_sp_slogan" ]
   }
  }, n.tutorialTemplates.set([ n.gtype ], {
   controller: t("./controllers/Tutorial"),
   html: t("./views/tutorial.html")
  }), e.exports = n;
 }, {
  "./controllers/Tutorial": 3,
  "./views/tutorial.html": 239,
  "h5client/config": 40,
  "jsmancala/register": 206
 } ],
 3: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/utils/Analytics"), o = e.exports = "MancalaTutorialCtrl";
  n.controller(o, [ "$scope", t("webapp/services/Back"), function(t, e) {
   r.sendAppView("tutorial"), t.page = 0, t.ts = new Date().getTime(), t.hints = [ {
    img: "tut_holes_store_50.jpg",
    title: "Holes and store",
    descr: "Your holes on the board are on the bottom or right side. Your store is the big hole on the right or top edge."
   }, {
    img: "tut_sow_50.jpg",
    title: "Sow stones",
    descr: "Chose a hole to pick up all pieces. Moving counter-clockwise, the game now deposits one of the stones in each hole until the stones run out."
   }, {
    img: "tut_sow_store_50.jpg",
    title: "Store",
    descr: "If you run into your own store, deposit one piece in it. If you run into your opponent's store, skip it."
   }, {
    img: "tut_free_turn_50.jpg",
    title: "Free turn",
    descr: "If the last piece you drop is in your own store, you get a free turn."
   }, {
    img: "tut_capture_50.jpg",
    title: "Capture",
    descr: "If the last piece you drop is in an empty hole on your side, you capture that piece and any pieces in the hole directly opposite."
   }, {
    img: "tut_end_50.jpg",
    title: "End",
    descr: "The game ends when all six spaces on one side of the Mancala board are empty. The player who still has pieces on his side of the board when the game ends captures all of those pieces."
   }, {
    img: "tut_end_50.jpg",
    title: "Win",
    descr: "Count all the pieces in each store. The winner is the player with the most pieces."
   } ], t.back = function() {
    i.trace(o, "back"), e.back();
   }, t.refresh = function() {
    t.ts = new Date().getTime();
   };
  } ]), n.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/tutorial.json"));
  } ]);
 }, {
  "../ngmodule": 18,
  "../strings/tutorial.json": 236,
  "jslib/utils/Analytics": 185,
  "jslib/utils/Log": 187,
  "webapp/services/Back": 219,
  "webapp/services/Lcze": 226
 } ],
 4: [ function(t) {
  "use strict";
  var e = t("jslib/utils/Log"), n = t("../ngmodule"), i = "mancalaEndDialog";
  n.directive(i, [ "$timeout", t("webapp/services/Back"), t("h5client/lib/services/Game"), t("h5client/lib/services/GroomHandler"), function(n, r, o, s) {
   return {
    restrict: "E",
    scope: {
     result: "="
    },
    template: t("../views/dialog-end.html"),
    controller: [ "$scope", function(t) {
     t.multiplayer = !1, t.$emit("router.setresult", !0), t.groomReturnSecs = -1;
     var n, a = o.instance;
     a && (t.players = t.result, a.online && (n = s.autoLeave(function(n) {
      t.$apply(function() {
       e.trace(i, "autoLeave() remaining " + n + "ms"), t.groomReturnSecs = Math.floor(n / 1e3);
      });
     })), t.back = function() {
      r.back();
     }, t.$on("$destroy", function() {
      n && n.cancel();
     }));
    } ]
   };
  } ]), n.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/end-popup.json"));
  } ]);
 }, {
  "../ngmodule": 18,
  "../strings/end-popup.json": 233,
  "../views/dialog-end.html": 237,
  "h5client/lib/services/Game": 86,
  "h5client/lib/services/GroomHandler": 88,
  "jslib/utils/Log": 187,
  "webapp/services/Back": 219,
  "webapp/services/Lcze": 226
 } ],
 5: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("../config"), i = t("jslib/utils/Log"), r = t("jslib/utils/Analytics"), o = (t("jslib/utils/UUID"), 
  t("jslib/sound/Player"), t("jslib/utils/Store"), t("../lib/UI")), s = (t("../lib/Params"), 
  "mancalaGame");
  t("h5client/lib/directives/ReconnectPopup"), t("h5client/lib/directives/GameLeavePopup"), 
  t("h5client/lib/directives/GameLeave"), t("./EndDialog"), n.gameTemplates.set([ n.gtype ], {
   html: "<mancala-game></mancala-game>"
  }), e.directive(s, [ "$timeout", t("webapp/services/DebugConsole"), t("h5client/lib/services/Game"), t("h5client/lib/services/Prefs"), t("webapp/services/Back"), t("h5client/lib/services/GroomHandler"), function(e, n, a, c, u, l) {
   var h = 3500;
   return {
    restrict: "E",
    template: t("../views/game.html"),
    link: function(t, p) {
     var f, d = a.instance, v = a.pidsLocal;
     if (void 0 === d) throw new Error("game undefined");
     t.game = d;
     var g = new o({
      el: p[0],
      game: d,
      pidsLocal: v,
      room: l,
      back: function() {
       t.$apply(function() {
        u.back();
       });
      }
     });
     g.sound.enable("false" !== c.values.game_sound);
     var m = function() {
      i.trace(s, "game ended"), r.sendEvent("game", "ended"), f = e(function() {
       t.$apply(function() {
        i.trace(s, "open end dialog");
        for (var e = [], n = 0; n < d.players.length; n++) {
         var r = d.players[n], o = r.id;
         e.push({
          name: 1 === v.length && -1 !== v.indexOf(o) ? "You" : r.name,
          score: d.getStoreCount(o),
          win: d.isPidWin(o),
          rating: void 0,
          ratingChange: d.opts.rated === !0 ? "+4" : void 0
         });
        }
        t.result = e;
       });
      }, h);
     };
     d.ended && m();
     var y = function() {
      i.trace(s, "debug end"), d.end();
     };
     t.$on("$destroy", function() {
      g.destroy(), g.renderer.off("end", m), n.off("mancala.end", y), d.abort(), f && e.cancel(f);
     }), r.sendAppView("game"), g.renderer.on("end", m), n.on("mancala.end", y);
    }
   };
  } ]);
 }, {
  "../config": 2,
  "../lib/Params": 12,
  "../lib/UI": 17,
  "../ngmodule": 18,
  "../views/game.html": 238,
  "./EndDialog": 4,
  "h5client/lib/directives/GameLeave": 52,
  "h5client/lib/directives/GameLeavePopup": 53,
  "h5client/lib/directives/ReconnectPopup": 78,
  "h5client/lib/services/Game": 86,
  "h5client/lib/services/GroomHandler": 88,
  "h5client/lib/services/Prefs": 94,
  "jslib/sound/Player": 180,
  "jslib/utils/Analytics": 185,
  "jslib/utils/Log": 187,
  "jslib/utils/Store": 188,
  "jslib/utils/UUID": 189,
  "webapp/services/Back": 219,
  "webapp/services/DebugConsole": 221
 } ],
 6: [ function(t) {
  "use strict";
  var e = t("./ngmodule"), n = t("./config"), i = t("jslib/utils/Log"), r = t("jslib/utils/UtilsLocation"), o = t("jslib/utils/UtilsDOM");
  "true" !== o.metaName("emery-debug") && i.setLevel(i.WARN), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("./strings/menu.json")), e.json("en", t("./strings/strings.json"));
  } ]), t("./directives/Game");
  var s = function(i) {
   console.log("launch debug game"), e.run([ t("h5client/lib/services/Game"), function(e) {
    var r = t("jsgames/Registry"), o = t("jsgames/OptsParser2"), s = o.getDefaultChain(n.gtype), a = o.getDefaults(s), c = r.createPlayersSP(a), u = r.createGame(c, a, i);
    e.set(u, [ c[0].id ]);
   } ]);
  };
  switch (r.gup("dodebug")) {
  case "game":
   s(!1);
   break;

  case "mpgame":
   s(!0);
  }
  t("h5client/launch")(n.gtype);
 }, {
  "./config": 2,
  "./directives/Game": 5,
  "./ngmodule": 18,
  "./strings/menu.json": 234,
  "./strings/strings.json": 235,
  "h5client/launch": 41,
  "h5client/lib/services/Game": 86,
  "jsgames/OptsParser2": 163,
  "jsgames/Registry": 165,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsDOM": 193,
  "jslib/utils/UtilsLocation": 195,
  "webapp/services/Lcze": 226
 } ],
 7: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this.tag = "HoleHandler", this._layout = t, this._game = e, this._renderer = n, 
   this._holeBgs = {};
   for (var o = this._game.players.length - 1; o >= 0; o--) {
    var s = this._game.players[o].id;
    this._holeBgs[s] = [];
    for (var a = this._game.holeCount - 1; a >= 0; a--) {
     var c = i('<div class="' + r.CLASS_HOLE + '"></div>');
     this._holeBgs[s][a] = c, c.appendTo(this._layout.board);
    }
   }
   this._cbResize = function() {
    this._resize();
   }.bind(this), this._layout.on("resize", this._cbResize);
  }
  var i = t("jquery"), r = (t("jslib/utils/Log"), t("./Params"));
  n.prototype.destroy = function() {
   this._layout.off("resize", this._cbResize);
  }, n.prototype._resize = function() {
   this._holeHeight = this._layout.getHoleImageW(), this._countFontHeight = this._holeHeight * r.FONT_HEIGHT_COUNT;
   for (var t = this._game.players.length - 1; t >= 0; t--) for (var e, n, i = this._game.players[t].id, o = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, s = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, a = this._game.holeCount - 1; a >= 0; a--) {
    n = this._renderer.getHolePos(i, a);
    var c = n.x - this._renderer.HOLE_RADIUS - this._renderer.HOLE_BEVEL, u = n.y - this._renderer.HOLE_RADIUS - this._renderer.HOLE_BEVEL;
    e = this._holeBgs[i][a], this._layout.setPosPx(e, c, u, o, s);
   }
  }, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/utils/Log": 187
 } ],
 8: [ function(t, e) {
  "use strict";
  function n(t, e, n, r, o) {
   this.tag = "HoleSelectHandler", this._layout = t, this._game = e, this._renderer = n, 
   this._localPids = r, this._room = o, this._selectOverlayEl = t._el.getElementsByClassName("hole-select-overlay")[0], 
   this._selectOverlay = i(this._selectOverlayEl), this._holeSelected = void 0, this._toHide = void 0, 
   this._cbGameMove = function(t, e, n) {
    this.showOverlay(t, e), setTimeout(function() {
     this.hideOverlay();
    }.bind(this), s.DELAY_MOVE_STONE * n + s.MS_ANIM_MOVE);
   }.bind(this), this._renderer.on("move", this._cbGameMove), this._cbResize = function() {
    this.resize();
   }.bind(this), this._layout.on("resize", this._cbResize), this._cbTouch = function(t, e, n, i) {
    this.handleTouchBoard(t, n, i);
   }.bind(this), this._layout.on("touch", this._cbTouch), this.hideOverlay();
  }
  var i = t("jquery"), r = t("jslib/utils/Log"), o = t("jslib/ui/VendorProp"), s = t("./Params"), a = "BoardHoleSelectHandler";
  n.prototype.destroy = function() {
   this._layout.off("resize", this._cbResize), this._layout.off("touch", this._cbTouch), 
   this._renderer.off("move", this._cbGameMove), void 0 !== this._toHide && clearTimeout(this._toHide);
  }, n.prototype.resize = function() {
   this._holeHeightPx = this._layout.toPx(2 * this._renderer.HOLE_RADIUS), this._holeHeight = this._holeHeightPx * s.HOLE_IMG_SIZEFACT, 
   this._selectOverlay.css({
    width: this._holeHeightPx + "px",
    height: this._holeHeightPx + "px"
   });
  }, n.prototype.handleTouchBoard = function(t, e, n) {
   var i = this._renderer.getHoleAt(e, n), o = !1;
   "up" === t && void 0 !== this._holeSelected && this.isAllowed(this._holeSelected.pid) && (r.debug(a, "make move, hole " + this._holeSelected.index), 
   o = !0, this._game.makeMove(this._holeSelected.pid, this._holeSelected.index)), 
   "up" !== t && "cancel" !== t && void 0 !== i || void 0 === this._holeSelected || this.holeDeselect(o), 
   "down" === t && void 0 !== i && this.isAllowed(i.pid) && this._game.getStoneHoleCount(i.pid, i.index) > 0 && this.holeSelect(i.pid, i.index);
  }, n.prototype.holeSelect = function(t, e) {
   r.trace(this.tag, "selected hole " + e + " of " + t), this._holeSelected = {
    pid: t,
    index: e
   }, this.showOverlay(t, e), setTimeout(function() {}.bind(this), 0);
  }, n.prototype.holeDeselect = function(t) {
   r.trace(a, "deselected hole"), delete this._holeSelected, t || this.hideOverlay();
  }, n.prototype.showOverlay = function(t, e) {
   var n = this._renderer.getHolePos(t, e), i = this._layout.rendererPosToPx(n.x, n.y), r = i.x - this._holeHeight / 2, a = i.y - this._holeHeight / 2;
   o.set(this._selectOverlayEl, "transform", "translate(" + r + "px, " + a + "px)"), 
   o.set(this._selectOverlayEl, "transition", "opacity 0s linear 0ms"), this._selectOverlayEl.style.opacity = s.OPACITY_HOLE_SELECT, 
   this._selectOverlayEl.style.display = "block", this._selectOverlayEl.style.height = this._holeHeight + "px", 
   this._selectOverlayEl.style.width = this._holeHeight + "px";
  }, n.prototype.hideOverlay = function() {
   o.set(this._selectOverlayEl, "transition", "opacity " + s.MS_ANIM_HOLE_OVERLAY + "ms ease-in 10ms"), 
   this._selectOverlayEl.style.opacity = 0, this._toHide = setTimeout(function() {
    this._selectOverlayEl.style.display = "none", delete this._toHide;
   }.bind(this), s.MS_ANIM_HOLE_OVERLAY);
  }, n.prototype.isAllowed = function(t) {
   return -1 !== this._localPids.indexOf(t) && this._renderer.getPidCurr() === t;
  }, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/ui/VendorProp": 184,
  "jslib/utils/Log": 187
 } ],
 9: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this._handler = t, this._game = e, this._renderer = n, this._stoneDivs = {}, this._stoneEls = {}, 
   this._delayNext = 0, this._tsLast = 0, this._cbGameMove = function() {}.bind(this), 
   this._cbMoveComplete = function() {}.bind(this), this._game.on("move", this._cbGameMove), 
   this._game.on("mcomplete", this._cbMoveComplete);
   for (var s = this._renderer.els.length - 1; s >= 0; s--) {
    var a = this._renderer.els[s], c = a.id, u = document.createElement("img");
    u.className = o.CLASS_STONE, u.src = "res/mancala/game/stone_" + c % this.STONE_TYPE_COUNT + ".png", 
    r.set(u, "transition-duration", o.MS_MOVE_STONE + "ms"), r.set(u, "transition-delay", "1ms"), 
    r.set(u, "transition-timing-function", "ease-out"), this._handler.stones.append(u), 
    this._stoneDivs[c] = i(u), this._stoneEls[c] = u;
   }
   this._renderer.on("animate", function(t, e, n, i, r, o, s) {
    this.updateStonePos(t, !0, s, o);
   }.bind(this)), this._cbResize = function() {
    this.resize();
   }.bind(this), this._handler.on("resize", this._cbResize);
  }
  var i = t("jquery"), r = (t("jslib/utils/Log"), t("jslib/ui/VendorProp")), o = t("./Params");
  n.prototype.STONE_TYPE_COUNT = 6, n.prototype.destroy = function() {
   this._handler.off("resize", this._cbResize), this._game.off("move", this._cbGameMove), 
   this._game.off("mcomplete", this._cbMoveComplete);
  }, n.prototype.resize = function() {
   this._stoneH = this._handler.toPx(2 * this._renderer.STONE_RADIUS);
   for (var t = this._renderer.els.length - 1; t >= 0; t--) {
    var e = this._renderer.els[t].id, n = this._stoneDivs[e];
    n.css({
     width: this._stoneH + "px",
     height: this._stoneH + "px"
    }), this.updateStonePos(e, !1);
   }
  }, n.prototype.updateStonePos = function(t, e, n, i) {
   var o = (this._stoneDivs[t], this._stoneEls[t]), s = this._renderer.els[t];
   s = this._handler.rendererPosToPx(s.x, s.y);
   var a = Math.round(s.x - Math.round(this._stoneH / 2)), c = Math.round(s.y - Math.round(this._stoneH / 2));
   if (e) if (i) setTimeout(function() {
    r.set(o, "transition-delay", "0ms");
    var t = r.set(o, "transform", "translate(" + a + "px, " + c + "px)");
    r.set(o, "transition-property", t);
   }, n); else {
    r.set(o, "transition-delay", (n || 0) + "ms");
    var u = r.set(o, "transform", "translate(" + a + "px, " + c + "px)");
    r.set(o, "transition-property", u);
   } else r.set(o, "transition-property", "none"), r.set(o, "transform", "translate(" + a + "px, " + c + "px)");
  }, n.prototype.calcDelay = function() {}, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/ui/VendorProp": 184,
  "jslib/utils/Log": 187
 } ],
 10: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this._layout = t, this._game = e, this._renderer = n, this._storeBgs = {};
   for (var o = this._game.players.length - 1; o >= 0; o--) {
    var s = this._game.players[o].id, a = i('<div class="' + r.CLASS_STORE + '"></div>');
    a.appendTo(this._layout.board), this._storeBgs[s] = a;
   }
   this._cbResize = function() {
    this.resize();
   }.bind(this), this._layout.on("resize", this._cbResize);
  }
  var i = t("jquery"), r = (t("jslib/utils/Log"), t("./Params"));
  n.prototype.destroy = function() {
   this._layout.off("resize", this._cbResize);
  }, n.prototype.resize = function() {
   for (var t = this._game.players.length - 1; t >= 0; t--) {
    var e, n, i = this._game.players[t].id;
    n = this._renderer.getStorePos(i);
    var r = this._renderer.STORE_WIDTH + 2 * this._renderer.HOLE_BEVEL, o = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, s = n.x - r / 2, a = n.y - o / 2;
    e = this._storeBgs[i], this._layout.setPosPx(e, s, a, r, o);
   }
  }, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/utils/Log": 187
 } ],
 11: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this._container = t, this._game = e, this._renderer = n, this._queue = new o(), 
   this._cbMcomplete = function(t, e, n, i, r) {
    n > 0 && this.showText("+" + n, s.MS_NOTI), r === !1 && this.showImg("res/mancala/game/ic_mancala_turn.png", s.MS_NOTI);
   }.bind(this), this._renderer.on("mcomplete", this._cbMcomplete);
  }
  var i = t("jslib/utils/Log"), r = t("jquery"), o = t("jslib/event/TimedQueue"), s = t("./Params"), a = "NotiHandler", c = "anim-leave-setup", u = "anim-enter-setup";
  n.prototype.destroy = function() {
   this._queue.destroy(), this._renderer.off("mcomplete", this._cbMcomplete);
  }, n.prototype.showText = function(t, e) {
   var n = this._create();
   n.html(t), i.trace(a, "text url " + t), this._show(n, e);
  }, n.prototype.showImg = function(t, e) {
   var n = this._create();
   n.css({
    backgroundImage: "url(" + t + ")"
   }), i.trace(a, "show url " + t), this._show(n, e);
  }, n.prototype._create = function() {
   return r("<div></div>");
  }, n.prototype._show = function(t, e) {
   this._queue.push(function() {
    i.trace(a, "queue run _add()"), this._add(t), setTimeout(function() {
     this._hide(t);
    }.bind(this), e);
   }.bind(this), 0, s.MS_NOTI_DELAY);
  }, n.prototype._add = function(t) {
   t.addClass(u), this._container.append(t), setTimeout(function() {
    t.css("width"), t.removeClass(u);
   }, 1);
  }, n.prototype._hide = function(t) {
   setTimeout(function() {
    t.detach();
   }, s.MS_NOTI_FADE_OUT), t.addClass(c);
  }, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/event/TimedQueue": 173,
  "jslib/utils/Log": 187
 } ],
 12: [ function(t, e) {
  "use strict";
  e.exports = {
   MS_ANIM_HOLE_OVERLAY: 250,
   MS_ANIM_SPREAD: 200,
   MS_MOVE_STONE: 700,
   MS_DELAY_MOVE_STONE: 150,
   MS_DELAY_PLAYER: 800,
   MS_NOTI: 2e3,
   MS_NOTI_DELAY: 200,
   MS_NOTI_FADE_OUT: 200,
   OPACITY_HOLE_SELECT: .4,
   HOLE_IMG_SIZEFACT: 186 / 180,
   STORE_IMG_SIZEFACT: 396 / 390,
   CLASS_COUNT_STORE: "count-store",
   CLASS_COUNT_HOLE: "count-hole",
   CLASS_STONE: "stone",
   CLASS_HOLE: "hole",
   CLASS_STORE: "store",
   CLASS_SHADE_HOLE: "shade-hole",
   CLASS_SHADE_STORE: "shade-store",
   FONT_OFFSET_HOLE: .334,
   FONT_OFFSET_STORE: .415,
   FONT_HEIGHT_COUNT: .22,
   PX_BOARD_W: 510,
   PX_BOARD_H: 1710,
   PX_HOLE_RADIUS: 90,
   PX_HOLE_BEVEL: 4,
   PX_STORE_WIDTH: 390,
   PX_HOLE_STEP_X: 47,
   PX_HOLE_STEP_Y: 30,
   PX_SHADE_HEIGHT: 52,
   PX_FONT_HEIGHT: 43
  };
 }, {} ],
 13: [ function(t, e) {
  "use strict";
  function n(t, e, n, i, r) {
   this._jq = t, this._game = e, this._room = r, this._renderer = n, this._pid = i, 
   this._player1 = this._jq.find(".player-1"), this._player2 = this._jq.find(".player-2"), 
   this._score1 = this._player1.find(".score"), this._score2 = this._player2.find(".score"), 
   this._cdBar1 = this._player1.find(".bar-bottom"), this._cdBar2 = this._player2.find(".bar-bottom"), 
   this._cbPlayer = function(t) {
    this._setCurrentPlayer(t.id);
   }.bind(this), this._cbMoveEnd = function(t, e, n, i) {
    this._updateScore(t, i);
   }.bind(this), this._cbGameEnd = function() {
    this._stopCountdown();
    for (var t = 0; t < this._game.players.length; t++) {
     var e = this._game.players[t].id;
     this._updateScore(e, this._game.getStoreCount(e));
    }
   }.bind(this);
   for (var o = e.players.length - 1; o >= 0; o--) {
    var s = e.players[o], a = s.id === this._pid ? this._player1 : this._player2;
    a.find(".name").html(s.name), this._updateScore(s.id, e.getStoreCount(s.id));
   }
   this._renderer.on("player", this._cbPlayer), this._renderer.on("end", this._cbGameEnd), 
   this._renderer.on("mcomplete", this._cbMoveEnd), this._setCurrentPlayer(this._game.getPidCurr());
  }
  var i = t("jslib/utils/Log"), r = "PlayerHandler", o = !0, s = "current";
  n.prototype.destroy = function() {
   this._renderer.off("player", this._cbPlayer), this._renderer.off("end", this._cbGameEnd), 
   this._renderer.off("mcomplete", this._cbMoveEnd), this._stopCountdown();
  }, n.prototype._updateScore = function(t, e) {
   var n = t === this._pid ? this._score1 : this._score2;
   n.html(e);
  }, n.prototype._startCountdown = function() {
   this._stopCountdown(), i.trace(r, "start countdown"), this._tsTurnStart = new Date().getTime(), 
   this._ivCountdown = setInterval(function() {
    this._setCountdown();
   }.bind(this), 2e3);
  }, n.prototype._stopCountdown = function() {
   void 0 !== this._ivCountdown && clearInterval(this._ivCountdown);
  }, n.prototype._setCountdown = function() {
   if (this._game.online) {
    var t = this._game.getPidCurr(), e = t === this._pid ? this._cdBar1 : this._cdBar2, n = Math.round((new Date().getTime() - this._tsTurnStart) / (this._game.MS_TURN - 1e3) * 100);
    n > 100 && (n = 100, this._stopCountdown(), void 0 === this._room || t !== this._pid || this._game.ended || (o && i.debug(r, "exceed time, send to server"), 
    this._room.sendPkt({
     t: "exceed"
    }))), e.css({
     right: n + "%"
    }), i.trace(r, "perc " + n + " " + (new Date().getTime() - this._tsTurnStart));
   }
  }, n.prototype._setCurrentPlayer = function(t) {
   i.trace(r, "current player " + t), t === this._pid ? (this._player1.addClass(s), 
   this._player2.removeClass(s)) : (this._player1.removeClass(s), this._player2.addClass(s)), 
   this._cdBar1.css({
    right: 0
   }), this._cdBar2.css({
    right: 0
   }), void 0 !== this._room && this._startCountdown();
  }, e.exports = n;
 }, {
  "jslib/utils/Log": 187
 } ],
 14: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this._layout = t, this._container = t.shades, this._game = e, this._renderer = n, 
   this._holeShades = {}, this._holeCounts = {}, this._storeShades = {}, this._storeCounts = {}, 
   this._updateBufferHoles = {}, this._updateBufferStores = {}, this._cbUpdate = function() {
    this._updateCounts();
   }.bind(this), this._cbSow = function(t, e, n, i, r, o) {
    this._setUpdateBufferHole(t, e, r), this._setUpdateBufferHole(n, i, o);
   }.bind(this), this._cbCapture = function(t, e, n, i, r) {
    this._setUpdateBufferStore(t, i), this._setUpdateBufferHole(e, n, r);
   }.bind(this), this._cbRestore = function() {
    this._initCounts(), this._updateCounts();
   }.bind(this), this._renderer.on("sow", this._cbSow), this._renderer.on("capture", this._cbCapture), 
   this._renderer.on("mcomplete", this._cbUpdate), this._renderer.on("restore", this._cbRestore), 
   this._create(), this._cbResize = function() {
    this._resize();
   }.bind(this), this._layout.on("resize", this._cbResize);
  }
  var i = t("jquery"), r = t("jslib/utils/Log"), o = t("./Params"), s = "ShadeHandler", a = '<div class="' + o.CLASS_SHADE_HOLE + '"><div class="count">0</div></div>', c = '<div class="shade-store"><div class="count"></div></div>';
  n.prototype.destroy = function() {
   this._renderer.off("mcomplete", this._cbUpdate), this._renderer.off("sow", this._cbSow), 
   this._renderer.off("capture", this._cbCapture), this._renderer.off("restore", this._cbRestore), 
   this._layout.off("resize", this._cbResize);
  }, n.prototype._resize = function() {
   for (var t = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, e = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, n = Math.floor(this._layout.toPx(this._renderer.FONT_HEIGHT_HOLE)), i = this._layout.toPx(this._renderer.SHADE_HEIGHT), r = Math.ceil(this._layout.toPx(this._renderer.HOLE_BEVEL)), o = this._renderer.STORE_WIDTH + 2 * this._renderer.HOLE_BEVEL, s = 2 * this._renderer.HOLE_RADIUS + 2 * this._renderer.HOLE_BEVEL, a = this._game.players.length - 1; a >= 0; a--) {
    for (var c, u, l = this._game.players[a].id, h = this._game.holeCount - 1; h >= 0; h--) {
     c = this._renderer.getHolePos(l, h), u = this._holeShades[l][h];
     var p = c.x - this._renderer.HOLE_RADIUS - this._renderer.HOLE_BEVEL, f = c.y - this._renderer.HOLE_RADIUS - this._renderer.HOLE_BEVEL;
     this._layout.setPosPx(u, p, f, t, e), this._holeCounts[l][h].css({
      fontSize: n + "px",
      lineHeight: i + "px",
      bottom: r + "px"
     });
    }
    c = this._renderer.getStorePos(l), this._layout.setPosPx(this._storeShades[l], c.x - o / 2, c.y - s / 2, o, s), 
    this._storeCounts[l].css({
     fontSize: n + "px",
     lineHeight: i + "px",
     bottom: r + "px"
    });
   }
  }, n.prototype._create = function() {
   for (var t = this._game.players.length - 1; t >= 0; t--) {
    var e, n = this._game.players[t].id;
    this._holeShades[n] = [], this._holeCounts[n] = [];
    for (var r = this._game.holeCount - 1; r >= 0; r--) e = i(a), this._holeShades[n][r] = e, 
    this._holeCounts[n][r] = e.find(".count"), e.appendTo(this._container);
    e = i(c), this._storeShades[n] = e, this._storeCounts[n] = e.find(".count"), e.appendTo(this._container);
   }
   this._initCounts(), this._updateCounts();
  }, n.prototype._initCounts = function() {
   for (var t = this._game.players.length - 1; t >= 0; t--) {
    for (var e = this._game.players[t].id, n = this._game.holeCount - 1; n >= 0; n--) this._setUpdateBufferHole(e, n, this._game.getStoneHoleCount(e, n));
    this._setUpdateBufferStore(e, this._game.getStoreCount(e));
   }
  }, n.prototype._updateCounts = function() {
   r.trace(s, "update counts"), this._layout.shades.detach();
   for (var t = this._game.players.length - 1; t >= 0; t--) {
    var e = this._game.players[t].id;
    if (void 0 !== this._updateBufferHoles[e]) for (var n = this._game.holeCount - 1; n >= 0; n--) {
     var i = this._updateBufferHoles[e][n];
     void 0 !== i && this._holeCounts[e][n].html(i);
    }
    var o = this._updateBufferStores[e];
    void 0 !== o && this._storeCounts[e].html(o);
   }
   this._updateBufferHoles = {}, this._updateBufferStores = {}, this._layout.stones.after(this._layout.shades);
  }, n.prototype._setUpdateBufferHole = function(t, e, n) {
   void 0 === this._updateBufferHoles[t] && (this._updateBufferHoles[t] = []), this._updateBufferHoles[t][e] = n;
  }, n.prototype._setUpdateBufferStore = function(t, e) {
   this._updateBufferStores[t] = e;
  }, e.exports = n;
 }, {
  "./Params": 12,
  jquery: 161,
  "jslib/utils/Log": 187
 } ],
 15: [ function(t, e) {
  "use strict";
  var n = (t("jquery"), t("jslib/utils/Log")), i = t("jslib/sound/Player"), r = t("./Params"), o = "Sound";
  t("howler");
  var s = function(t) {
   this._game = t, this._enabled = !1, this._player = new i({
    sprites: {
     move0: [ 0, 200 ],
     move1: [ 500, 200 ],
     move2: [ 1e3, 200 ],
     move3: [ 1500, 200 ],
     draw0: [ 2e3, 200 ],
     draw1: [ 2500, 200 ],
     draw2: [ 3e3, 200 ],
     draw3: [ 3500, 200 ],
     draw4: [ 4e3, 200 ],
     draw5: [ 4500, 200 ]
    },
    volume: .6,
    urls: [ "res/mancala/game/sounds.action.mp3", "res/mancala/game/sounds.action.ogg" ]
   }), this._onMove = function() {
    this._enabled && this._player.playSprite("move" + Math.floor(4 * Math.random()));
   }.bind(this), this._onSow = function(t, e, n, i, o, s, a) {
    this._enabled && setTimeout(function() {
     this._player.playSprite("draw" + Math.floor(6 * Math.random()));
    }.bind(this), a + r.MS_MOVE_STONE);
   }.bind(this), this._onCapture = function(t, e, n, i, o, s) {
    this._enabled && setTimeout(function() {
     this._player.playSprite("draw" + Math.floor(6 * Math.random()));
    }.bind(this), s + r.MS_MOVE_STONE);
   }.bind(this), this._game.on("move", this._onMove), this._game.on("sow", this._onSow), 
   this._game.on("capture", this._onCapture);
  };
  s.prototype.destroy = function() {
   this._player.destroy(), this._game.off("move", this._onMove), this._game.off("sow", this._onSow), 
   this._game.off("capture", this._onCapture);
  }, s.prototype.enable = function(t) {
   this._enabled = t, n.trace(o, "enable() " + this._enabled);
  }, e.exports = s;
 }, {
  "./Params": 12,
  howler: 160,
  jquery: 161,
  "jslib/sound/Player": 180,
  "jslib/utils/Log": 187
 } ],
 16: [ function(t, e) {
  "use strict";
  function n(t, e) {
   if (r.call(this), "string" != typeof e && "number" != typeof e) throw new Error("pid wrong type: " + typeof e);
   this._game = t, this._pid = e, this._pidCurr = this._game.getPidCurr(), this.h = 1, 
   this.w = s.PX_BOARD_W / s.PX_BOARD_H * this.h, this._queue = new o(), this._storeCoords = [], 
   this._holeCoords = [];
   var n = [], u = function() {
    var t = n;
    n = [], this._queue.push(function() {
     i.trace(a, "apply " + t.length + " collected moves");
     for (var e = 0, n = 0; n < t.length; n++) {
      var r = t[n];
      switch (r.type) {
      case "sow":
       this._updatePosHole(this._take(r.pidFrom, r.holeFrom), r.pidTo, r.holeTo, e), this.emit("sow", r.pidTo, r.holeTo, r.pidFrom, r.holeFrom, this._game.getStoneHoleCount(r.pidTo, r.holeTo), this._game.getStoneHoleCount(r.pidFrom, r.holeFrom), e);
       break;

      case "capture":
       this._updatePosStore(this._take(r.pidFrom, r.holeFrom), r.pidTo, r.moveResult, e), 
       this.emit("capture", r.pidTo, r.pidFrom, r.holeFrom, this._game.getStoreCount(r.pidTo), this._game.getStoneHoleCount(r.pidFrom, r.holeFrom), e);
      }
      e += s.MS_DELAY_MOVE_STONE;
     }
    }.bind(this), 0, 0);
   }.bind(this);
   this._cbGameMove = function(t, e, n, i) {
    this._queue.push(function() {
     this._pidCurr = void 0, this.emit("move", t, e, n, i);
    }.bind(this), 0, 0);
   }.bind(this), this._cbGameSow = function(t, e, i, r) {
    n.push({
     type: "sow",
     pidTo: t,
     holeTo: e,
     pidFrom: i,
     holeFrom: r
    });
   }.bind(this), this._cbGameCapture = function(t, e, i, r) {
    n.push({
     type: "capture",
     pidTo: t,
     pidFrom: e,
     holeFrom: i,
     moveResult: r
    });
   }.bind(this), this._cbGameMcomplete = function(t, e, r, o) {
    var l = s.MS_DELAY_MOVE_STONE * (n.length - 1) + s.MS_MOVE_STONE;
    u(), c && i.debug(a, "queue 'mcomplete' pid " + t);
    var h = this._game.getStoreCount(t);
    this._queue.push(function() {
     o === !1 && (this._pidCurr = t), this.emit("mcomplete", t, e, r, h, o);
    }.bind(this), 0, l);
   }.bind(this), this._cbGamePlayer = function(t, e, n) {
    c && i.debug(a, "queue 'player' pid " + t.id + " prev " + e.id + " counter " + n), 
    this._queue.push(function() {
     this._pidCurr = t.id, this.emit("player", t, e);
    }.bind(this), 0, s.MS_DELAY_PLAYER);
   }.bind(this), this._cbGameEnd = function() {
    this._queue.push(function() {
     u(), this.emit("end");
    }.bind(this), 0, 0);
   }.bind(this), this._cbGameAbort = function() {
    this._queue.push(function() {
     this.emit("abort");
    }.bind(this), 0, 0);
   }.bind(this), this._cbGameRestore = function() {
    this._queue.push(function() {
     this._init(), this.emit("restore");
    }.bind(this), 0, 0);
   }.bind(this), this._game.on("move", this._cbGameMove), this._game.on("sow", this._cbGameSow), 
   this._game.on("capture", this._cbGameCapture), this._game.on("player", this._cbGamePlayer), 
   this._game.on("mcomplete", this._cbGameMcomplete), this._game.on("end", this._cbGameEnd), 
   this._game.on("abort", this._cbGameAbort), this._game.on("restore", this._cbGameRestore), 
   this._init();
  }
  var i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = t("jslib/event/TimedQueue"), s = t("./Params"), a = "StoneRenderer", c = !0;
  n.prototype = Object.create(r.prototype), n.prototype.HOLE_RADIUS = s.PX_HOLE_RADIUS / s.PX_BOARD_H, 
  n.prototype.HOLE_BEVEL = s.PX_HOLE_BEVEL / s.PX_BOARD_H, n.prototype.STORE_WIDTH = s.PX_STORE_WIDTH / s.PX_BOARD_H, 
  n.prototype.HOLE_OFFSET_X = s.PX_HOLE_STEP_X / s.PX_BOARD_H, n.prototype.HOLE_OFFSET_Y = s.PX_HOLE_STEP_Y / s.PX_BOARD_H, 
  n.prototype.SHADE_HEIGHT = s.PX_SHADE_HEIGHT / s.PX_BOARD_H, n.prototype.FONT_HEIGHT_HOLE = s.PX_FONT_HEIGHT / s.PX_BOARD_H, 
  n.prototype.STONE_RADIUS = .015, n.prototype.destroy = function() {
   this._game.off("move", this._cbGameMove), this._game.off("sow", this._cbGameSow), 
   this._game.off("capture", this._cbGameCapture), this._game.off("player", this._cbGamePlayer), 
   this._game.off("mcomplete", this._cbGameMcomplete), this._game.off("end", this._cbGameEnd), 
   this._game.off("abort", this._cbGameAbort), this._game.off("restore", this._cbGameRestore), 
   this._queue.destroy();
  }, n.prototype._init = function() {
   i.trace(a, "init");
   var t, e;
   for (t = 0; t < this._game.players.length; t++) {
    var n = this._game.players[t].id;
    for (this._holeCoords[n] = [], e = 0; e < this._game.holeCount; e++) {
     var r = this._calcHolePosition(n, e);
     this._holeCoords[n].push(r);
    }
    this._storeCoords[n] = this._calcStorePosition(n), c && i.debug(a, "store: pid " + n + " x " + this._storeCoords[n].x + " y " + this._storeCoords[n].y);
   }
   var o = 0;
   for (this.els = [], this._holes = {}, this._stores = {}, t = 0; t < this._game.players.length; t++) {
    var s = this._game.players[t].id;
    this._holes[s] = [], this._stores[s] = [];
    for (var u = this._game.holeCount - 1; u >= 0; u--) {
     this._holes[s][u] = [];
     for (var l = this._game.getStoneHoleCount(s, u) - 1; l >= 0; l--) {
      var h = {
       id: o++
      };
      this.els.push(h), this._updatePosHole(h, s, u);
     }
    }
    for (e = this._game.getStoreCount(s) - 1; e >= 0; e--) {
     var h = {
      id: o++
     };
     this.els.push(h), this._updatePosStore(h, s, !1);
    }
   }
  }, n.prototype._take = function(t, e) {
   return this._holes[t][e].splice(0, 1)[0];
  }, n.prototype._updatePosHole = function(t, e, n, i) {
   this._holes[e][n].push(t);
   var r = this.getHolePos(e, n), o = (this._holes[e][n].indexOf(t), r.x + 2 * (Math.random() - .5) * .5 * this.HOLE_RADIUS), s = r.y + 2 * (Math.random() - .5) * .5 * this.HOLE_RADIUS;
   this._saveStonePos(t, o, s, !1, i);
  }, n.prototype._updatePosStore = function(t, e, n, i) {
   this._stores[e].push(t);
   var r = this._stores[e].indexOf(t), o = this.getStorePos(e, r), s = o.x + .8 * (Math.random() - .5) * this.STORE_WIDTH, a = o.y + 2 * (Math.random() - .5) * .5 * this.HOLE_RADIUS;
   this._saveStonePos(t, s, a, n, i);
  }, n.prototype._saveStonePos = function(t, e, n, i, r) {
   var o = t.x, s = t.y;
   t.x = e, t.y = n, this.emit("animate", t.id, o, s, e, n, i, r);
  }, n.prototype.getHolePos = function(t, e) {
   return this._holeCoords[t][e];
  }, n.prototype.getStorePos = function(t) {
   return this._storeCoords[t];
  }, n.prototype._calcHolePosition = function(t, e) {
   var n = this._pid === t, i = (n ? 1 : -1) * (this.HOLE_OFFSET_X + this.HOLE_RADIUS), r = (this._game.holeCount - 1) / 2, o = n ? r - e : -r + e, s = (this.HOLE_OFFSET_Y + 2 * this.HOLE_RADIUS) * o;
   return {
    x: i,
    y: s
   };
  }, n.prototype._calcStorePosition = function(t) {
   var e = this._pid === t, n = (e ? 1 : -1) * (this.HOLE_OFFSET_X + 2 * this.HOLE_RADIUS - this.STORE_WIDTH / 2), i = (e ? -1 : 1) * (this.HOLE_OFFSET_Y + 2 * this.HOLE_RADIUS) * (this._game.holeCount / 2 + .5);
   return {
    x: n,
    y: i
   };
  }, n.prototype.getHoleAt = function(t, e) {
   for (var n, i, r, o = 0, s = this._game.players.length; s > o; o++) for (var a = this._game.players[o].id, c = this._holeCoords[a], u = 0, l = c.length; l > u; u++) {
    var h = c[u], p = h.x - t, f = h.y - e, d = Math.sqrt(p * p + f * f);
    d > this.HOLE_RADIUS || void 0 !== r && d > r || (r = d, n = a, i = u);
   }
   return void 0 !== n && void 0 !== i ? {
    pid: n,
    index: i
   } : void 0;
  }, n.prototype.getPidCurr = function() {
   return this._pidCurr;
  }, e.exports = n;
 }, {
  "./Params": 12,
  "jslib/event/EventEmitter": 172,
  "jslib/event/TimedQueue": 173,
  "jslib/utils/Log": 187
 } ],
 17: [ function(t, e) {
  "use strict";
  function n(t) {
   o.call(this), this.tag = "GameLayout", this._game = t.game, this._pidsLocal = t.pidsLocal, 
   this._room = t.room, this._jq = i(t.el), this._el = t.el, this._padding = 10, this._allowTurn = !0, 
   this.wrapperNoti = this._jq.find(".notification-wrapper"), this.wrapper = this._jq.find(".wrapper"), 
   this.wrapperBoard = this._jq.find(".board-wrapper"), this.wrapperPlayers = this._jq.find(".players-wrapper"), 
   this.wrapperButtons = this._jq.find(".buttons-wrapper"), this.board = this._el.getElementsByClassName("board")[0], 
   this.boardBg = this.board.getElementsByClassName("bg")[0], this.boardHoles = this.board.getElementsByClassName("holes")[0], 
   this.stones = this._jq.find(".stones"), this.shades = this._jq.find(".shades"), 
   this.boardX = 0, this.boardY = 0, this.boardW = 0, this.boardH = 0, this.boardOffset = {
    left: 0,
    top: 0
   }, this._player1 = this._jq.find(".player-1"), this._player2 = this._jq.find(".player-2"), 
   this._buttonReturn = this._jq.find(".button-return"), this._buttonUndo = this._jq.find(".button-undo"), 
   this._buttonChat = this._jq.find(".button-chat"), this._buttonReturn.bind("click", function() {
    r.debug(y, "backbutton clicked"), t.back();
   }), this._buttonReturn.bind("touchstart", function() {
    r.debug(y, "backbutton touchstart");
   }), this.renderer = new u(this._game, this._pidsLocal[0]), this.sound = new l(this._game), 
   this._shadeHandler = new v(this, this._game, this.renderer), this._stoneHandler = new h(this, this._game, this.renderer), 
   this._holeHandler = new p(this, this._game, this.renderer), this._holeSelectHandler = new f(this, this._game, this.renderer, this._pidsLocal, this._room), 
   this._storeHandler = new d(this, this._game, this.renderer), this.notiHandler = new g(this.wrapperNoti, this._game, this.renderer), 
   this.playerHandler = new m(this._jq, this._game, this.renderer, this._pidsLocal[0], this._room), 
   this._touchX = 0, this._touchY = 0, this._touch = new s(this.wrapperBoard.get(0), !1, !0, !0), 
   this._touch.addActiveClass = !1, this._cbTouch = function(t, e, n, i, r) {
    this.handleTouch(t, e, n, i, r);
   }.bind(this), this._touch.on("down", this._cbTouch), this._touch.on("move", this._cbTouch), 
   this._touch.on("up", this._cbTouch), this._cbResize = function() {
    window.requestAnimationFrame(this.resize.bind(this));
   }.bind(this), window.addEventListener("resize", this._cbResize, !1), document.addEventListener("webapp.ads.update", this._cbResize, !1), 
   window.requestAnimationFrame(this.resize.bind(this));
  }
  var i = t("jquery"), r = t("jslib/utils/Log"), o = t("jslib/event/EventEmitter"), s = t("jslib/ui/TouchHandler"), a = t("jslib/ui/VendorProp"), c = t("./Params"), u = t("./StoneRenderer"), l = t("./Sound"), h = t("./BoardStoneHandler"), p = t("./BoardHoleHandler"), f = t("./BoardHoleSelectHandler"), d = t("./BoardStoreHandler"), v = t("./ShadeHandler"), g = t("./NotiHandler"), m = t("./PlayerHandler");
  t("jslib/ui/RequestAnimationFrame");
  var y = "GameLayout", b = !0, w = "mancala-game-hori", _ = "mancala-game-vert", x = 540, $ = 1740, k = x / $, S = 10, E = 20, C = 10;
  n.prototype = Object.create(o.prototype), n.prototype.destroy = function() {
   window.removeEventListener("resize", this._cbResize), document.removeEventListener("app.adview.changeheight", this._cbResize), 
   this.notiHandler.destroy(), this.playerHandler.destroy(), this.renderer.destroy(), 
   this.sound.destroy(), this._shadeHandler.destroy(), this._stoneHandler.destroy(), 
   this._holeHandler.destroy(), this._holeSelectHandler.destroy(), this._storeHandler.destroy(), 
   this._touch.off("down", this._cbTouch), this._touch.off("move", this._cbTouch), 
   this._touch.off("up", this._cbTouch), this._touch.destroy();
  }, n.prototype.resize = function() {
   var t, e = [];
   e.push(this.calcArea(k, 1, .95 * this._jq.width() - this._player1.outerWidth(!0), .95 * this._jq.height())), 
   e.push(this.calcArea(1, k, .95 * this._jq.width(), .95 * this._jq.height() - this.wrapperPlayers.outerHeight(!0) - this._buttonReturn.outerHeight(!0)));
   for (var n = e.length - 1; n >= 0; n--) t = this.selectArea(t, e[n]);
   r.debug(y, "areaUse:", t), this.boardBgW = Math.round(t.w);
   var o = t.h * (this.boardBgW / t.w);
   this.boardBgH = Math.round(o), this.vert = this.boardBgW >= this.boardBgH ? !1 : !0, 
   b && r.debug(this.tag, "h rounding error " + (this.boardBgH - o));
   var s = S / $ * (this.vert ? this.boardBgH : this.boardBgW), a = E / $ * (this.vert ? this.boardBgH : this.boardBgW), c = C / $ * (this.vert ? this.boardBgH : this.boardBgW);
   this.boardW = this.boardBgW - s - a, this.boardH = this.boardBgH - s - a, this.boardX = s, 
   this.boardY = s, b && r.debug(this.tag, "boardBg w " + this.boardBgW + " h " + this.boardBgH), 
   b && r.debug(this.tag, "board w " + this.boardW + " h " + this.boardH), i(this.boardBg).css({
    width: this.boardBgW + "px",
    height: this.boardBgH + "px"
   }), this.boardW >= this.boardH ? (this._jq.addClass(w), this._jq.removeClass(_)) : (this._jq.removeClass(w), 
   this._jq.addClass(_)), this.emit("resize"), window.requestAnimationFrame(function() {
    var t = this.vert ? this.boardBgW + this.wrapperPlayers.outerWidth(!0) : this.boardBgW, e = (this._jq.height() - this.wrapper.height()) / 2;
    r.trace(y, "wrapper height " + this.wrapper.height()), this.wrapper.css({
     width: t + "px",
     marginTop: Math.round(e) + "px"
    }), this.vert ? (this.wrapperNoti.css({
     left: this._player1.width() - this.wrapperButtons.width() - this.wrapperNoti.outerWidth() + "px",
     bottom: c + "px",
     paddingRight: ""
    }), this.wrapperPlayers.css({
     top: c + "px",
     left: "0px",
     paddingLeft: "",
     paddingRight: ""
    }), this.wrapperButtons.css({
     bottom: c + "px",
     left: this._player1.width() - this.wrapperButtons.width() + "px",
     paddingLeft: "",
     paddingRight: ""
    })) : (this.wrapperNoti.css({
     left: "",
     bottom: "",
     paddingRight: c + "px"
    }), this.wrapperPlayers.css({
     top: "",
     paddingLeft: c + "px",
     paddingRight: c + "px"
    }), this.wrapperButtons.css({
     bottom: "",
     left: "",
     paddingLeft: c + "px",
     paddingRight: c + "px"
    })), window.requestAnimationFrame(function() {
     this.boardOffset = this.wrapperBoard.offset();
    }.bind(this));
   }.bind(this));
  }, n.prototype.calcArea = function(t, e, n, i) {
   return i >= n / t * e ? (e = n / t * e, t = n) : (t = i / e * t, e = i), {
    w: this.roundValue(t),
    h: this.roundValue(e),
    a: t * e
   };
  }, n.prototype.selectArea = function(t, e) {
   return void 0 !== t && t.a > e.a ? t : e;
  }, n.prototype.handleTouch = function(t, e, n, i) {
   switch (t) {
   case "up":
    break;

   default:
    var r = i[0];
    this._touchX = r.pageX - this.boardOffset.left, this._touchY = r.pageY - this.boardOffset.top;
   }
   if (!(this._touchX < 0 || this._touchX > this.boardW || this._touchY < 0 || this._touchY > this.boardH)) {
    var o, s;
    this.vert === !0 ? (o = this._touchX / this.boardW * this.renderer.w - this.renderer.w / 2, 
    s = this._touchY / this.boardH * this.renderer.h - this.renderer.h / 2) : (o = this._touchY / this.boardH * this.renderer.w - this.renderer.w / 2, 
    s = (1 - this._touchX / this.boardW) * this.renderer.h - this.renderer.h / 2), this.emit("touch", t, e, o, s);
   }
  }, n.prototype.toPx = function(t) {
   return (this.vert ? this.boardH : this.boardW) * t;
  }, n.prototype.posToPx = function(t, e) {
   return this.vert ? {
    x: this.boardX + this.boardW / 2 + this.toPx(t),
    y: this.boardY + this.boardH / 2 + this.toPx(e)
   } : {
    x: this.boardX + this.boardW / 2 - this.toPx(e),
    y: this.boardY + this.boardH / 2 + this.toPx(t)
   };
  }, n.prototype.dimenToPx = function(t, e) {
   return this.vert ? {
    w: t / this.renderer.w * this.boardW,
    h: e / this.renderer.h * this.boardH
   } : {
    w: e / this.renderer.h * this.boardW,
    h: t / this.renderer.w * this.boardH
   };
  }, n.prototype.rendererPosToPx = function(t, e) {
   var n, i;
   return this.vert ? (n = t, i = e) : (n = -e, i = t), {
    x: this.boardX + this.boardW / 2 + this.toPx(n),
    y: this.boardY + this.boardH / 2 + this.toPx(i)
   };
  }, n.prototype.rxToPos = function(t, e) {
   var n;
   return n = this.vert ? t / this.renderer.w : -e / this.renderer.h, this.roundValue(this.boardX + this.boardW / 2 + n * this.boardW);
  }, n.prototype.setPosPx = function(t, e, n, r, o) {
   var s, c, u, l = {};
   if (this.vert ? (void 0 !== e && (s = this.toPx(e) + this.boardX + this.boardW / 2), 
   void 0 !== n && (c = this.toPx(n) + this.boardY + this.boardH / 2), void 0 !== r && (l.width = this.toPx(r) + "px"), 
   void 0 !== o && (l.height = this.toPx(o) + "px")) : (u = this.toPx(o), s = -this.toPx(n) + this.boardX + this.boardW / 2 - u, 
   c = this.toPx(e) + this.boardY + this.boardH / 2, l.width = u + "px", void 0 !== r && (l.height = this.toPx(r) + "px")), 
   !(t instanceof i)) throw new Error("setPosPx el not instanceof jquery");
   t.css(l), void 0 !== s && void 0 !== c && a.set(t.get(0), "transform", "translate(" + s + "px, " + c + "px)");
  }, n.prototype.getHoleImageW = function() {
   return this.toPx(2 * this.renderer.HOLE_RADIUS) * c.HOLE_IMG_SIZEFACT;
  }, n.prototype.getStoreImageW = function() {
   return this.toPx(this.renderer.STORE_WIDTH) * c.STORE_IMG_SIZEFACT;
  }, n.prototype.roundValue = function(t) {
   return t;
  }, e.exports = n;
 }, {
  "./BoardHoleHandler": 7,
  "./BoardHoleSelectHandler": 8,
  "./BoardStoneHandler": 9,
  "./BoardStoreHandler": 10,
  "./NotiHandler": 11,
  "./Params": 12,
  "./PlayerHandler": 13,
  "./ShadeHandler": 14,
  "./Sound": 15,
  "./StoneRenderer": 16,
  jquery: 161,
  "jslib/event/EventEmitter": 172,
  "jslib/ui/RequestAnimationFrame": 182,
  "jslib/ui/TouchHandler": 183,
  "jslib/ui/VendorProp": 184,
  "jslib/utils/Log": 187
 } ],
 18: [ function(t, e) {
  "use strict";
  var n = "mancala", i = t("angular/angular");
  t("angular/angular-animate"), t("flat/ngmodule"), t("h5client/ngmodule");
  var r = i.module(n, [ "flat", "h5client", "webapp", "ngAnimate" ]);
  e.exports = r;
 }, {
  "angular/angular": 22,
  "angular/angular-animate": 19,
  "flat/ngmodule": 33,
  "h5client/ngmodule": 158
 } ],
 19: [ function(t, e) {
  t("./lib/angular"), t("./lib/angular-animate"), e.exports = angular;
 }, {
  "./lib/angular": 26,
  "./lib/angular-animate": 24
 } ],
 20: [ function() {
  !function() {
   function t(t, e) {
    window.XMLHttpRequest.prototype[t] = e(window.XMLHttpRequest.prototype[t]);
   }
   function e(t, e, n, i, s, a) {
    function u() {
     return "input" === e[0].tagName.toLowerCase() && e.attr("type") && "file" === e.attr("type").toLowerCase();
    }
    function l(e) {
     if (!d) {
      d = !0;
      try {
       var u = e.__files_ || e.target && e.target.files, l = [], h = [], p = s(n.ngAccept);
       for (c = 0; c < u.length; c++) {
        var f = u.item(c);
        o(t, p, f, e) ? l.push(f) : h.push(f);
       }
       r(s, a, t, i, n, n.ngFileChange || n.ngFileSelect, l, h, e), 0 == l.length && (e.target.value = l), 
       e.target && e.target.getAttribute("__ngf_gen__") && angular.element(e.target).remove();
      } finally {
       d = !1;
      }
     }
    }
    function h(e) {
     n.ngMultiple && e.attr("multiple", s(n.ngMultiple)(t)), n.accept && e.attr("accept", n.accept), 
     n.ngCapture && e.attr("capture", s(n.ngCapture)(t)), n.ngDisabled && e.attr("disabled", s(n.ngDisabled)(t)), 
     e.bind("change", l);
    }
    function p() {
     for (var t = angular.element('<input type="file">'), n = 0; n < e[0].attributes.length; n++) {
      var i = e[0].attributes[n];
      "type" !== i.name && t.attr(i.name, i.value);
     }
     return u() ? (e.replaceWith(t), e = t) : (t.css("width", "0px").css("height", "0px").css("position", "absolute").css("padding", 0).css("margin", 0).css("overflow", "hidden").attr("tabindex", "-1").css("opacity", 0).attr("__ngf_gen__", !0), 
     e.__ngf_ref_elem__ && e.__ngf_ref_elem__.remove(), e.__ngf_ref_elem__ = t, e.parent()[0].insertBefore(t[0], e[0]), 
     e.css("overflow", "hidden")), h(t), t;
    }
    function f(e) {
     r(s, a, t, i, n, n.ngFileChange || n.ngFileSelect, [], [], e, !0);
    }
    var d = !1;
    window.FileAPI && window.FileAPI.ngfFixIE ? window.FileAPI.ngfFixIE(e, p, l, f) : (u() ? h(e) : p(), 
    e.bind("click", function(t) {
     e.attr("disabled") && t.preventDefault(), t.stopPropagation();
    }));
   }
   function n(t, e, n, s, a, u, l) {
    function h(t, e, n) {
     var i = !0, r = n.dataTransfer.items;
     if (null != r) for (c = 0; c < r.length && i; c++) i = i && ("file" == r[c].kind || "" == r[c].kind) && o(t, y, r[c], n);
     var s = a(e.dragOverClass)(t, {
      $event: n
     });
     return s && (s.delay && (m = s.delay), s.accept && (s = i ? s.accept : s.reject)), 
     s || e.dragOverClass || "dragover";
    }
    function p(e, n, i, r) {
     function s(n) {
      o(t, y, n, e) ? h.push(n) : p.push(n);
     }
     function a(t, e, n) {
      if (null != e) if (e.isDirectory) {
       var i = (n || "") + e.name;
       s({
        name: e.name,
        type: "directory",
        path: i
       });
       var r = e.createReader(), o = [];
       d++;
       var u = function() {
        r.readEntries(function(i) {
         try {
          if (i.length) o = o.concat(Array.prototype.slice.call(i || [], 0)), u(); else {
           for (c = 0; c < o.length; c++) a(t, o[c], (n ? n : "") + e.name + "/");
           d--;
          }
         } catch (r) {
          d--, console.error(r);
         }
        }, function() {
         d--;
        });
       };
       u();
      } else d++, e.file(function(t) {
       try {
        d--, t.path = (n ? n : "") + t.name, s(t);
       } catch (e) {
        d--, console.error(e);
       }
      }, function() {
       d--;
      });
     }
     var h = [], p = [], f = e.dataTransfer.items, d = 0;
     if (f && f.length > 0 && "file" != l.protocol()) for (c = 0; c < f.length; c++) {
      if (f[c].webkitGetAsEntry && f[c].webkitGetAsEntry() && f[c].webkitGetAsEntry().isDirectory) {
       var v = f[c].webkitGetAsEntry();
       if (v.isDirectory && !i) continue;
       null != v && a(h, v);
      } else {
       var g = f[c].getAsFile();
       null != g && s(g);
      }
      if (!r && h.length > 0) break;
     } else {
      var m = e.dataTransfer.files;
      if (null != m) for (c = 0; c < m.length && (s(m.item(c)), r || !(h.length > 0)); c++) ;
     }
     var b = 0;
     !function w(t) {
      u(function() {
       if (d) 10 * b++ < 2e4 && w(10); else {
        if (!r && h.length > 1) {
         for (c = 0; "directory" == h[c].type; ) c++;
         h = [ h[c] ];
        }
        n(h, p);
       }
      }, t || 0);
     }();
    }
    var f = i();
    if (n.dropAvailable && u(function() {
     t.dropAvailable ? t.dropAvailable.value = f : t.dropAvailable = f;
    }), !f) return void (1 == a(n.hideOnDropNotAvailable)(t) && e.css("display", "none"));
    var d, v = null, g = a(n.stopPropagation), m = 1, y = a(n.ngAccept), b = a(n.ngDisabled);
    e[0].addEventListener("dragover", function(i) {
     if (!b(t)) {
      if (i.preventDefault(), g(t) && i.stopPropagation(), navigator.userAgent.indexOf("Chrome") > -1) {
       var r = i.dataTransfer.effectAllowed;
       i.dataTransfer.dropEffect = "move" === r || "linkMove" === r ? "move" : "copy";
      }
      u.cancel(v), t.actualDragOverClass || (d = h(t, n, i)), e.addClass(d);
     }
    }, !1), e[0].addEventListener("dragenter", function(e) {
     b(t) || (e.preventDefault(), g(t) && e.stopPropagation());
    }, !1), e[0].addEventListener("dragleave", function() {
     b(t) || (v = u(function() {
      e.removeClass(d), d = null;
     }, m || 1));
    }, !1), e[0].addEventListener("drop", function(i) {
     b(t) || (i.preventDefault(), g(t) && i.stopPropagation(), e.removeClass(d), d = null, 
     p(i, function(e, o) {
      r(a, u, t, s, n, n.ngFileChange || n.ngFileDrop, e, o, i);
     }, 0 != a(n.allowDir)(t), n.multiple || a(n.ngMultiple)(t)));
    }, !1);
   }
   function i() {
    var t = document.createElement("div");
    return "draggable" in t && "ondrop" in t;
   }
   function r(t, e, n, i, r, o, s, a, c, u) {
    function l() {
     i && (t(r.ngModel).assign(n, s), e(function() {
      i && i.$setViewValue(null != s && 0 == s.length ? null : s);
     })), r.ngModelRejected && t(r.ngModelRejected).assign(n, a), o && t(o)(n, {
      $files: s,
      $rejectedFiles: a,
      $event: c
     });
    }
    u ? l() : e(function() {
     l();
    });
   }
   function o(t, e, n, i) {
    var r = e(t, {
     $file: n,
     $event: i
    });
    if (console.log("isAccepted", r, n.type), null == r) return !0;
    if (angular.isString(r)) {
     var o = new RegExp(s(r), "gi");
     r = null != n.type && n.type.match(o) || null != n.name && n.name.match(o);
    }
    return r;
   }
   function s(t) {
    if (t.length > 2 && "/" === t[0] && "/" === t[t.length - 1]) return t.substring(1, t.length - 1);
    var e = t.split(","), n = "";
    if (e.length > 1) for (c = 0; c < e.length; c++) n += "(" + s(e[c]) + ")", c < e.length - 1 && (n += "|"); else 0 == t.indexOf(".") && (t = "*" + t), 
    n = "^" + t.replace(new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]", "g"), "\\$&") + "$", 
    n = n.replace(/\\\*/g, ".*").replace(/\\\?/g, ".");
    return n;
   }
   var a, c;
   window.XMLHttpRequest && !window.XMLHttpRequest.__isFileAPIShim && t("setRequestHeader", function(t) {
    return function(e, n) {
     if ("__setXHR_" === e) {
      var i = n(this);
      i instanceof Function && i(this);
     } else t.apply(this, arguments);
    };
   });
   var u = angular.module("angularFileUpload", []);
   u.version = "3.2.5", u.service("$upload", [ "$http", "$q", "$timeout", function(t, e, n) {
    function i(i) {
     i.method = i.method || "POST", i.headers = i.headers || {}, i.transformRequest = i.transformRequest || function(e, n) {
      return window.ArrayBuffer && e instanceof window.ArrayBuffer ? e : t.defaults.transformRequest[0](e, n);
     };
     var r = e.defer(), o = r.promise;
     return i.headers.__setXHR_ = function() {
      return function(t) {
       t && (i.__XHR = t, i.xhrFn && i.xhrFn(t), t.upload.addEventListener("progress", function(t) {
        t.config = i, r.notify ? r.notify(t) : o.progress_fn && n(function() {
         o.progress_fn(t);
        });
       }, !1), t.upload.addEventListener("load", function(t) {
        t.lengthComputable && (t.config = i, r.notify ? r.notify(t) : o.progress_fn && n(function() {
         o.progress_fn(t);
        }));
       }, !1));
      };
     }, t(i).then(function(t) {
      r.resolve(t);
     }, function(t) {
      r.reject(t);
     }, function(t) {
      r.notify(t);
     }), o.success = function(t) {
      return o.then(function(e) {
       t(e.data, e.status, e.headers, i);
      }), o;
     }, o.error = function(t) {
      return o.then(null, function(e) {
       t(e.data, e.status, e.headers, i);
      }), o;
     }, o.progress = function(t) {
      return o.progress_fn = t, o.then(null, null, function(e) {
       t(e);
      }), o;
     }, o.abort = function() {
      return i.__XHR && n(function() {
       i.__XHR.abort();
      }), o;
     }, o.xhr = function(t) {
      return i.xhrFn = function(e) {
       return function() {
        e && e.apply(o, arguments), t.apply(o, arguments);
       };
      }(i.xhrFn), o;
     }, o;
    }
    this.upload = function(t) {
     return t.headers = t.headers || {}, t.headers["Content-Type"] = void 0, t.transformRequest = t.transformRequest ? "[object Array]" === Object.prototype.toString.call(t.transformRequest) ? t.transformRequest : [ t.transformRequest ] : [], 
     t.transformRequest.push(function(e) {
      var n = new FormData(), i = {};
      for (a in t.fields) t.fields.hasOwnProperty(a) && (i[a] = t.fields[a]);
      if (e && (i.data = e), t.formDataAppender) for (a in i) i.hasOwnProperty(a) && t.formDataAppender(n, a, i[a]); else for (a in i) if (i.hasOwnProperty(a)) {
       var r = i[a];
       void 0 !== r && ("[object String]" === Object.prototype.toString.call(r) ? n.append(a, r) : t.sendObjectsAsJsonBlob && "object" == typeof r ? n.append(a, new Blob([ r ], {
        type: "application/json"
       })) : n.append(a, JSON.stringify(r)));
      }
      if (null != t.file) {
       var o = t.fileFormDataName || "file";
       if ("[object Array]" === Object.prototype.toString.call(t.file)) {
        var s = "[object String]" === Object.prototype.toString.call(o);
        for (c = 0; c < t.file.length; c++) n.append(s ? o : o[c], t.file[c], t.fileName && t.fileName[c] || t.file[c].name);
       } else n.append(o, t.file, t.fileName || t.file.name);
      }
      return n;
     }), i(t);
    }, this.http = function(t) {
     return i(t);
    };
   } ]), u.directive("ngFileSelect", [ "$parse", "$timeout", "$compile", function(t, n, i) {
    return {
     restrict: "AEC",
     require: "?ngModel",
     link: function(r, o, s, a) {
      e(r, o, s, a, t, n, i);
     }
    };
   } ]), u.directive("ngFileDrop", [ "$parse", "$timeout", "$location", function(t, e, i) {
    return {
     restrict: "AEC",
     require: "?ngModel",
     link: function(r, o, s, a) {
      n(r, o, s, a, t, e, i);
     }
    };
   } ]), u.directive("ngNoFileDrop", function() {
    return function(t, e) {
     i() && e.css("display", "none");
    };
   }), u.directive("ngFileDropAvailable", [ "$parse", "$timeout", function(t, e) {
    return function(n, r, o) {
     if (i()) {
      var s = t(o.ngFileDropAvailable);
      e(function() {
       s(n);
      });
     }
    };
   } ]);
   var l = angular.module("ngFileUpload", []);
   for (a in u) u.hasOwnProperty(a) && (l[a] = u[a]);
  }();
 }, {} ],
 21: [ function(t, e) {
  t("./lib/angular"), t("./lib/angular-touch"), e.exports = angular;
 }, {
  "./lib/angular": 26,
  "./lib/angular-touch": 25
 } ],
 22: [ function(t, e) {
  (function(n) {
   var i = Math.random();
   console.log("instatiate angular", i, n), t("./lib/angular"), e.exports = angular;
  }).call(this, "/node_modules/angular");
 }, {
  "./lib/angular": 26
 } ],
 23: [ function(t) {
  t("./lib/angular-animate");
 }, {
  "./lib/angular-animate": 24
 } ],
 24: [ function() {
  !function(t, e, n) {
   "use strict";
   e.module("ngAnimate", [ "ng" ]).directive("ngAnimateChildren", function() {
    var t = "$$ngAnimateChildren";
    return function(n, i, r) {
     var o = r.ngAnimateChildren;
     e.isString(o) && 0 === o.length ? i.data(t, !0) : n.$watch(o, function(e) {
      i.data(t, !!e);
     });
    };
   }).factory("$$animateReflow", [ "$$rAF", "$document", function(t, e) {
    var n = e[0].body;
    return function(e) {
     return t(function() {
      n.offsetWidth + 1;
      e();
     });
    };
   } ]).config([ "$provide", "$animateProvider", function(i, r) {
    function o(t) {
     for (var e = 0; e < t.length; e++) {
      var n = t[e];
      if (n.nodeType == g) return n;
     }
    }
    function s(t) {
     return t && e.element(t);
    }
    function a(t) {
     return e.element(o(t));
    }
    function c(t, e) {
     return o(t) == o(e);
    }
    var u, l = e.noop, h = e.forEach, p = r.$$selectors, f = e.isArray, d = e.isString, v = e.isObject, g = 1, m = "$$ngAnimateState", y = "$$ngAnimateChildren", b = "ng-animate", w = {
     running: !0
    };
    i.decorator("$animate", [ "$delegate", "$$q", "$injector", "$sniffer", "$rootElement", "$$asyncCallback", "$rootScope", "$document", "$templateRequest", "$$jqLite", function(t, n, i, g, _, x, $, k, S, E) {
     function C(t, e) {
      var n = t.data(m) || {};
      return e && (n.running = !0, n.structural = !0, t.data(m, n)), n.disabled || n.running && n.structural;
     }
     function T(t) {
      var e, i = n.defer();
      return i.promise.$$cancelFn = function() {
       e && e();
      }, $.$$postDigest(function() {
       e = t(function() {
        i.resolve();
       });
      }), i.promise;
     }
     function A(t) {
      return v(t) ? (t.tempClasses && d(t.tempClasses) && (t.tempClasses = t.tempClasses.split(/\s+/)), 
      t) : void 0;
     }
     function j(t, e, n) {
      n = n || {};
      var i = {};
      h(n, function(t, e) {
       h(e.split(" "), function(e) {
        i[e] = t;
       });
      });
      var r = Object.create(null);
      h((t.attr("class") || "").split(/\s+/), function(t) {
       r[t] = !0;
      });
      var o = [], s = [];
      return h(e && e.classes || [], function(t, e) {
       var n = r[e], a = i[e] || {};
       t === !1 ? (n || "addClass" == a.event) && s.push(e) : t === !0 && (n && "removeClass" != a.event || o.push(e));
      }), o.length + s.length > 0 && [ o.join(" "), s.join(" ") ];
     }
     function P(t) {
      if (t) {
       var e = [], n = {}, r = t.substr(1).split(".");
       (g.transitions || g.animations) && e.push(i.get(p[""]));
       for (var o = 0; o < r.length; o++) {
        var s = r[o], a = p[s];
        a && !n[s] && (e.push(i.get(a)), n[s] = !0);
       }
       return e;
      }
     }
     function L(t, n, i, r) {
      function o(t, e) {
       var n = t[e], i = t["before" + e.charAt(0).toUpperCase() + e.substr(1)];
       return n || i ? ("leave" == e && (i = n, n = null), x.push({
        event: e,
        fn: n
       }), b.push({
        event: e,
        fn: i
       }), !0) : void 0;
      }
      function s(e, n, o) {
       function s(t) {
        if (n) {
         if ((n[t] || l)(), ++p < a.length) return;
         n = null;
        }
        o();
       }
       var a = [];
       h(e, function(t) {
        t.fn && a.push(t);
       });
       var p = 0;
       h(a, function(e, o) {
        var a = function() {
         s(o);
        };
        switch (e.event) {
        case "setClass":
         n.push(e.fn(t, c, u, a, r));
         break;

        case "animate":
         n.push(e.fn(t, i, r.from, r.to, a));
         break;

        case "addClass":
         n.push(e.fn(t, c || i, a, r));
         break;

        case "removeClass":
         n.push(e.fn(t, u || i, a, r));
         break;

        default:
         n.push(e.fn(t, a, r));
        }
       }), n && 0 === n.length && o();
      }
      var a = t[0];
      if (a) {
       r && (r.to = r.to || {}, r.from = r.from || {});
       var c, u;
       f(i) && (c = i[0], u = i[1], c ? u ? i = c + " " + u : (i = c, n = "addClass") : (i = u, 
       n = "removeClass"));
       var p = "setClass" == n, d = p || "addClass" == n || "removeClass" == n || "animate" == n, v = t.attr("class"), g = v + " " + i;
       if (I(g)) {
        var m = l, y = [], b = [], w = l, _ = [], x = [], $ = (" " + g).replace(/\s+/g, ".");
        return h(P($), function(t) {
         var e = o(t, n);
         !e && p && (o(t, "addClass"), o(t, "removeClass"));
        }), {
         node: a,
         event: n,
         className: i,
         isClassBased: d,
         isSetClassOperation: p,
         applyStyles: function() {
          r && t.css(e.extend(r.from || {}, r.to || {}));
         },
         before: function(t) {
          m = t, s(b, y, function() {
           m = l, t();
          });
         },
         after: function(t) {
          w = t, s(x, _, function() {
           w = l, t();
          });
         },
         cancel: function() {
          y && (h(y, function(t) {
           (t || l)(!0);
          }), m(!0)), _ && (h(_, function(t) {
           (t || l)(!0);
          }), w(!0));
         }
        };
       }
      }
     }
     function O(t, n, i, r, o, s, a, c) {
      function p(e) {
       var r = "$animate:" + e;
       $ && $[r] && $[r].length > 0 && x(function() {
        i.triggerHandler(r, {
         event: t,
         className: n
        });
       });
      }
      function f() {
       p("before");
      }
      function d() {
       p("after");
      }
      function v() {
       p("close"), c();
      }
      function g() {
       g.hasBeenRun || (g.hasBeenRun = !0, s());
      }
      function y() {
       if (!y.hasBeenRun) {
        _ && _.applyStyles(), y.hasBeenRun = !0, a && a.tempClasses && h(a.tempClasses, function(t) {
         u.removeClass(i, t);
        });
        var e = i.data(m);
        e && (_ && _.isClassBased ? N(i, n) : (x(function() {
         var e = i.data(m) || {};
         O == e.index && N(i, n, t);
        }), i.data(m, e))), v();
       }
      }
      var w = l, _ = L(i, t, n, a);
      if (!_) return g(), f(), d(), y(), w;
      t = _.event, n = _.className;
      var $ = e.element._data(_.node);
      if ($ = $ && $.events, r || (r = o ? o.parent() : i.parent()), R(i, r)) return g(), 
      f(), d(), y(), w;
      var k = i.data(m) || {}, S = k.active || {}, E = k.totalActive || 0, C = k.last, T = !1;
      if (E > 0) {
       var A = [];
       if (_.isClassBased) {
        if ("setClass" == C.event) A.push(C), N(i, n); else if (S[n]) {
         var j = S[n];
         j.event == t ? T = !0 : (A.push(j), N(i, n));
        }
       } else if ("leave" == t && S["ng-leave"]) T = !0; else {
        for (var P in S) A.push(S[P]);
        k = {}, N(i, !0);
       }
       A.length > 0 && h(A, function(t) {
        t.cancel();
       });
      }
      if (!_.isClassBased || _.isSetClassOperation || "animate" == t || T || (T = "addClass" == t == i.hasClass(n)), 
      T) return g(), f(), d(), v(), w;
      S = k.active || {}, E = k.totalActive || 0, "leave" == t && i.one("$destroy", function() {
       var t = e.element(this), n = t.data(m);
       if (n) {
        var i = n.active["ng-leave"];
        i && (i.cancel(), N(t, "ng-leave"));
       }
      }), u.addClass(i, b), a && a.tempClasses && h(a.tempClasses, function(t) {
       u.addClass(i, t);
      });
      var O = D++;
      return E++, S[n] = _, i.data(m, {
       last: _,
       active: S,
       index: O,
       totalActive: E
      }), f(), _.before(function(e) {
       var r = i.data(m);
       e = e || !r || !r.active[n] || _.isClassBased && r.active[n].event != t, g(), e === !0 ? y() : (d(), 
       _.after(y));
      }), _.cancel;
     }
     function M(t) {
      var n = o(t);
      if (n) {
       var i = e.isFunction(n.getElementsByClassName) ? n.getElementsByClassName(b) : n.querySelectorAll("." + b);
       h(i, function(t) {
        t = e.element(t);
        var n = t.data(m);
        n && n.active && h(n.active, function(t) {
         t.cancel();
        });
       });
      }
     }
     function N(t, e) {
      if (c(t, _)) w.disabled || (w.running = !1, w.structural = !1); else if (e) {
       var n = t.data(m) || {}, i = e === !0;
       !i && n.active && n.active[e] && (n.totalActive--, delete n.active[e]), (i || !n.totalActive) && (u.removeClass(t, b), 
       t.removeData(m));
      }
     }
     function R(t, n) {
      if (w.disabled) return !0;
      if (c(t, _)) return w.running;
      var i, r, o;
      do {
       if (0 === n.length) break;
       var s = c(n, _), a = s ? w : n.data(m) || {};
       if (a.disabled) return !0;
       if (s && (o = !0), i !== !1) {
        var u = n.data(y);
        e.isDefined(u) && (i = u);
       }
       r = r || a.running || a.last && !a.last.isClassBased;
      } while (n = n.parent());
      return !o || !i && r;
     }
     u = E, _.data(m, w);
     var H = $.$watch(function() {
      return S.totalPendingRequests;
     }, function(t) {
      0 === t && (H(), $.$$postDigest(function() {
       $.$$postDigest(function() {
        w.running = !1;
       });
      }));
     }), D = 0, B = r.classNameFilter(), I = B ? function(t) {
      return B.test(t);
     } : function() {
      return !0;
     };
     return {
      animate: function(t, e, n, i, r) {
       return i = i || "ng-inline-animate", r = A(r) || {}, r.from = n ? e : null, r.to = n ? n : e, 
       T(function(e) {
        return O("animate", i, a(t), null, null, l, r, e);
       });
      },
      enter: function(n, i, r, o) {
       return o = A(o), n = e.element(n), i = s(i), r = s(r), C(n, !0), t.enter(n, i, r), 
       T(function(t) {
        return O("enter", "ng-enter", a(n), i, r, l, o, t);
       });
      },
      leave: function(n, i) {
       return i = A(i), n = e.element(n), M(n), C(n, !0), T(function(e) {
        return O("leave", "ng-leave", a(n), null, null, function() {
         t.leave(n);
        }, i, e);
       });
      },
      move: function(n, i, r, o) {
       return o = A(o), n = e.element(n), i = s(i), r = s(r), M(n), C(n, !0), t.move(n, i, r), 
       T(function(t) {
        return O("move", "ng-move", a(n), i, r, l, o, t);
       });
      },
      addClass: function(t, e, n) {
       return this.setClass(t, e, [], n);
      },
      removeClass: function(t, e, n) {
       return this.setClass(t, [], e, n);
      },
      setClass: function(n, i, r, s) {
       s = A(s);
       var c = "$$animateClasses";
       if (n = e.element(n), n = a(n), C(n)) return t.$$setClassImmediately(n, i, r, s);
       var u, l = n.data(c), p = !!l;
       return l || (l = {}, l.classes = {}), u = l.classes, i = f(i) ? i : i.split(" "), 
       h(i, function(t) {
        t && t.length && (u[t] = !0);
       }), r = f(r) ? r : r.split(" "), h(r, function(t) {
        t && t.length && (u[t] = !1);
       }), p ? (s && l.options && (l.options = e.extend(l.options || {}, s)), l.promise) : (n.data(c, l = {
        classes: u,
        options: s
       }), l.promise = T(function(e) {
        var i = n.parent(), r = o(n), s = r.parentNode;
        if (!s || s.$$NG_REMOVED || r.$$NG_REMOVED) return void e();
        var a = n.data(c);
        n.removeData(c);
        var u = n.data(m) || {}, l = j(n, a, u.active);
        return l ? O("setClass", l, n, i, null, function() {
         l[0] && t.$$addClassImmediately(n, l[0]), l[1] && t.$$removeClassImmediately(n, l[1]);
        }, a.options, e) : e();
       }));
      },
      cancel: function(t) {
       t.$$cancelFn();
      },
      enabled: function(t, e) {
       switch (arguments.length) {
       case 2:
        if (t) N(e); else {
         var n = e.data(m) || {};
         n.disabled = !0, e.data(m, n);
        }
        break;

       case 1:
        w.disabled = !t;
        break;

       default:
        t = !w.disabled;
       }
       return !!t;
      }
     };
    } ]), r.register("", [ "$window", "$sniffer", "$timeout", "$$animateReflow", function(i, r, s, a) {
     function c() {
      N || (N = a(function() {
       X = [], N = null, W = {};
      }));
     }
     function p(t, e) {
      N && N(), X.push(e), N = a(function() {
       h(X, function(t) {
        t();
       }), X = [], N = null, W = {};
      });
     }
     function v(t, n) {
      var i = o(t);
      t = e.element(i), K.push(t);
      var r = Date.now() + n;
      J >= r || (s.cancel(Y), J = r, Y = s(function() {
       m(K), K = [];
      }, n, !1));
     }
     function m(t) {
      h(t, function(t) {
       var e = t.data(F);
       e && h(e.closeAnimationFns, function(t) {
        t();
       });
      });
     }
     function y(t, e) {
      var n = e ? W[e] : null;
      if (!n) {
       var r = 0, o = 0, s = 0, a = 0;
       h(t, function(t) {
        if (t.nodeType == g) {
         var e = i.getComputedStyle(t) || {}, n = e[j + R];
         r = Math.max(b(n), r);
         var c = e[j + D];
         o = Math.max(b(c), o);
         {
          e[L + D];
         }
         a = Math.max(b(e[L + D]), a);
         var u = b(e[L + R]);
         u > 0 && (u *= parseInt(e[L + B], 10) || 1), s = Math.max(u, s);
        }
       }), n = {
        total: 0,
        transitionDelay: o,
        transitionDuration: r,
        animationDelay: a,
        animationDuration: s
       }, e && (W[e] = n);
      }
      return n;
     }
     function b(t) {
      var e = 0, n = d(t) ? t.split(/\s*,\s*/) : [];
      return h(n, function(t) {
       e = Math.max(parseFloat(t) || 0, e);
      }), e;
     }
     function w(t) {
      var e = t.parent(), n = e.data(q);
      return n || (e.data(q, ++G), n = G), n + "-" + o(t).getAttribute("class");
     }
     function _(t, e, n, i) {
      var r = [ "ng-enter", "ng-leave", "ng-move" ].indexOf(n) >= 0, s = w(e), a = s + " " + n, c = W[a] ? ++W[a].total : 0, l = {};
      if (c > 0) {
       var h = n + "-stagger", p = s + " " + h, f = !W[p];
       f && u.addClass(e, h), l = y(e, p), f && u.removeClass(e, h);
      }
      u.addClass(e, n);
      var d = e.data(F) || {}, v = y(e, a), g = v.transitionDuration, m = v.animationDuration;
      if (r && 0 === g && 0 === m) return u.removeClass(e, n), !1;
      var b = i || r && g > 0, _ = m > 0 && l.animationDelay > 0 && 0 === l.animationDuration, x = d.closeAnimationFns || [];
      e.data(F, {
       stagger: l,
       cacheKey: a,
       running: d.running || 0,
       itemIndex: c,
       blockTransition: b,
       closeAnimationFns: x
      });
      var S = o(e);
      return b && ($(S, !0), i && e.css(i)), _ && k(S, !0), !0;
     }
     function x(t, e, n, i, r) {
      function a() {
       e.off(D, c), u.removeClass(e, f), u.removeClass(e, d), R && s.cancel(R), T(e, n);
       var t = o(e);
       for (var i in m) t.style.removeProperty(m[i]);
      }
      function c(t) {
       t.stopPropagation();
       var e = t.originalEvent || t, n = e.$manualTimeStamp || e.timeStamp || Date.now(), r = parseFloat(e.elapsedTime.toFixed(z));
       Math.max(n - H, 0) >= L && r >= A && i();
      }
      var l = o(e), p = e.data(F);
      if (-1 == l.getAttribute("class").indexOf(n) || !p) return void i();
      var f = "", d = "";
      h(n.split(" "), function(t, e) {
       var n = (e > 0 ? " " : "") + t;
       f += n + "-active", d += n + "-pending";
      });
      var g = "", m = [], b = p.itemIndex, w = p.stagger, _ = 0;
      if (b > 0) {
       var x = 0;
       w.transitionDelay > 0 && 0 === w.transitionDuration && (x = w.transitionDelay * b);
       var S = 0;
       w.animationDelay > 0 && 0 === w.animationDuration && (S = w.animationDelay * b, 
       m.push(M + "animation-play-state")), _ = Math.round(100 * Math.max(x, S)) / 100;
      }
      _ || (u.addClass(e, f), p.blockTransition && $(l, !1));
      var E = p.cacheKey + " " + f, C = y(e, E), A = Math.max(C.transitionDuration, C.animationDuration);
      if (0 === A) return u.removeClass(e, f), T(e, n), void i();
      !_ && r && Object.keys(r).length > 0 && (C.transitionDuration || (e.css("transition", C.animationDuration + "s linear all"), 
      m.push("transition")), e.css(r));
      var j = Math.max(C.transitionDelay, C.animationDelay), L = j * V;
      if (m.length > 0) {
       var N = l.getAttribute("style") || "";
       ";" !== N.charAt(N.length - 1) && (N += ";"), l.setAttribute("style", N + " " + g);
      }
      var R, H = Date.now(), D = O + " " + P, B = (j + A) * U, I = (_ + B) * V;
      return _ > 0 && (u.addClass(e, d), R = s(function() {
       R = null, C.transitionDuration > 0 && $(l, !1), C.animationDuration > 0 && k(l, !1), 
       u.addClass(e, f), u.removeClass(e, d), r && (0 === C.transitionDuration && e.css("transition", C.animationDuration + "s linear all"), 
       e.css(r), m.push("transition"));
      }, _ * V, !1)), e.on(D, c), p.closeAnimationFns.push(function() {
       a(), i();
      }), p.running++, v(e, I), a;
     }
     function $(t, e) {
      t.style[j + H] = e ? "none" : "";
     }
     function k(t, e) {
      t.style[L + I] = e ? "paused" : "";
     }
     function S(t, e, n, i) {
      return _(t, e, n, i) ? function(t) {
       t && T(e, n);
      } : void 0;
     }
     function E(t, e, n, i, r) {
      return e.data(F) ? x(t, e, n, i, r) : (T(e, n), void i());
     }
     function C(t, e, n, i, r) {
      var o = S(t, e, n, r.from);
      if (!o) return c(), void i();
      var s = o;
      return p(e, function() {
       s = E(t, e, n, i, r.to);
      }), function(t) {
       (s || l)(t);
      };
     }
     function T(t, e) {
      u.removeClass(t, e);
      var n = t.data(F);
      n && (n.running && n.running--, n.running && 0 !== n.running || t.removeData(F));
     }
     function A(t, e) {
      var n = "";
      return t = f(t) ? t : t.split(/\s+/), h(t, function(t, i) {
       t && t.length > 0 && (n += (i > 0 ? " " : "") + t + e);
      }), n;
     }
     var j, P, L, O, M = "";
     t.ontransitionend === n && t.onwebkittransitionend !== n ? (M = "-webkit-", j = "WebkitTransition", 
     P = "webkitTransitionEnd transitionend") : (j = "transition", P = "transitionend"), 
     t.onanimationend === n && t.onwebkitanimationend !== n ? (M = "-webkit-", L = "WebkitAnimation", 
     O = "webkitAnimationEnd animationend") : (L = "animation", O = "animationend");
     var N, R = "Duration", H = "Property", D = "Delay", B = "IterationCount", I = "PlayState", q = "$$ngAnimateKey", F = "$$ngAnimateCSS3Data", z = 3, U = 1.5, V = 1e3, W = {}, G = 0, X = [], Y = null, J = 0, K = [];
     return {
      animate: function(t, e, n, i, r, o) {
       return o = o || {}, o.from = n, o.to = i, C("animate", t, e, r, o);
      },
      enter: function(t, e, n) {
       return n = n || {}, C("enter", t, "ng-enter", e, n);
      },
      leave: function(t, e, n) {
       return n = n || {}, C("leave", t, "ng-leave", e, n);
      },
      move: function(t, e, n) {
       return n = n || {}, C("move", t, "ng-move", e, n);
      },
      beforeSetClass: function(t, e, n, i, r) {
       r = r || {};
       var o = A(n, "-remove") + " " + A(e, "-add"), s = S("setClass", t, o, r.from);
       return s ? (p(t, i), s) : (c(), void i());
      },
      beforeAddClass: function(t, e, n, i) {
       i = i || {};
       var r = S("addClass", t, A(e, "-add"), i.from);
       return r ? (p(t, n), r) : (c(), void n());
      },
      beforeRemoveClass: function(t, e, n, i) {
       i = i || {};
       var r = S("removeClass", t, A(e, "-remove"), i.from);
       return r ? (p(t, n), r) : (c(), void n());
      },
      setClass: function(t, e, n, i, r) {
       r = r || {}, n = A(n, "-remove"), e = A(e, "-add");
       var o = n + " " + e;
       return E("setClass", t, o, i, r.to);
      },
      addClass: function(t, e, n, i) {
       return i = i || {}, E("addClass", t, A(e, "-add"), n, i.to);
      },
      removeClass: function(t, e, n, i) {
       return i = i || {}, E("removeClass", t, A(e, "-remove"), n, i.to);
      }
     };
    } ]);
   } ]);
  }(window, window.angular);
 }, {} ],
 25: [ function() {
  !function(t, e) {
   "use strict";
   function n(t, n, r) {
    i.directive(t, [ "$parse", "$swipe", function(i, o) {
     var s = 75, a = .3, c = 30;
     return function(u, l, h) {
      function p(t) {
       if (!f) return !1;
       var e = Math.abs(t.y - f.y), i = (t.x - f.x) * n;
       return d && s > e && i > 0 && i > c && a > e / i;
      }
      var f, d, v = i(h[t]), g = [ "touch" ];
      e.isDefined(h.ngSwipeDisableMouse) || g.push("mouse"), o.bind(l, {
       start: function(t) {
        f = t, d = !0;
       },
       cancel: function() {
        d = !1;
       },
       end: function(t, e) {
        p(t) && u.$apply(function() {
         l.triggerHandler(r), v(u, {
          $event: e
         });
        });
       }
      }, g);
     };
    } ]);
   }
   var i = e.module("ngTouch", []);
   i.factory("$swipe", [ function() {
    function t(t) {
     var e = t.touches && t.touches.length ? t.touches : [ t ], n = t.changedTouches && t.changedTouches[0] || t.originalEvent && t.originalEvent.changedTouches && t.originalEvent.changedTouches[0] || e[0].originalEvent || e[0];
     return {
      x: n.clientX,
      y: n.clientY
     };
    }
    function n(t, n) {
     var i = [];
     return e.forEach(t, function(t) {
      var e = r[t][n];
      e && i.push(e);
     }), i.join(" ");
    }
    var i = 10, r = {
     mouse: {
      start: "mousedown",
      move: "mousemove",
      end: "mouseup"
     },
     touch: {
      start: "touchstart",
      move: "touchmove",
      end: "touchend",
      cancel: "touchcancel"
     }
    };
    return {
     bind: function(e, r, o) {
      var s, a, c, u, l = !1;
      o = o || [ "mouse", "touch" ], e.on(n(o, "start"), function(e) {
       c = t(e), l = !0, s = 0, a = 0, u = c, r.start && r.start(c, e);
      });
      var h = n(o, "cancel");
      h && e.on(h, function(t) {
       l = !1, r.cancel && r.cancel(t);
      }), e.on(n(o, "move"), function(e) {
       if (l && c) {
        var n = t(e);
        if (s += Math.abs(n.x - u.x), a += Math.abs(n.y - u.y), u = n, !(i > s && i > a)) return a > s ? (l = !1, 
        void (r.cancel && r.cancel(e))) : (e.preventDefault(), void (r.move && r.move(n, e)));
       }
      }), e.on(n(o, "end"), function(e) {
       l && (l = !1, r.end && r.end(t(e), e));
      });
     }
    };
   } ]), i.config([ "$provide", function(t) {
    t.decorator("ngClickDirective", [ "$delegate", function(t) {
     return t.shift(), t;
    } ]);
   } ]), i.directive("ngClick", [ "$parse", "$timeout", "$rootElement", function(t, n, i) {
    function r(t, e, n, i) {
     return Math.abs(t - n) < v && Math.abs(e - i) < v;
    }
    function o(t, e, n) {
     for (var i = 0; i < t.length; i += 2) if (r(t[i], t[i + 1], e, n)) return t.splice(i, i + 2), 
     !0;
     return !1;
    }
    function s(t) {
     if (!(Date.now() - u > d)) {
      var e = t.touches && t.touches.length ? t.touches : [ t ], n = e[0].clientX, i = e[0].clientY;
      1 > n && 1 > i || h && h[0] === n && h[1] === i || (h && (h = null), "label" === t.target.tagName.toLowerCase() && (h = [ n, i ]), 
      o(l, n, i) || (t.stopPropagation(), t.preventDefault(), t.target && t.target.blur()));
     }
    }
    function a(t) {
     var e = t.touches && t.touches.length ? t.touches : [ t ], i = e[0].clientX, r = e[0].clientY;
     l.push(i, r), n(function() {
      for (var t = 0; t < l.length; t += 2) if (l[t] == i && l[t + 1] == r) return void l.splice(t, t + 2);
     }, d, !1);
    }
    function c(t, e) {
     l || (i[0].addEventListener("click", s, !0), i[0].addEventListener("touchstart", a, !0), 
     l = []), u = Date.now(), o(l, t, e);
    }
    var u, l, h, p = 750, f = 12, d = 2500, v = 25, g = "ng-click-active";
    return function(n, i, r) {
     function o() {
      d = !1, i.removeClass(g);
     }
     var s, a, u, l, h = t(r.ngClick), d = !1;
     i.on("touchstart", function(t) {
      d = !0, s = t.target ? t.target : t.srcElement, 3 == s.nodeType && (s = s.parentNode), 
      i.addClass(g), a = Date.now();
      var e = t.touches && t.touches.length ? t.touches : [ t ], n = e[0].originalEvent || e[0];
      u = n.clientX, l = n.clientY;
     }), i.on("touchmove", function() {
      o();
     }), i.on("touchcancel", function() {
      o();
     }), i.on("touchend", function(t) {
      var n = Date.now() - a, h = t.changedTouches && t.changedTouches.length ? t.changedTouches : t.touches && t.touches.length ? t.touches : [ t ], v = h[0].originalEvent || h[0], g = v.clientX, m = v.clientY, y = Math.sqrt(Math.pow(g - u, 2) + Math.pow(m - l, 2));
      d && p > n && f > y && (c(g, m), s && s.blur(), e.isDefined(r.disabled) && r.disabled !== !1 || i.triggerHandler("click", [ t ])), 
      o();
     }), i.onclick = function() {}, i.on("click", function(t, e) {
      n.$apply(function() {
       h(n, {
        $event: e || t
       });
      });
     }), i.on("mousedown", function() {
      i.addClass(g);
     }), i.on("mousemove mouseup", function() {
      i.removeClass(g);
     });
    };
   } ]), n("ngSwipeLeft", -1, "swipeleft"), n("ngSwipeRight", 1, "swiperight");
  }(window, window.angular);
 }, {} ],
 26: [ function() {
  !function(t, e, n) {
   "use strict";
   function i(t, e) {
    return e = e || Error, function() {
     var n, i, r = arguments[0], o = "[" + (t ? t + ":" : "") + r + "] ", s = arguments[1], a = arguments;
     for (n = o + s.replace(/\{\d+\}/g, function(t) {
      var e = +t.slice(1, -1);
      return e + 2 < a.length ? pt(a[e + 2]) : t;
     }), n = n + "\nhttp://errors.angularjs.org/1.3.14/" + (t ? t + "/" : "") + r, i = 2; i < arguments.length; i++) n = n + (2 == i ? "?" : "&") + "p" + (i - 2) + "=" + encodeURIComponent(pt(arguments[i]));
     return new e(n);
    };
   }
   function r(t) {
    if (null == t || S(t)) return !1;
    var e = t.length;
    return t.nodeType === mi && e ? !0 : w(t) || li(t) || 0 === e || "number" == typeof e && e > 0 && e - 1 in t;
   }
   function o(t, e, n) {
    var i, s;
    if (t) if ($(t)) for (i in t) "prototype" == i || "length" == i || "name" == i || t.hasOwnProperty && !t.hasOwnProperty(i) || e.call(n, t[i], i, t); else if (li(t) || r(t)) {
     var a = "object" != typeof t;
     for (i = 0, s = t.length; s > i; i++) (a || i in t) && e.call(n, t[i], i, t);
    } else if (t.forEach && t.forEach !== o) t.forEach(e, n, t); else for (i in t) t.hasOwnProperty(i) && e.call(n, t[i], i, t);
    return t;
   }
   function s(t) {
    return Object.keys(t).sort();
   }
   function a(t, e, n) {
    for (var i = s(t), r = 0; r < i.length; r++) e.call(n, t[i[r]], i[r]);
    return i;
   }
   function c(t) {
    return function(e, n) {
     t(n, e);
    };
   }
   function u() {
    return ++ci;
   }
   function l(t, e) {
    e ? t.$$hashKey = e : delete t.$$hashKey;
   }
   function h(t) {
    for (var e = t.$$hashKey, n = 1, i = arguments.length; i > n; n++) {
     var r = arguments[n];
     if (r) for (var o = Object.keys(r), s = 0, a = o.length; a > s; s++) {
      var c = o[s];
      t[c] = r[c];
     }
    }
    return l(t, e), t;
   }
   function p(t) {
    return parseInt(t, 10);
   }
   function f(t, e) {
    return h(Object.create(t), e);
   }
   function d() {}
   function v(t) {
    return t;
   }
   function g(t) {
    return function() {
     return t;
    };
   }
   function m(t) {
    return "undefined" == typeof t;
   }
   function y(t) {
    return "undefined" != typeof t;
   }
   function b(t) {
    return null !== t && "object" == typeof t;
   }
   function w(t) {
    return "string" == typeof t;
   }
   function _(t) {
    return "number" == typeof t;
   }
   function x(t) {
    return "[object Date]" === oi.call(t);
   }
   function $(t) {
    return "function" == typeof t;
   }
   function k(t) {
    return "[object RegExp]" === oi.call(t);
   }
   function S(t) {
    return t && t.window === t;
   }
   function E(t) {
    return t && t.$evalAsync && t.$watch;
   }
   function C(t) {
    return "[object File]" === oi.call(t);
   }
   function T(t) {
    return "[object FormData]" === oi.call(t);
   }
   function A(t) {
    return "[object Blob]" === oi.call(t);
   }
   function j(t) {
    return "boolean" == typeof t;
   }
   function P(t) {
    return t && $(t.then);
   }
   function L(t) {
    return !(!t || !(t.nodeName || t.prop && t.attr && t.find));
   }
   function O(t) {
    var e, n = {}, i = t.split(",");
    for (e = 0; e < i.length; e++) n[i[e]] = !0;
    return n;
   }
   function M(t) {
    return Gn(t.nodeName || t[0] && t[0].nodeName);
   }
   function N(t, e) {
    var n = t.indexOf(e);
    return n >= 0 && t.splice(n, 1), e;
   }
   function R(t, e, n, i) {
    if (S(t) || E(t)) throw si("cpws", "Can't copy! Making copies of Window or Scope instances is not supported.");
    if (e) {
     if (t === e) throw si("cpi", "Can't copy! Source and destination are identical.");
     if (n = n || [], i = i || [], b(t)) {
      var r = n.indexOf(t);
      if (-1 !== r) return i[r];
      n.push(t), i.push(e);
     }
     var s;
     if (li(t)) {
      e.length = 0;
      for (var a = 0; a < t.length; a++) s = R(t[a], null, n, i), b(t[a]) && (n.push(t[a]), 
      i.push(s)), e.push(s);
     } else {
      var c = e.$$hashKey;
      li(e) ? e.length = 0 : o(e, function(t, n) {
       delete e[n];
      });
      for (var u in t) t.hasOwnProperty(u) && (s = R(t[u], null, n, i), b(t[u]) && (n.push(t[u]), 
      i.push(s)), e[u] = s);
      l(e, c);
     }
    } else if (e = t, t) if (li(t)) e = R(t, [], n, i); else if (x(t)) e = new Date(t.getTime()); else if (k(t)) e = new RegExp(t.source, t.toString().match(/[^\/]*$/)[0]), 
    e.lastIndex = t.lastIndex; else if (b(t)) {
     var h = Object.create(Object.getPrototypeOf(t));
     e = R(t, h, n, i);
    }
    return e;
   }
   function H(t, e) {
    if (li(t)) {
     e = e || [];
     for (var n = 0, i = t.length; i > n; n++) e[n] = t[n];
    } else if (b(t)) {
     e = e || {};
     for (var r in t) ("$" !== r.charAt(0) || "$" !== r.charAt(1)) && (e[r] = t[r]);
    }
    return e || t;
   }
   function D(t, e) {
    if (t === e) return !0;
    if (null === t || null === e) return !1;
    if (t !== t && e !== e) return !0;
    var i, r, o, s = typeof t, a = typeof e;
    if (s == a && "object" == s) {
     if (!li(t)) {
      if (x(t)) return x(e) ? D(t.getTime(), e.getTime()) : !1;
      if (k(t) && k(e)) return t.toString() == e.toString();
      if (E(t) || E(e) || S(t) || S(e) || li(e)) return !1;
      o = {};
      for (r in t) if ("$" !== r.charAt(0) && !$(t[r])) {
       if (!D(t[r], e[r])) return !1;
       o[r] = !0;
      }
      for (r in e) if (!o.hasOwnProperty(r) && "$" !== r.charAt(0) && e[r] !== n && !$(e[r])) return !1;
      return !0;
     }
     if (!li(e)) return !1;
     if ((i = t.length) == e.length) {
      for (r = 0; i > r; r++) if (!D(t[r], e[r])) return !1;
      return !0;
     }
    }
    return !1;
   }
   function B(t, e, n) {
    return t.concat(ni.call(e, n));
   }
   function I(t, e) {
    return ni.call(t, e || 0);
   }
   function q(t, e) {
    var n = arguments.length > 2 ? I(arguments, 2) : [];
    return !$(e) || e instanceof RegExp ? e : n.length ? function() {
     return arguments.length ? e.apply(t, B(n, arguments, 0)) : e.apply(t, n);
    } : function() {
     return arguments.length ? e.apply(t, arguments) : e.call(t);
    };
   }
   function F(t, i) {
    var r = i;
    return "string" == typeof t && "$" === t.charAt(0) && "$" === t.charAt(1) ? r = n : S(i) ? r = "$WINDOW" : i && e === i ? r = "$DOCUMENT" : E(i) && (r = "$SCOPE"), 
    r;
   }
   function z(t, e) {
    return "undefined" == typeof t ? n : (_(e) || (e = e ? 2 : null), JSON.stringify(t, F, e));
   }
   function U(t) {
    return w(t) ? JSON.parse(t) : t;
   }
   function V(t) {
    t = Zn(t).clone();
    try {
     t.empty();
    } catch (e) {}
    var n = Zn("<div>").append(t).html();
    try {
     return t[0].nodeType === yi ? Gn(n) : n.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function(t, e) {
      return "<" + Gn(e);
     });
    } catch (e) {
     return Gn(n);
    }
   }
   function W(t) {
    try {
     return decodeURIComponent(t);
    } catch (e) {}
   }
   function G(t) {
    var e, n, i = {};
    return o((t || "").split("&"), function(t) {
     if (t && (e = t.replace(/\+/g, "%20").split("="), n = W(e[0]), y(n))) {
      var r = y(e[1]) ? W(e[1]) : !0;
      Xn.call(i, n) ? li(i[n]) ? i[n].push(r) : i[n] = [ i[n], r ] : i[n] = r;
     }
    }), i;
   }
   function X(t) {
    var e = [];
    return o(t, function(t, n) {
     li(t) ? o(t, function(t) {
      e.push(J(n, !0) + (t === !0 ? "" : "=" + J(t, !0)));
     }) : e.push(J(n, !0) + (t === !0 ? "" : "=" + J(t, !0)));
    }), e.length ? e.join("&") : "";
   }
   function Y(t) {
    return J(t, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+");
   }
   function J(t, e) {
    return encodeURIComponent(t).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, e ? "%20" : "+");
   }
   function K(t, e) {
    var n, i, r = di.length;
    for (t = Zn(t), i = 0; r > i; ++i) if (n = di[i] + e, w(n = t.attr(n))) return n;
    return null;
   }
   function Q(t, e) {
    var n, i, r = {};
    o(di, function(e) {
     var r = e + "app";
     !n && t.hasAttribute && t.hasAttribute(r) && (n = t, i = t.getAttribute(r));
    }), o(di, function(e) {
     var r, o = e + "app";
     !n && (r = t.querySelector("[" + o.replace(":", "\\:") + "]")) && (n = r, i = r.getAttribute(o));
    }), n && (r.strictDi = null !== K(n, "strict-di"), e(n, i ? [ i ] : [], r));
   }
   function Z(n, i, r) {
    b(r) || (r = {});
    var s = {
     strictDi: !1
    };
    r = h(s, r);
    var a = function() {
     if (n = Zn(n), n.injector()) {
      var t = n[0] === e ? "document" : V(n);
      throw si("btstrpd", "App Already Bootstrapped with this Element '{0}'", t.replace(/</, "&lt;").replace(/>/, "&gt;"));
     }
     i = i || [], i.unshift([ "$provide", function(t) {
      t.value("$rootElement", n);
     } ]), r.debugInfoEnabled && i.push([ "$compileProvider", function(t) {
      t.debugInfoEnabled(!0);
     } ]), i.unshift("ng");
     var o = Ut(i, r.strictDi);
     return o.invoke([ "$rootScope", "$rootElement", "$compile", "$injector", function(t, e, n, i) {
      t.$apply(function() {
       e.data("$injector", i), n(e)(t);
      });
     } ]), o;
    }, c = /^NG_ENABLE_DEBUG_INFO!/, u = /^NG_DEFER_BOOTSTRAP!/;
    return t && c.test(t.name) && (r.debugInfoEnabled = !0, t.name = t.name.replace(c, "")), 
    t && !u.test(t.name) ? a() : (t.name = t.name.replace(u, ""), ai.resumeBootstrap = function(t) {
     return o(t, function(t) {
      i.push(t);
     }), a();
    }, void ($(ai.resumeDeferredBootstrap) && ai.resumeDeferredBootstrap()));
   }
   function tt() {
    t.name = "NG_ENABLE_DEBUG_INFO!" + t.name, t.location.reload();
   }
   function et(t) {
    var e = ai.element(t).injector();
    if (!e) throw si("test", "no injector found for element argument to getTestability");
    return e.get("$$testability");
   }
   function nt(t, e) {
    return e = e || "_", t.replace(vi, function(t, n) {
     return (n ? e : "") + t.toLowerCase();
    });
   }
   function it() {
    var e;
    gi || (ti = t.jQuery, ti && ti.fn.on ? (Zn = ti, h(ti.fn, {
     scope: Ri.scope,
     isolateScope: Ri.isolateScope,
     controller: Ri.controller,
     injector: Ri.injector,
     inheritedData: Ri.inheritedData
    }), e = ti.cleanData, ti.cleanData = function(t) {
     var n;
     if (ui) ui = !1; else for (var i, r = 0; null != (i = t[r]); r++) n = ti._data(i, "events"), 
     n && n.$destroy && ti(i).triggerHandler("$destroy");
     e(t);
    }) : Zn = wt, ai.element = Zn, gi = !0);
   }
   function rt(t, e, n) {
    if (!t) throw si("areq", "Argument '{0}' is {1}", e || "?", n || "required");
    return t;
   }
   function ot(t, e, n) {
    return n && li(t) && (t = t[t.length - 1]), rt($(t), e, "not a function, got " + (t && "object" == typeof t ? t.constructor.name || "Object" : typeof t)), 
    t;
   }
   function st(t, e) {
    if ("hasOwnProperty" === t) throw si("badname", "hasOwnProperty is not a valid {0} name", e);
   }
   function at(t, e, n) {
    if (!e) return t;
    for (var i, r = e.split("."), o = t, s = r.length, a = 0; s > a; a++) i = r[a], 
    t && (t = (o = t)[i]);
    return !n && $(t) ? q(o, t) : t;
   }
   function ct(t) {
    var e = t[0], n = t[t.length - 1], i = [ e ];
    do {
     if (e = e.nextSibling, !e) break;
     i.push(e);
    } while (e !== n);
    return Zn(i);
   }
   function ut() {
    return Object.create(null);
   }
   function lt(t) {
    function e(t, e, n) {
     return t[e] || (t[e] = n());
    }
    var n = i("$injector"), r = i("ng"), o = e(t, "angular", Object);
    return o.$$minErr = o.$$minErr || i, e(o, "module", function() {
     var t = {};
     return function(i, o, s) {
      var a = function(t, e) {
       if ("hasOwnProperty" === t) throw r("badname", "hasOwnProperty is not a valid {0} name", e);
      };
      return a(i, "module"), o && t.hasOwnProperty(i) && (t[i] = null), e(t, i, function() {
       function t(t, n, i, r) {
        return r || (r = e), function() {
         return r[i || "push"]([ t, n, arguments ]), u;
        };
       }
       if (!o) throw n("nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", i);
       var e = [], r = [], a = [], c = t("$injector", "invoke", "push", r), u = {
        _invokeQueue: e,
        _configBlocks: r,
        _runBlocks: a,
        requires: o,
        name: i,
        provider: t("$provide", "provider"),
        factory: t("$provide", "factory"),
        service: t("$provide", "service"),
        value: t("$provide", "value"),
        constant: t("$provide", "constant", "unshift"),
        animation: t("$animateProvider", "register"),
        filter: t("$filterProvider", "register"),
        controller: t("$controllerProvider", "register"),
        directive: t("$compileProvider", "directive"),
        config: c,
        run: function(t) {
         return a.push(t), this;
        }
       };
       return s && c(s), u;
      });
     };
    });
   }
   function ht(t) {
    var e = [];
    return JSON.stringify(t, function(t, n) {
     if (n = F(t, n), b(n)) {
      if (e.indexOf(n) >= 0) return "<<already seen>>";
      e.push(n);
     }
     return n;
    });
   }
   function pt(t) {
    return "function" == typeof t ? t.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof t ? "undefined" : "string" != typeof t ? ht(t) : t;
   }
   function ft(e) {
    h(e, {
     bootstrap: Z,
     copy: R,
     extend: h,
     equals: D,
     element: Zn,
     forEach: o,
     injector: Ut,
     noop: d,
     bind: q,
     toJson: z,
     fromJson: U,
     identity: v,
     isUndefined: m,
     isDefined: y,
     isString: w,
     isFunction: $,
     isObject: b,
     isNumber: _,
     isElement: L,
     isArray: li,
     version: xi,
     isDate: x,
     lowercase: Gn,
     uppercase: Yn,
     callbacks: {
      counter: 0
     },
     getTestability: et,
     $$minErr: i,
     $$csp: fi,
     reloadWithDebugInfo: tt
    }), ei = lt(t);
    try {
     ei("ngLocale");
    } catch (n) {
     ei("ngLocale", []).provider("$locale", ge);
    }
    ei("ng", [ "ngLocale" ], [ "$provide", function(t) {
     t.provider({
      $$sanitizeUri: Xe
     }), t.provider("$compile", Kt).directive({
      a: Tr,
      input: Vr,
      textarea: Vr,
      form: Or,
      script: No,
      select: Do,
      style: Io,
      option: Bo,
      ngBind: Xr,
      ngBindHtml: Jr,
      ngBindTemplate: Yr,
      ngClass: Qr,
      ngClassEven: to,
      ngClassOdd: Zr,
      ngCloak: eo,
      ngController: no,
      ngForm: Mr,
      ngHide: Ao,
      ngIf: oo,
      ngInclude: so,
      ngInit: co,
      ngNonBindable: $o,
      ngPluralize: ko,
      ngRepeat: So,
      ngShow: To,
      ngStyle: jo,
      ngSwitch: Po,
      ngSwitchWhen: Lo,
      ngSwitchDefault: Oo,
      ngOptions: Ho,
      ngTransclude: Mo,
      ngModel: wo,
      ngList: uo,
      ngChange: Kr,
      pattern: Fo,
      ngPattern: Fo,
      required: qo,
      ngRequired: qo,
      minlength: Uo,
      ngMinlength: Uo,
      maxlength: zo,
      ngMaxlength: zo,
      ngValue: Gr,
      ngModelOptions: xo
     }).directive({
      ngInclude: ao
     }).directive(Ar).directive(io), t.provider({
      $anchorScroll: Vt,
      $animate: Wi,
      $browser: Xt,
      $cacheFactory: Yt,
      $controller: ee,
      $document: ne,
      $exceptionHandler: ie,
      $filter: an,
      $interpolate: de,
      $interval: ve,
      $http: le,
      $httpBackend: pe,
      $location: je,
      $log: Pe,
      $parse: Fe,
      $rootScope: Ge,
      $q: ze,
      $$q: Ue,
      $sce: Qe,
      $sceDelegate: Ke,
      $sniffer: Ze,
      $templateCache: Jt,
      $templateRequest: tn,
      $$testability: en,
      $timeout: nn,
      $window: sn,
      $$rAF: We,
      $$asyncCallback: Wt,
      $$jqLite: Bt
     });
    } ]);
   }
   function dt() {
    return ++ki;
   }
   function vt(t) {
    return t.replace(Ci, function(t, e, n, i) {
     return i ? n.toUpperCase() : n;
    }).replace(Ti, "Moz$1");
   }
   function gt(t) {
    return !Li.test(t);
   }
   function mt(t) {
    var e = t.nodeType;
    return e === mi || !e || e === wi;
   }
   function yt(t, e) {
    var n, i, r, s, a = e.createDocumentFragment(), c = [];
    if (gt(t)) c.push(e.createTextNode(t)); else {
     for (n = n || a.appendChild(e.createElement("div")), i = (Oi.exec(t) || [ "", "" ])[1].toLowerCase(), 
     r = Ni[i] || Ni._default, n.innerHTML = r[1] + t.replace(Mi, "<$1></$2>") + r[2], 
     s = r[0]; s--; ) n = n.lastChild;
     c = B(c, n.childNodes), n = a.firstChild, n.textContent = "";
    }
    return a.textContent = "", a.innerHTML = "", o(c, function(t) {
     a.appendChild(t);
    }), a;
   }
   function bt(t, n) {
    n = n || e;
    var i;
    return (i = Pi.exec(t)) ? [ n.createElement(i[1]) ] : (i = yt(t, n)) ? i.childNodes : [];
   }
   function wt(t) {
    if (t instanceof wt) return t;
    var e;
    if (w(t) && (t = hi(t), e = !0), !(this instanceof wt)) {
     if (e && "<" != t.charAt(0)) throw ji("nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");
     return new wt(t);
    }
    e ? jt(this, bt(t)) : jt(this, t);
   }
   function _t(t) {
    return t.cloneNode(!0);
   }
   function xt(t, e) {
    if (e || kt(t), t.querySelectorAll) for (var n = t.querySelectorAll("*"), i = 0, r = n.length; r > i; i++) kt(n[i]);
   }
   function $t(t, e, n, i) {
    if (y(i)) throw ji("offargs", "jqLite#off() does not support the `selector` argument");
    var r = St(t), s = r && r.events, a = r && r.handle;
    if (a) if (e) o(e.split(" "), function(e) {
     if (y(n)) {
      var i = s[e];
      if (N(i || [], n), i && i.length > 0) return;
     }
     Ei(t, e, a), delete s[e];
    }); else for (e in s) "$destroy" !== e && Ei(t, e, a), delete s[e];
   }
   function kt(t, e) {
    var i = t.ng339, r = i && $i[i];
    if (r) {
     if (e) return void delete r.data[e];
     r.handle && (r.events.$destroy && r.handle({}, "$destroy"), $t(t)), delete $i[i], 
     t.ng339 = n;
    }
   }
   function St(t, e) {
    var i = t.ng339, r = i && $i[i];
    return e && !r && (t.ng339 = i = dt(), r = $i[i] = {
     events: {},
     data: {},
     handle: n
    }), r;
   }
   function Et(t, e, n) {
    if (mt(t)) {
     var i = y(n), r = !i && e && !b(e), o = !e, s = St(t, !r), a = s && s.data;
     if (i) a[e] = n; else {
      if (o) return a;
      if (r) return a && a[e];
      h(a, e);
     }
    }
   }
   function Ct(t, e) {
    return t.getAttribute ? (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + e + " ") > -1 : !1;
   }
   function Tt(t, e) {
    e && t.setAttribute && o(e.split(" "), function(e) {
     t.setAttribute("class", hi((" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + hi(e) + " ", " ")));
    });
   }
   function At(t, e) {
    if (e && t.setAttribute) {
     var n = (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
     o(e.split(" "), function(t) {
      t = hi(t), -1 === n.indexOf(" " + t + " ") && (n += t + " ");
     }), t.setAttribute("class", hi(n));
    }
   }
   function jt(t, e) {
    if (e) if (e.nodeType) t[t.length++] = e; else {
     var n = e.length;
     if ("number" == typeof n && e.window !== e) {
      if (n) for (var i = 0; n > i; i++) t[t.length++] = e[i];
     } else t[t.length++] = e;
    }
   }
   function Pt(t, e) {
    return Lt(t, "$" + (e || "ngController") + "Controller");
   }
   function Lt(t, e, i) {
    t.nodeType == wi && (t = t.documentElement);
    for (var r = li(e) ? e : [ e ]; t; ) {
     for (var o = 0, s = r.length; s > o; o++) if ((i = Zn.data(t, r[o])) !== n) return i;
     t = t.parentNode || t.nodeType === _i && t.host;
    }
   }
   function Ot(t) {
    for (xt(t, !0); t.firstChild; ) t.removeChild(t.firstChild);
   }
   function Mt(t, e) {
    e || xt(t);
    var n = t.parentNode;
    n && n.removeChild(t);
   }
   function Nt(e, n) {
    n = n || t, "complete" === n.document.readyState ? n.setTimeout(e) : Zn(n).on("load", e);
   }
   function Rt(t, e) {
    var n = Hi[e.toLowerCase()];
    return n && Di[M(t)] && n;
   }
   function Ht(t, e) {
    var n = t.nodeName;
    return ("INPUT" === n || "TEXTAREA" === n) && Bi[e];
   }
   function Dt(t, e) {
    var n = function(n, i) {
     n.isDefaultPrevented = function() {
      return n.defaultPrevented;
     };
     var r = e[i || n.type], o = r ? r.length : 0;
     if (o) {
      if (m(n.immediatePropagationStopped)) {
       var s = n.stopImmediatePropagation;
       n.stopImmediatePropagation = function() {
        n.immediatePropagationStopped = !0, n.stopPropagation && n.stopPropagation(), s && s.call(n);
       };
      }
      n.isImmediatePropagationStopped = function() {
       return n.immediatePropagationStopped === !0;
      }, o > 1 && (r = H(r));
      for (var a = 0; o > a; a++) n.isImmediatePropagationStopped() || r[a].call(t, n);
     }
    };
    return n.elem = t, n;
   }
   function Bt() {
    this.$get = function() {
     return h(wt, {
      hasClass: function(t, e) {
       return t.attr && (t = t[0]), Ct(t, e);
      },
      addClass: function(t, e) {
       return t.attr && (t = t[0]), At(t, e);
      },
      removeClass: function(t, e) {
       return t.attr && (t = t[0]), Tt(t, e);
      }
     });
    };
   }
   function It(t, e) {
    var n = t && t.$$hashKey;
    if (n) return "function" == typeof n && (n = t.$$hashKey()), n;
    var i = typeof t;
    return n = "function" == i || "object" == i && null !== t ? t.$$hashKey = i + ":" + (e || u)() : i + ":" + t;
   }
   function qt(t, e) {
    if (e) {
     var n = 0;
     this.nextUid = function() {
      return ++n;
     };
    }
    o(t, this.put, this);
   }
   function Ft(t) {
    var e = t.toString().replace(zi, ""), n = e.match(Ii);
    return n ? "function(" + (n[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn";
   }
   function zt(t, e, n) {
    var i, r, s, a;
    if ("function" == typeof t) {
     if (!(i = t.$inject)) {
      if (i = [], t.length) {
       if (e) throw w(n) && n || (n = t.name || Ft(t)), Ui("strictdi", "{0} is not using explicit annotation and cannot be invoked in strict mode", n);
       r = t.toString().replace(zi, ""), s = r.match(Ii), o(s[1].split(qi), function(t) {
        t.replace(Fi, function(t, e, n) {
         i.push(n);
        });
       });
      }
      t.$inject = i;
     }
    } else li(t) ? (a = t.length - 1, ot(t[a], "fn"), i = t.slice(0, a)) : ot(t, "fn", !0);
    return i;
   }
   function Ut(t, e) {
    function i(t) {
     return function(e, n) {
      return b(e) ? void o(e, c(t)) : t(e, n);
     };
    }
    function r(t, e) {
     if (st(t, "service"), ($(e) || li(e)) && (e = E.instantiate(e)), !e.$get) throw Ui("pget", "Provider '{0}' must define $get factory method.", t);
     return S[t + _] = e;
    }
    function s(t, e) {
     return function() {
      var n = T.invoke(e, this);
      if (m(n)) throw Ui("undef", "Provider '{0}' must return a value from $get factory method.", t);
      return n;
     };
    }
    function a(t, e, n) {
     return r(t, {
      $get: n !== !1 ? s(t, e) : e
     });
    }
    function u(t, e) {
     return a(t, [ "$injector", function(t) {
      return t.instantiate(e);
     } ]);
    }
    function l(t, e) {
     return a(t, g(e), !1);
    }
    function h(t, e) {
     st(t, "constant"), S[t] = e, C[t] = e;
    }
    function p(t, e) {
     var n = E.get(t + _), i = n.$get;
     n.$get = function() {
      var t = T.invoke(i, n);
      return T.invoke(e, null, {
       $delegate: t
      });
     };
    }
    function f(t) {
     var e, n = [];
     return o(t, function(t) {
      function i(t) {
       var e, n;
       for (e = 0, n = t.length; n > e; e++) {
        var i = t[e], r = E.get(i[0]);
        r[i[1]].apply(r, i[2]);
       }
      }
      if (!k.get(t)) {
       k.put(t, !0);
       try {
        w(t) ? (e = ei(t), n = n.concat(f(e.requires)).concat(e._runBlocks), i(e._invokeQueue), 
        i(e._configBlocks)) : $(t) ? n.push(E.invoke(t)) : li(t) ? n.push(E.invoke(t)) : ot(t, "module");
       } catch (r) {
        throw li(t) && (t = t[t.length - 1]), r.message && r.stack && -1 == r.stack.indexOf(r.message) && (r = r.message + "\n" + r.stack), 
        Ui("modulerr", "Failed to instantiate module {0} due to:\n{1}", t, r.stack || r.message || r);
       }
      }
     }), n;
    }
    function v(t, n) {
     function i(e, i) {
      if (t.hasOwnProperty(e)) {
       if (t[e] === y) throw Ui("cdep", "Circular dependency found: {0}", e + " <- " + x.join(" <- "));
       return t[e];
      }
      try {
       return x.unshift(e), t[e] = y, t[e] = n(e, i);
      } catch (r) {
       throw t[e] === y && delete t[e], r;
      } finally {
       x.shift();
      }
     }
     function r(t, n, r, o) {
      "string" == typeof r && (o = r, r = null);
      var s, a, c, u = [], l = Ut.$$annotate(t, e, o);
      for (a = 0, s = l.length; s > a; a++) {
       if (c = l[a], "string" != typeof c) throw Ui("itkn", "Incorrect injection token! Expected service name as string, got {0}", c);
       u.push(r && r.hasOwnProperty(c) ? r[c] : i(c, o));
      }
      return li(t) && (t = t[s]), t.apply(n, u);
     }
     function o(t, e, n) {
      var i = Object.create((li(t) ? t[t.length - 1] : t).prototype || null), o = r(t, i, e, n);
      return b(o) || $(o) ? o : i;
     }
     return {
      invoke: r,
      instantiate: o,
      get: i,
      annotate: Ut.$$annotate,
      has: function(e) {
       return S.hasOwnProperty(e + _) || t.hasOwnProperty(e);
      }
     };
    }
    e = e === !0;
    var y = {}, _ = "Provider", x = [], k = new qt([], !0), S = {
     $provide: {
      provider: i(r),
      factory: i(a),
      service: i(u),
      value: i(l),
      constant: i(h),
      decorator: p
     }
    }, E = S.$injector = v(S, function(t, e) {
     throw ai.isString(e) && x.push(e), Ui("unpr", "Unknown provider: {0}", x.join(" <- "));
    }), C = {}, T = C.$injector = v(C, function(t, e) {
     var i = E.get(t + _, e);
     return T.invoke(i.$get, i, n, t);
    });
    return o(f(t), function(t) {
     T.invoke(t || d);
    }), T;
   }
   function Vt() {
    var t = !0;
    this.disableAutoScrolling = function() {
     t = !1;
    }, this.$get = [ "$window", "$location", "$rootScope", function(e, n, i) {
     function r(t) {
      var e = null;
      return Array.prototype.some.call(t, function(t) {
       return "a" === M(t) ? (e = t, !0) : void 0;
      }), e;
     }
     function o() {
      var t = a.yOffset;
      if ($(t)) t = t(); else if (L(t)) {
       var n = t[0], i = e.getComputedStyle(n);
       t = "fixed" !== i.position ? 0 : n.getBoundingClientRect().bottom;
      } else _(t) || (t = 0);
      return t;
     }
     function s(t) {
      if (t) {
       t.scrollIntoView();
       var n = o();
       if (n) {
        var i = t.getBoundingClientRect().top;
        e.scrollBy(0, i - n);
       }
      } else e.scrollTo(0, 0);
     }
     function a() {
      var t, e = n.hash();
      e ? (t = c.getElementById(e)) ? s(t) : (t = r(c.getElementsByName(e))) ? s(t) : "top" === e && s(null) : s(null);
     }
     var c = e.document;
     return t && i.$watch(function() {
      return n.hash();
     }, function(t, e) {
      (t !== e || "" !== t) && Nt(function() {
       i.$evalAsync(a);
      });
     }), a;
    } ];
   }
   function Wt() {
    this.$get = [ "$$rAF", "$timeout", function(t, e) {
     return t.supported ? function(e) {
      return t(e);
     } : function(t) {
      return e(t, 0, !1);
     };
    } ];
   }
   function Gt(t, e, i, r) {
    function s(t) {
     try {
      t.apply(null, I(arguments, 1));
     } finally {
      if ($--, 0 === $) for (;k.length; ) try {
       k.pop()();
      } catch (e) {
       i.error(e);
      }
     }
    }
    function a(t) {
     var e = t.indexOf("#");
     return -1 === e ? "" : t.substr(e + 1);
    }
    function c(t, e) {
     !function n() {
      o(E, function(t) {
       t();
      }), S = e(n, t);
     }();
    }
    function u() {
     l(), h();
    }
    function l() {
     C = t.history.state, C = m(C) ? null : C, D(C, M) && (C = M), M = C;
    }
    function h() {
     (A !== f.url() || T !== C) && (A = f.url(), T = C, o(L, function(t) {
      t(f.url(), C);
     }));
    }
    function p(t) {
     try {
      return decodeURIComponent(t);
     } catch (e) {
      return t;
     }
    }
    var f = this, v = e[0], g = t.location, y = t.history, b = t.setTimeout, _ = t.clearTimeout, x = {};
    f.isMock = !1;
    var $ = 0, k = [];
    f.$$completeOutstandingRequest = s, f.$$incOutstandingRequestCount = function() {
     $++;
    }, f.notifyWhenNoOutstandingRequests = function(t) {
     o(E, function(t) {
      t();
     }), 0 === $ ? t() : k.push(t);
    };
    var S, E = [];
    f.addPollFn = function(t) {
     return m(S) && c(100, b), E.push(t), t;
    };
    var C, T, A = g.href, j = e.find("base"), P = null;
    l(), T = C, f.url = function(e, n, i) {
     if (m(i) && (i = null), g !== t.location && (g = t.location), y !== t.history && (y = t.history), 
     e) {
      var o = T === i;
      if (A === e && (!r.history || o)) return f;
      var s = A && _e(A) === _e(e);
      return A = e, T = i, !r.history || s && o ? (s || (P = e), n ? g.replace(e) : s ? g.hash = a(e) : g.href = e) : (y[n ? "replaceState" : "pushState"](i, "", e), 
      l(), T = C), f;
     }
     return P || g.href.replace(/%27/g, "'");
    }, f.state = function() {
     return C;
    };
    var L = [], O = !1, M = null;
    f.onUrlChange = function(e) {
     return O || (r.history && Zn(t).on("popstate", u), Zn(t).on("hashchange", u), O = !0), 
     L.push(e), e;
    }, f.$$checkUrlChange = h, f.baseHref = function() {
     var t = j.attr("href");
     return t ? t.replace(/^(https?\:)?\/\/[^\/]*/, "") : "";
    };
    var N = {}, R = "", H = f.baseHref();
    f.cookies = function(t, e) {
     var r, o, s, a, c;
     if (!t) {
      if (v.cookie !== R) for (R = v.cookie, o = R.split("; "), N = {}, a = 0; a < o.length; a++) s = o[a], 
      c = s.indexOf("="), c > 0 && (t = p(s.substring(0, c)), N[t] === n && (N[t] = p(s.substring(c + 1))));
      return N;
     }
     e === n ? v.cookie = encodeURIComponent(t) + "=;path=" + H + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : w(e) && (r = (v.cookie = encodeURIComponent(t) + "=" + encodeURIComponent(e) + ";path=" + H).length + 1, 
     r > 4096 && i.warn("Cookie '" + t + "' possibly not set or overflowed because it was too large (" + r + " > 4096 bytes)!"));
    }, f.defer = function(t, e) {
     var n;
     return $++, n = b(function() {
      delete x[n], s(t);
     }, e || 0), x[n] = !0, n;
    }, f.defer.cancel = function(t) {
     return x[t] ? (delete x[t], _(t), s(d), !0) : !1;
    };
   }
   function Xt() {
    this.$get = [ "$window", "$log", "$sniffer", "$document", function(t, e, n, i) {
     return new Gt(t, i, e, n);
    } ];
   }
   function Yt() {
    this.$get = function() {
     function t(t, n) {
      function r(t) {
       t != p && (f ? f == t && (f = t.n) : f = t, o(t.n, t.p), o(t, p), p = t, p.n = null);
      }
      function o(t, e) {
       t != e && (t && (t.p = e), e && (e.n = t));
      }
      if (t in e) throw i("$cacheFactory")("iid", "CacheId '{0}' is already taken!", t);
      var s = 0, a = h({}, n, {
       id: t
      }), c = {}, u = n && n.capacity || Number.MAX_VALUE, l = {}, p = null, f = null;
      return e[t] = {
       put: function(t, e) {
        if (u < Number.MAX_VALUE) {
         var n = l[t] || (l[t] = {
          key: t
         });
         r(n);
        }
        if (!m(e)) return t in c || s++, c[t] = e, s > u && this.remove(f.key), e;
       },
       get: function(t) {
        if (u < Number.MAX_VALUE) {
         var e = l[t];
         if (!e) return;
         r(e);
        }
        return c[t];
       },
       remove: function(t) {
        if (u < Number.MAX_VALUE) {
         var e = l[t];
         if (!e) return;
         e == p && (p = e.p), e == f && (f = e.n), o(e.n, e.p), delete l[t];
        }
        delete c[t], s--;
       },
       removeAll: function() {
        c = {}, s = 0, l = {}, p = f = null;
       },
       destroy: function() {
        c = null, a = null, l = null, delete e[t];
       },
       info: function() {
        return h({}, a, {
         size: s
        });
       }
      };
     }
     var e = {};
     return t.info = function() {
      var t = {};
      return o(e, function(e, n) {
       t[n] = e.info();
      }), t;
     }, t.get = function(t) {
      return e[t];
     }, t;
    };
   }
   function Jt() {
    this.$get = [ "$cacheFactory", function(t) {
     return t("templates");
    } ];
   }
   function Kt(t, i) {
    function r(t, e) {
     var n = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/, i = {};
     return o(t, function(t, r) {
      var o = t.match(n);
      if (!o) throw Gi("iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", e, r, t);
      i[r] = {
       mode: o[1][0],
       collection: "*" === o[2],
       optional: "?" === o[3],
       attrName: o[4] || r
      };
     }), i;
    }
    var s = {}, a = "Directive", u = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, l = /(([\w\-]+)(?:\:([^;]+))?;?)/, p = O("ngSrc,ngSrcset,src,srcset"), m = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/, _ = /^(on[a-z]+|formaction)$/;
    this.directive = function k(e, n) {
     return st(e, "directive"), w(e) ? (rt(n, "directiveFactory"), s.hasOwnProperty(e) || (s[e] = [], 
     t.factory(e + a, [ "$injector", "$exceptionHandler", function(t, n) {
      var i = [];
      return o(s[e], function(o, s) {
       try {
        var a = t.invoke(o);
        $(a) ? a = {
         compile: g(a)
        } : !a.compile && a.link && (a.compile = g(a.link)), a.priority = a.priority || 0, 
        a.index = s, a.name = a.name || e, a.require = a.require || a.controller && a.name, 
        a.restrict = a.restrict || "EA", b(a.scope) && (a.$$isolateBindings = r(a.scope, a.name)), 
        i.push(a);
       } catch (c) {
        n(c);
       }
      }), i;
     } ])), s[e].push(n)) : o(e, c(k)), this;
    }, this.aHrefSanitizationWhitelist = function(t) {
     return y(t) ? (i.aHrefSanitizationWhitelist(t), this) : i.aHrefSanitizationWhitelist();
    }, this.imgSrcSanitizationWhitelist = function(t) {
     return y(t) ? (i.imgSrcSanitizationWhitelist(t), this) : i.imgSrcSanitizationWhitelist();
    };
    var x = !0;
    this.debugInfoEnabled = function(t) {
     return y(t) ? (x = t, this) : x;
    }, this.$get = [ "$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function(t, i, r, c, g, y, k, S, C, T, A) {
     function j(t, e) {
      try {
       t.addClass(e);
      } catch (n) {}
     }
     function P(t, e, n, i, r) {
      t instanceof Zn || (t = Zn(t)), o(t, function(e, n) {
       e.nodeType == yi && e.nodeValue.match(/\S+/) && (t[n] = Zn(e).wrap("<span></span>").parent()[0]);
      });
      var s = O(t, e, t, n, i, r);
      P.$$addScopeClass(t);
      var a = null;
      return function(e, n, i) {
       rt(e, "scope"), i = i || {};
       var r = i.parentBoundTranscludeFn, o = i.transcludeControllers, c = i.futureParentElement;
       r && r.$$boundTransclude && (r = r.$$boundTransclude), a || (a = L(c));
       var u;
       if (u = "html" !== a ? Zn(Q(a, Zn("<div>").append(t).html())) : n ? Ri.clone.call(t) : t, 
       o) for (var l in o) u.data("$" + l + "Controller", o[l].instance);
       return P.$$addScopeInfo(u, e), n && n(u, e), s && s(e, u, u, r), u;
      };
     }
     function L(t) {
      var e = t && t[0];
      return e && "foreignobject" !== M(e) && e.toString().match(/SVG/) ? "svg" : "html";
     }
     function O(t, e, i, r, o, s) {
      function a(t, i, r, o) {
       var s, a, c, u, l, h, p, f, g;
       if (d) {
        var m = i.length;
        for (g = new Array(m), l = 0; l < v.length; l += 3) p = v[l], g[p] = i[p];
       } else g = i;
       for (l = 0, h = v.length; h > l; ) c = g[v[l++]], s = v[l++], a = v[l++], s ? (s.scope ? (u = t.$new(), 
       P.$$addScopeInfo(Zn(c), u)) : u = t, f = s.transcludeOnThisElement ? R(t, s.transclude, o, s.elementTranscludeOnThisElement) : !s.templateOnThisElement && o ? o : !o && e ? R(t, e) : null, 
       s(a, u, c, r, f)) : a && a(t, c.childNodes, n, o);
      }
      for (var c, u, l, h, p, f, d, v = [], g = 0; g < t.length; g++) c = new st(), u = H(t[g], [], c, 0 === g ? r : n, o), 
      l = u.length ? F(u, t[g], c, e, i, null, [], [], s) : null, l && l.scope && P.$$addScopeClass(c.$$element), 
      p = l && l.terminal || !(h = t[g].childNodes) || !h.length ? null : O(h, l ? (l.transcludeOnThisElement || !l.templateOnThisElement) && l.transclude : e), 
      (l || p) && (v.push(g, l, p), f = !0, d = d || l), s = null;
      return f ? a : null;
     }
     function R(t, e, n) {
      var i = function(i, r, o, s, a) {
       return i || (i = t.$new(!1, a), i.$$transcluded = !0), e(i, r, {
        parentBoundTranscludeFn: n,
        transcludeControllers: o,
        futureParentElement: s
       });
      };
      return i;
     }
     function H(t, e, n, i, r) {
      var o, s, a = t.nodeType, c = n.$attr;
      switch (a) {
      case mi:
       U(e, Qt(M(t)), "E", i, r);
       for (var h, p, f, d, v, g, m = t.attributes, y = 0, _ = m && m.length; _ > y; y++) {
        var x = !1, $ = !1;
        h = m[y], p = h.name, v = hi(h.value), d = Qt(p), (g = ht.test(d)) && (p = p.replace(Xi, "").substr(8).replace(/_(.)/g, function(t, e) {
         return e.toUpperCase();
        }));
        var k = d.replace(/(Start|End)$/, "");
        W(k) && d === k + "Start" && (x = p, $ = p.substr(0, p.length - 5) + "end", p = p.substr(0, p.length - 6)), 
        f = Qt(p.toLowerCase()), c[f] = p, (g || !n.hasOwnProperty(f)) && (n[f] = v, Rt(t, f) && (n[f] = !0)), 
        tt(t, e, v, f, g), U(e, f, "A", i, r, x, $);
       }
       if (s = t.className, b(s) && (s = s.animVal), w(s) && "" !== s) for (;o = l.exec(s); ) f = Qt(o[2]), 
       U(e, f, "C", i, r) && (n[f] = hi(o[3])), s = s.substr(o.index + o[0].length);
       break;

      case yi:
       K(e, t.nodeValue);
       break;

      case bi:
       try {
        o = u.exec(t.nodeValue), o && (f = Qt(o[1]), U(e, f, "M", i, r) && (n[f] = hi(o[2])));
       } catch (S) {}
      }
      return e.sort(Y), e;
     }
     function B(t, e, n) {
      var i = [], r = 0;
      if (e && t.hasAttribute && t.hasAttribute(e)) {
       do {
        if (!t) throw Gi("uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", e, n);
        t.nodeType == mi && (t.hasAttribute(e) && r++, t.hasAttribute(n) && r--), i.push(t), 
        t = t.nextSibling;
       } while (r > 0);
      } else i.push(t);
      return Zn(i);
     }
     function q(t, e, n) {
      return function(i, r, o, s, a) {
       return r = B(r[0], e, n), t(i, r, o, s, a);
      };
     }
     function F(t, s, a, c, u, l, h, p, f) {
      function d(t, e, n, i) {
       t && (n && (t = q(t, n, i)), t.require = S.require, t.directiveName = C, (M === S || S.$$isolateScope) && (t = it(t, {
        isolateScope: !0
       })), h.push(t)), e && (n && (e = q(e, n, i)), e.require = S.require, e.directiveName = C, 
       (M === S || S.$$isolateScope) && (e = it(e, {
        isolateScope: !0
       })), p.push(e));
      }
      function v(t, e, n, i) {
       var r, s, a = "data", c = !1, u = n;
       if (w(e)) {
        if (s = e.match(m), e = e.substring(s[0].length), s[3] && (s[1] ? s[3] = null : s[1] = s[3]), 
        "^" === s[1] ? a = "inheritedData" : "^^" === s[1] && (a = "inheritedData", u = n.parent()), 
        "?" === s[2] && (c = !0), r = null, i && "data" === a && (r = i[e]) && (r = r.instance), 
        r = r || u[a]("$" + e + "Controller"), !r && !c) throw Gi("ctreq", "Controller '{0}', required by directive '{1}', can't be found!", e, t);
        return r || null;
       }
       return li(e) && (r = [], o(e, function(e) {
        r.push(v(t, e, n, i));
       })), r;
      }
      function _(t, e, r, c, u) {
       function l(t, e, i) {
        var r;
        return E(t) || (i = e, e = t, t = n), W && (r = _), i || (i = W ? $.parent() : $), 
        u(t, e, r, i, A);
       }
       var f, d, m, b, w, _, x, $, S;
       if (s === r ? (S = a, $ = a.$$element) : ($ = Zn(r), S = new st($, a)), M && (w = e.$new(!0)), 
       u && (x = l, x.$$boundTransclude = u), O && (k = {}, _ = {}, o(O, function(t) {
        var n, i = {
         $scope: t === M || t.$$isolateScope ? w : e,
         $element: $,
         $attrs: S,
         $transclude: x
        };
        b = t.controller, "@" == b && (b = S[t.name]), n = y(b, i, !0, t.controllerAs), 
        _[t.name] = n, W || $.data("$" + t.name + "Controller", n.instance), k[t.name] = n;
       })), M) {
        P.$$addScopeInfo($, w, !0, !(N && (N === M || N === M.$$originalDirective))), P.$$addScopeClass($, !0);
        var C = k && k[M.name], T = w;
        C && C.identifier && M.bindToController === !0 && (T = C.instance), o(w.$$isolateBindings = M.$$isolateBindings, function(t, n) {
         var r, o, s, a, c = t.attrName, u = t.optional, l = t.mode;
         switch (l) {
         case "@":
          S.$observe(c, function(t) {
           T[n] = t;
          }), S.$$observers[c].$$scope = e, S[c] && (T[n] = i(S[c])(e));
          break;

         case "=":
          if (u && !S[c]) return;
          o = g(S[c]), a = o.literal ? D : function(t, e) {
           return t === e || t !== t && e !== e;
          }, s = o.assign || function() {
           throw r = T[n] = o(e), Gi("nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", S[c], M.name);
          }, r = T[n] = o(e);
          var h = function(t) {
           return a(t, T[n]) || (a(t, r) ? s(e, t = T[n]) : T[n] = t), r = t;
          };
          h.$stateful = !0;
          var p;
          p = t.collection ? e.$watchCollection(S[c], h) : e.$watch(g(S[c], h), null, o.literal), 
          w.$on("$destroy", p);
          break;

         case "&":
          o = g(S[c]), T[n] = function(t) {
           return o(e, t);
          };
         }
        });
       }
       for (k && (o(k, function(t) {
        t();
       }), k = null), f = 0, d = h.length; d > f; f++) m = h[f], ot(m, m.isolateScope ? w : e, $, S, m.require && v(m.directiveName, m.require, $, _), x);
       var A = e;
       for (M && (M.template || null === M.templateUrl) && (A = w), t && t(A, r.childNodes, n, u), 
       f = p.length - 1; f >= 0; f--) m = p[f], ot(m, m.isolateScope ? w : e, $, S, m.require && v(m.directiveName, m.require, $, _), x);
      }
      f = f || {};
      for (var x, k, S, C, T, A, j, L = -Number.MAX_VALUE, O = f.controllerDirectives, M = f.newIsolateScopeDirective, N = f.templateDirective, R = f.nonTlbTranscludeDirective, F = !1, U = !1, W = f.hasElementTranscludeDirective, Y = a.$$element = Zn(s), K = l, Z = c, tt = 0, nt = t.length; nt > tt; tt++) {
       S = t[tt];
       var rt = S.$$start, at = S.$$end;
       if (rt && (Y = B(s, rt, at)), T = n, L > S.priority) break;
       if ((j = S.scope) && (S.templateUrl || (b(j) ? (J("new/isolated scope", M || x, S, Y), 
       M = S) : J("new/isolated scope", M, S, Y)), x = x || S), C = S.name, !S.templateUrl && S.controller && (j = S.controller, 
       O = O || {}, J("'" + C + "' controller", O[C], S, Y), O[C] = S), (j = S.transclude) && (F = !0, 
       S.$$tlb || (J("transclusion", R, S, Y), R = S), "element" == j ? (W = !0, L = S.priority, 
       T = Y, Y = a.$$element = Zn(e.createComment(" " + C + ": " + a[C] + " ")), s = Y[0], 
       et(u, I(T), s), Z = P(T, c, L, K && K.name, {
        nonTlbTranscludeDirective: R
       })) : (T = Zn(_t(s)).contents(), Y.empty(), Z = P(T, c))), S.template) if (U = !0, 
       J("template", N, S, Y), N = S, j = $(S.template) ? S.template(Y, a) : S.template, 
       j = lt(j), S.replace) {
        if (K = S, T = gt(j) ? [] : te(Q(S.templateNamespace, hi(j))), s = T[0], 1 != T.length || s.nodeType !== mi) throw Gi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", C, "");
        et(u, Y, s);
        var ct = {
         $attr: {}
        }, ut = H(s, [], ct), ht = t.splice(tt + 1, t.length - (tt + 1));
        M && z(ut), t = t.concat(ut).concat(ht), G(a, ct), nt = t.length;
       } else Y.html(j);
       if (S.templateUrl) U = !0, J("template", N, S, Y), N = S, S.replace && (K = S), 
       _ = X(t.splice(tt, t.length - tt), Y, a, u, F && Z, h, p, {
        controllerDirectives: O,
        newIsolateScopeDirective: M,
        templateDirective: N,
        nonTlbTranscludeDirective: R
       }), nt = t.length; else if (S.compile) try {
        A = S.compile(Y, a, Z), $(A) ? d(null, A, rt, at) : A && d(A.pre, A.post, rt, at);
       } catch (pt) {
        r(pt, V(Y));
       }
       S.terminal && (_.terminal = !0, L = Math.max(L, S.priority));
      }
      return _.scope = x && x.scope === !0, _.transcludeOnThisElement = F, _.elementTranscludeOnThisElement = W, 
      _.templateOnThisElement = U, _.transclude = Z, f.hasElementTranscludeDirective = W, 
      _;
     }
     function z(t) {
      for (var e = 0, n = t.length; n > e; e++) t[e] = f(t[e], {
       $$isolateScope: !0
      });
     }
     function U(e, i, o, c, u, l, h) {
      if (i === u) return null;
      var p = null;
      if (s.hasOwnProperty(i)) for (var d, v = t.get(i + a), g = 0, m = v.length; m > g; g++) try {
       d = v[g], (c === n || c > d.priority) && -1 != d.restrict.indexOf(o) && (l && (d = f(d, {
        $$start: l,
        $$end: h
       })), e.push(d), p = d);
      } catch (y) {
       r(y);
      }
      return p;
     }
     function W(e) {
      if (s.hasOwnProperty(e)) for (var n, i = t.get(e + a), r = 0, o = i.length; o > r; r++) if (n = i[r], 
      n.multiElement) return !0;
      return !1;
     }
     function G(t, e) {
      var n = e.$attr, i = t.$attr, r = t.$$element;
      o(t, function(i, r) {
       "$" != r.charAt(0) && (e[r] && e[r] !== i && (i += ("style" === r ? ";" : " ") + e[r]), 
       t.$set(r, i, !0, n[r]));
      }), o(e, function(e, o) {
       "class" == o ? (j(r, e), t["class"] = (t["class"] ? t["class"] + " " : "") + e) : "style" == o ? (r.attr("style", r.attr("style") + ";" + e), 
       t.style = (t.style ? t.style + ";" : "") + e) : "$" == o.charAt(0) || t.hasOwnProperty(o) || (t[o] = e, 
       i[o] = n[o]);
      });
     }
     function X(t, e, n, i, r, s, a, u) {
      var l, h, p = [], d = e[0], v = t.shift(), g = f(v, {
       templateUrl: null,
       transclude: null,
       replace: null,
       $$originalDirective: v
      }), m = $(v.templateUrl) ? v.templateUrl(e, n) : v.templateUrl, y = v.templateNamespace;
      return e.empty(), c(C.getTrustedResourceUrl(m)).then(function(c) {
       var f, w, _, x;
       if (c = lt(c), v.replace) {
        if (_ = gt(c) ? [] : te(Q(y, hi(c))), f = _[0], 1 != _.length || f.nodeType !== mi) throw Gi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", v.name, m);
        w = {
         $attr: {}
        }, et(i, e, f);
        var $ = H(f, [], w);
        b(v.scope) && z($), t = $.concat(t), G(n, w);
       } else f = d, e.html(c);
       for (t.unshift(g), l = F(t, f, n, r, e, v, s, a, u), o(i, function(t, n) {
        t == f && (i[n] = e[0]);
       }), h = O(e[0].childNodes, r); p.length; ) {
        var k = p.shift(), S = p.shift(), E = p.shift(), C = p.shift(), T = e[0];
        if (!k.$$destroyed) {
         if (S !== d) {
          var A = S.className;
          u.hasElementTranscludeDirective && v.replace || (T = _t(f)), et(E, Zn(S), T), j(Zn(T), A);
         }
         x = l.transcludeOnThisElement ? R(k, l.transclude, C) : C, l(h, k, T, i, x);
        }
       }
       p = null;
      }), function(t, e, n, i, r) {
       var o = r;
       e.$$destroyed || (p ? p.push(e, n, i, o) : (l.transcludeOnThisElement && (o = R(e, l.transclude, r)), 
       l(h, e, n, i, o)));
      };
     }
     function Y(t, e) {
      var n = e.priority - t.priority;
      return 0 !== n ? n : t.name !== e.name ? t.name < e.name ? -1 : 1 : t.index - e.index;
     }
     function J(t, e, n, i) {
      if (e) throw Gi("multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", e.name, n.name, t, V(i));
     }
     function K(t, e) {
      var n = i(e, !0);
      n && t.push({
       priority: 0,
       compile: function(t) {
        var e = t.parent(), i = !!e.length;
        return i && P.$$addBindingClass(e), function(t, e) {
         var r = e.parent();
         i || P.$$addBindingClass(r), P.$$addBindingInfo(r, n.expressions), t.$watch(n, function(t) {
          e[0].nodeValue = t;
         });
        };
       }
      });
     }
     function Q(t, n) {
      switch (t = Gn(t || "html")) {
      case "svg":
      case "math":
       var i = e.createElement("div");
       return i.innerHTML = "<" + t + ">" + n + "</" + t + ">", i.childNodes[0].childNodes;

      default:
       return n;
      }
     }
     function Z(t, e) {
      if ("srcdoc" == e) return C.HTML;
      var n = M(t);
      return "xlinkHref" == e || "form" == n && "action" == e || "img" != n && ("src" == e || "ngSrc" == e) ? C.RESOURCE_URL : void 0;
     }
     function tt(t, e, n, r, o) {
      var s = Z(t, r);
      o = p[r] || o;
      var a = i(n, !0, s, o);
      if (a) {
       if ("multiple" === r && "select" === M(t)) throw Gi("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", V(t));
       e.push({
        priority: 100,
        compile: function() {
         return {
          pre: function(t, e, c) {
           var u = c.$$observers || (c.$$observers = {});
           if (_.test(r)) throw Gi("nodomevents", "Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");
           var l = c[r];
           l !== n && (a = l && i(l, !0, s, o), n = l), a && (c[r] = a(t), (u[r] || (u[r] = [])).$$inter = !0, 
           (c.$$observers && c.$$observers[r].$$scope || t).$watch(a, function(t, e) {
            "class" === r && t != e ? c.$updateClass(t, e) : c.$set(r, t);
           }));
          }
         };
        }
       });
      }
     }
     function et(t, n, i) {
      var r, o, s = n[0], a = n.length, c = s.parentNode;
      if (t) for (r = 0, o = t.length; o > r; r++) if (t[r] == s) {
       t[r++] = i;
       for (var u = r, l = u + a - 1, h = t.length; h > u; u++, l++) h > l ? t[u] = t[l] : delete t[u];
       t.length -= a - 1, t.context === s && (t.context = i);
       break;
      }
      c && c.replaceChild(i, s);
      var p = e.createDocumentFragment();
      p.appendChild(s), Zn(i).data(Zn(s).data()), ti ? (ui = !0, ti.cleanData([ s ])) : delete Zn.cache[s[Zn.expando]];
      for (var f = 1, d = n.length; d > f; f++) {
       var v = n[f];
       Zn(v).remove(), p.appendChild(v), delete n[f];
      }
      n[0] = i, n.length = 1;
     }
     function it(t, e) {
      return h(function() {
       return t.apply(null, arguments);
      }, t, e);
     }
     function ot(t, e, n, i, o, s) {
      try {
       t(e, n, i, o, s);
      } catch (a) {
       r(a, V(n));
      }
     }
     var st = function(t, e) {
      if (e) {
       var n, i, r, o = Object.keys(e);
       for (n = 0, i = o.length; i > n; n++) r = o[n], this[r] = e[r];
      } else this.$attr = {};
      this.$$element = t;
     };
     st.prototype = {
      $normalize: Qt,
      $addClass: function(t) {
       t && t.length > 0 && T.addClass(this.$$element, t);
      },
      $removeClass: function(t) {
       t && t.length > 0 && T.removeClass(this.$$element, t);
      },
      $updateClass: function(t, e) {
       var n = Zt(t, e);
       n && n.length && T.addClass(this.$$element, n);
       var i = Zt(e, t);
       i && i.length && T.removeClass(this.$$element, i);
      },
      $set: function(t, e, i, s) {
       var a, c = this.$$element[0], u = Rt(c, t), l = Ht(c, t), h = t;
       if (u ? (this.$$element.prop(t, e), s = u) : l && (this[l] = e, h = l), this[t] = e, 
       s ? this.$attr[t] = s : (s = this.$attr[t], s || (this.$attr[t] = s = nt(t, "-"))), 
       a = M(this.$$element), "a" === a && "href" === t || "img" === a && "src" === t) this[t] = e = A(e, "src" === t); else if ("img" === a && "srcset" === t) {
        for (var p = "", f = hi(e), d = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, v = /\s/.test(f) ? d : /(,)/, g = f.split(v), m = Math.floor(g.length / 2), y = 0; m > y; y++) {
         var b = 2 * y;
         p += A(hi(g[b]), !0), p += " " + hi(g[b + 1]);
        }
        var w = hi(g[2 * y]).split(/\s/);
        p += A(hi(w[0]), !0), 2 === w.length && (p += " " + hi(w[1])), this[t] = e = p;
       }
       i !== !1 && (null === e || e === n ? this.$$element.removeAttr(s) : this.$$element.attr(s, e));
       var _ = this.$$observers;
       _ && o(_[h], function(t) {
        try {
         t(e);
        } catch (n) {
         r(n);
        }
       });
      },
      $observe: function(t, e) {
       var n = this, i = n.$$observers || (n.$$observers = ut()), r = i[t] || (i[t] = []);
       return r.push(e), k.$evalAsync(function() {
        !r.$$inter && n.hasOwnProperty(t) && e(n[t]);
       }), function() {
        N(r, e);
       };
      }
     };
     var at = i.startSymbol(), ct = i.endSymbol(), lt = "{{" == at || "}}" == ct ? v : function(t) {
      return t.replace(/\{\{/g, at).replace(/}}/g, ct);
     }, ht = /^ngAttr[A-Z]/;
     return P.$$addBindingInfo = x ? function(t, e) {
      var n = t.data("$binding") || [];
      li(e) ? n = n.concat(e) : n.push(e), t.data("$binding", n);
     } : d, P.$$addBindingClass = x ? function(t) {
      j(t, "ng-binding");
     } : d, P.$$addScopeInfo = x ? function(t, e, n, i) {
      var r = n ? i ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope";
      t.data(r, e);
     } : d, P.$$addScopeClass = x ? function(t, e) {
      j(t, e ? "ng-isolate-scope" : "ng-scope");
     } : d, P;
    } ];
   }
   function Qt(t) {
    return vt(t.replace(Xi, ""));
   }
   function Zt(t, e) {
    var n = "", i = t.split(/\s+/), r = e.split(/\s+/);
    t: for (var o = 0; o < i.length; o++) {
     for (var s = i[o], a = 0; a < r.length; a++) if (s == r[a]) continue t;
     n += (n.length > 0 ? " " : "") + s;
    }
    return n;
   }
   function te(t) {
    t = Zn(t);
    var e = t.length;
    if (1 >= e) return t;
    for (;e--; ) {
     var n = t[e];
     n.nodeType === bi && ii.call(t, e, 1);
    }
    return t;
   }
   function ee() {
    var t = {}, e = !1, r = /^(\S+)(\s+as\s+(\w+))?$/;
    this.register = function(e, n) {
     st(e, "controller"), b(e) ? h(t, e) : t[e] = n;
    }, this.allowGlobals = function() {
     e = !0;
    }, this.$get = [ "$injector", "$window", function(o, s) {
     function a(t, e, n, r) {
      if (!t || !b(t.$scope)) throw i("$controller")("noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", r, e);
      t.$scope[e] = n;
     }
     return function(i, c, u, l) {
      var p, f, d, v;
      if (u = u === !0, l && w(l) && (v = l), w(i)) {
       if (f = i.match(r), !f) throw Yi("ctrlfmt", "Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.", i);
       d = f[1], v = v || f[3], i = t.hasOwnProperty(d) ? t[d] : at(c.$scope, d, !0) || (e ? at(s, d, !0) : n), 
       ot(i, d, !0);
      }
      if (u) {
       var g = (li(i) ? i[i.length - 1] : i).prototype;
       return p = Object.create(g || null), v && a(c, v, p, d || i.name), h(function() {
        return o.invoke(i, p, c, d), p;
       }, {
        instance: p,
        identifier: v
       });
      }
      return p = o.instantiate(i, c, d), v && a(c, v, p, d || i.name), p;
     };
    } ];
   }
   function ne() {
    this.$get = [ "$window", function(t) {
     return Zn(t.document);
    } ];
   }
   function ie() {
    this.$get = [ "$log", function(t) {
     return function() {
      t.error.apply(t, arguments);
     };
    } ];
   }
   function re(t, e) {
    if (w(t)) {
     var n = t.replace(tr, "").trim();
     if (n) {
      var i = e("Content-Type");
      (i && 0 === i.indexOf(Ji) || oe(n)) && (t = U(n));
     }
    }
    return t;
   }
   function oe(t) {
    var e = t.match(Qi);
    return e && Zi[e[0]].test(t);
   }
   function se(t) {
    var e, n, i, r = ut();
    return t ? (o(t.split("\n"), function(t) {
     i = t.indexOf(":"), e = Gn(hi(t.substr(0, i))), n = hi(t.substr(i + 1)), e && (r[e] = r[e] ? r[e] + ", " + n : n);
    }), r) : r;
   }
   function ae(t) {
    var e = b(t) ? t : n;
    return function(n) {
     if (e || (e = se(t)), n) {
      var i = e[Gn(n)];
      return void 0 === i && (i = null), i;
     }
     return e;
    };
   }
   function ce(t, e, n, i) {
    return $(i) ? i(t, e, n) : (o(i, function(i) {
     t = i(t, e, n);
    }), t);
   }
   function ue(t) {
    return t >= 200 && 300 > t;
   }
   function le() {
    var t = this.defaults = {
     transformResponse: [ re ],
     transformRequest: [ function(t) {
      return !b(t) || C(t) || A(t) || T(t) ? t : z(t);
     } ],
     headers: {
      common: {
       Accept: "application/json, text/plain, */*"
      },
      post: H(Ki),
      put: H(Ki),
      patch: H(Ki)
     },
     xsrfCookieName: "XSRF-TOKEN",
     xsrfHeaderName: "X-XSRF-TOKEN"
    }, e = !1;
    this.useApplyAsync = function(t) {
     return y(t) ? (e = !!t, this) : e;
    };
    var r = this.interceptors = [];
    this.$get = [ "$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function(s, c, u, l, p, f) {
     function d(e) {
      function r(t) {
       var e = h({}, t);
       return e.data = t.data ? ce(t.data, t.headers, t.status, c.transformResponse) : t.data, 
       ue(t.status) ? e : p.reject(e);
      }
      function s(t) {
       var e, n = {};
       return o(t, function(t, i) {
        $(t) ? (e = t(), null != e && (n[i] = e)) : n[i] = t;
       }), n;
      }
      function a(e) {
       var n, i, r, o = t.headers, a = h({}, e.headers);
       o = h({}, o.common, o[Gn(e.method)]);
       t: for (n in o) {
        i = Gn(n);
        for (r in a) if (Gn(r) === i) continue t;
        a[n] = o[n];
       }
       return s(a);
      }
      if (!ai.isObject(e)) throw i("$http")("badreq", "Http request configuration must be an object.  Received: {0}", e);
      var c = h({
       method: "get",
       transformRequest: t.transformRequest,
       transformResponse: t.transformResponse
      }, e);
      c.headers = a(e), c.method = Yn(c.method);
      var u = function(e) {
       var i = e.headers, s = ce(e.data, ae(i), n, e.transformRequest);
       return m(s) && o(i, function(t, e) {
        "content-type" === Gn(e) && delete i[e];
       }), m(e.withCredentials) && !m(t.withCredentials) && (e.withCredentials = t.withCredentials), 
       _(e, s).then(r, r);
      }, l = [ u, n ], f = p.when(c);
      for (o(E, function(t) {
       (t.request || t.requestError) && l.unshift(t.request, t.requestError), (t.response || t.responseError) && l.push(t.response, t.responseError);
      }); l.length; ) {
       var d = l.shift(), v = l.shift();
       f = f.then(d, v);
      }
      return f.success = function(t) {
       return f.then(function(e) {
        t(e.data, e.status, e.headers, c);
       }), f;
      }, f.error = function(t) {
       return f.then(null, function(e) {
        t(e.data, e.status, e.headers, c);
       }), f;
      }, f;
     }
     function v() {
      o(arguments, function(t) {
       d[t] = function(e, n) {
        return d(h(n || {}, {
         method: t,
         url: e
        }));
       };
      });
     }
     function g() {
      o(arguments, function(t) {
       d[t] = function(e, n, i) {
        return d(h(i || {}, {
         method: t,
         url: e,
         data: n
        }));
       };
      });
     }
     function _(i, r) {
      function o(t, n, i, r) {
       function o() {
        a(n, t, i, r);
       }
       f && (ue(t) ? f.put(x, [ t, n, se(i), r ]) : f.remove(x)), e ? l.$applyAsync(o) : (o(), 
       l.$$phase || l.$apply());
      }
      function a(t, e, n, r) {
       e = Math.max(e, 0), (ue(e) ? g.resolve : g.reject)({
        data: t,
        status: e,
        headers: ae(n),
        config: i,
        statusText: r
       });
      }
      function u(t) {
       a(t.data, t.status, H(t.headers()), t.statusText);
      }
      function h() {
       var t = d.pendingRequests.indexOf(i);
       -1 !== t && d.pendingRequests.splice(t, 1);
      }
      var f, v, g = p.defer(), w = g.promise, _ = i.headers, x = k(i.url, i.params);
      if (d.pendingRequests.push(i), w.then(h, h), !i.cache && !t.cache || i.cache === !1 || "GET" !== i.method && "JSONP" !== i.method || (f = b(i.cache) ? i.cache : b(t.cache) ? t.cache : S), 
      f && (v = f.get(x), y(v) ? P(v) ? v.then(u, u) : li(v) ? a(v[1], v[0], H(v[2]), v[3]) : a(v, 200, {}, "OK") : f.put(x, w)), 
      m(v)) {
       var $ = on(i.url) ? c.cookies()[i.xsrfCookieName || t.xsrfCookieName] : n;
       $ && (_[i.xsrfHeaderName || t.xsrfHeaderName] = $), s(i.method, x, r, o, _, i.timeout, i.withCredentials, i.responseType);
      }
      return w;
     }
     function k(t, e) {
      if (!e) return t;
      var n = [];
      return a(e, function(t, e) {
       null === t || m(t) || (li(t) || (t = [ t ]), o(t, function(t) {
        b(t) && (t = x(t) ? t.toISOString() : z(t)), n.push(J(e) + "=" + J(t));
       }));
      }), n.length > 0 && (t += (-1 == t.indexOf("?") ? "?" : "&") + n.join("&")), t;
     }
     var S = u("$http"), E = [];
     return o(r, function(t) {
      E.unshift(w(t) ? f.get(t) : f.invoke(t));
     }), d.pendingRequests = [], v("get", "delete", "head", "jsonp"), g("post", "put", "patch"), 
     d.defaults = t, d;
    } ];
   }
   function he() {
    return new t.XMLHttpRequest();
   }
   function pe() {
    this.$get = [ "$browser", "$window", "$document", function(t, e, n) {
     return fe(t, he, t.defer, e.angular.callbacks, n[0]);
    } ];
   }
   function fe(t, e, i, r, s) {
    function a(t, e, n) {
     var i = s.createElement("script"), o = null;
     return i.type = "text/javascript", i.src = t, i.async = !0, o = function(t) {
      Ei(i, "load", o), Ei(i, "error", o), s.body.removeChild(i), i = null;
      var a = -1, c = "unknown";
      t && ("load" !== t.type || r[e].called || (t = {
       type: "error"
      }), c = t.type, a = "error" === t.type ? 404 : 200), n && n(a, c);
     }, Si(i, "load", o), Si(i, "error", o), s.body.appendChild(i), o;
    }
    return function(s, c, u, l, h, p, f, v) {
     function g() {
      w && w(), _ && _.abort();
     }
     function m(e, r, o, s, a) {
      k !== n && i.cancel(k), w = _ = null, e(r, o, s, a), t.$$completeOutstandingRequest(d);
     }
     if (t.$$incOutstandingRequestCount(), c = c || t.url(), "jsonp" == Gn(s)) {
      var b = "_" + (r.counter++).toString(36);
      r[b] = function(t) {
       r[b].data = t, r[b].called = !0;
      };
      var w = a(c.replace("JSON_CALLBACK", "angular.callbacks." + b), b, function(t, e) {
       m(l, t, r[b].data, "", e), r[b] = d;
      });
     } else {
      var _ = e();
      _.open(s, c, !0), o(h, function(t, e) {
       y(t) && _.setRequestHeader(e, t);
      }), _.onload = function() {
       var t = _.statusText || "", e = "response" in _ ? _.response : _.responseText, n = 1223 === _.status ? 204 : _.status;
       0 === n && (n = e ? 200 : "file" == rn(c).protocol ? 404 : 0), m(l, n, e, _.getAllResponseHeaders(), t);
      };
      var x = function() {
       m(l, -1, null, null, "");
      };
      if (_.onerror = x, _.onabort = x, f && (_.withCredentials = !0), v) try {
       _.responseType = v;
      } catch ($) {
       if ("json" !== v) throw $;
      }
      _.send(u || null);
     }
     if (p > 0) var k = i(g, p); else P(p) && p.then(g);
    };
   }
   function de() {
    var t = "{{", e = "}}";
    this.startSymbol = function(e) {
     return e ? (t = e, this) : t;
    }, this.endSymbol = function(t) {
     return t ? (e = t, this) : e;
    }, this.$get = [ "$parse", "$exceptionHandler", "$sce", function(n, i, r) {
     function o(t) {
      return "\\\\\\" + t;
     }
     function s(o, s, p, f) {
      function d(n) {
       return n.replace(u, t).replace(l, e);
      }
      function v(t) {
       try {
        return t = A(t), f && !y(t) ? t : j(t);
       } catch (e) {
        var n = er("interr", "Can't interpolate: {0}\n{1}", o, e.toString());
        i(n);
       }
      }
      f = !!f;
      for (var g, b, w, _ = 0, x = [], k = [], S = o.length, E = [], C = []; S > _; ) {
       if (-1 == (g = o.indexOf(t, _)) || -1 == (b = o.indexOf(e, g + a))) {
        _ !== S && E.push(d(o.substring(_)));
        break;
       }
       _ !== g && E.push(d(o.substring(_, g))), w = o.substring(g + a, b), x.push(w), k.push(n(w, v)), 
       _ = b + c, C.push(E.length), E.push("");
      }
      if (p && E.length > 1) throw er("noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce", o);
      if (!s || x.length) {
       var T = function(t) {
        for (var e = 0, n = x.length; n > e; e++) {
         if (f && m(t[e])) return;
         E[C[e]] = t[e];
        }
        return E.join("");
       }, A = function(t) {
        return p ? r.getTrusted(p, t) : r.valueOf(t);
       }, j = function(t) {
        if (null == t) return "";
        switch (typeof t) {
        case "string":
         break;

        case "number":
         t = "" + t;
         break;

        default:
         t = z(t);
        }
        return t;
       };
       return h(function(t) {
        var e = 0, n = x.length, r = new Array(n);
        try {
         for (;n > e; e++) r[e] = k[e](t);
         return T(r);
        } catch (s) {
         var a = er("interr", "Can't interpolate: {0}\n{1}", o, s.toString());
         i(a);
        }
       }, {
        exp: o,
        expressions: x,
        $$watchDelegate: function(t, e, n) {
         var i;
         return t.$watchGroup(k, function(n, r) {
          var o = T(n);
          $(e) && e.call(this, o, n !== r ? i : o, t), i = o;
         }, n);
        }
       });
      }
     }
     var a = t.length, c = e.length, u = new RegExp(t.replace(/./g, o), "g"), l = new RegExp(e.replace(/./g, o), "g");
     return s.startSymbol = function() {
      return t;
     }, s.endSymbol = function() {
      return e;
     }, s;
    } ];
   }
   function ve() {
    this.$get = [ "$rootScope", "$window", "$q", "$$q", function(t, e, n, i) {
     function r(r, s, a, c) {
      var u = e.setInterval, l = e.clearInterval, h = 0, p = y(c) && !c, f = (p ? i : n).defer(), d = f.promise;
      return a = y(a) ? a : 0, d.then(null, null, r), d.$$intervalId = u(function() {
       f.notify(h++), a > 0 && h >= a && (f.resolve(h), l(d.$$intervalId), delete o[d.$$intervalId]), 
       p || t.$apply();
      }, s), o[d.$$intervalId] = f, d;
     }
     var o = {};
     return r.cancel = function(t) {
      return t && t.$$intervalId in o ? (o[t.$$intervalId].reject("canceled"), e.clearInterval(t.$$intervalId), 
      delete o[t.$$intervalId], !0) : !1;
     }, r;
    } ];
   }
   function ge() {
    this.$get = function() {
     return {
      id: "en-us",
      NUMBER_FORMATS: {
       DECIMAL_SEP: ".",
       GROUP_SEP: ",",
       PATTERNS: [ {
        minInt: 1,
        minFrac: 0,
        maxFrac: 3,
        posPre: "",
        posSuf: "",
        negPre: "-",
        negSuf: "",
        gSize: 3,
        lgSize: 3
       }, {
        minInt: 1,
        minFrac: 2,
        maxFrac: 2,
        posPre: "¤",
        posSuf: "",
        negPre: "(¤",
        negSuf: ")",
        gSize: 3,
        lgSize: 3
       } ],
       CURRENCY_SYM: "$"
      },
      DATETIME_FORMATS: {
       MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split(","),
       SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),
       DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
       SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),
       AMPMS: [ "AM", "PM" ],
       medium: "MMM d, y h:mm:ss a",
       "short": "M/d/yy h:mm a",
       fullDate: "EEEE, MMMM d, y",
       longDate: "MMMM d, y",
       mediumDate: "MMM d, y",
       shortDate: "M/d/yy",
       mediumTime: "h:mm:ss a",
       shortTime: "h:mm a"
      },
      pluralCat: function(t) {
       return 1 === t ? "one" : "other";
      }
     };
    };
   }
   function me(t) {
    for (var e = t.split("/"), n = e.length; n--; ) e[n] = Y(e[n]);
    return e.join("/");
   }
   function ye(t, e) {
    var n = rn(t);
    e.$$protocol = n.protocol, e.$$host = n.hostname, e.$$port = p(n.port) || ir[n.protocol] || null;
   }
   function be(t, e) {
    var n = "/" !== t.charAt(0);
    n && (t = "/" + t);
    var i = rn(t);
    e.$$path = decodeURIComponent(n && "/" === i.pathname.charAt(0) ? i.pathname.substring(1) : i.pathname), 
    e.$$search = G(i.search), e.$$hash = decodeURIComponent(i.hash), e.$$path && "/" != e.$$path.charAt(0) && (e.$$path = "/" + e.$$path);
   }
   function we(t, e) {
    return 0 === e.indexOf(t) ? e.substr(t.length) : void 0;
   }
   function _e(t) {
    var e = t.indexOf("#");
    return -1 == e ? t : t.substr(0, e);
   }
   function xe(t) {
    return t.replace(/(#.+)|#$/, "$1");
   }
   function $e(t) {
    return t.substr(0, _e(t).lastIndexOf("/") + 1);
   }
   function ke(t) {
    return t.substring(0, t.indexOf("/", t.indexOf("//") + 2));
   }
   function Se(t, e) {
    this.$$html5 = !0, e = e || "";
    var i = $e(t);
    ye(t, this), this.$$parse = function(t) {
     var e = we(i, t);
     if (!w(e)) throw rr("ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', t, i);
     be(e, this), this.$$path || (this.$$path = "/"), this.$$compose();
    }, this.$$compose = function() {
     var t = X(this.$$search), e = this.$$hash ? "#" + Y(this.$$hash) : "";
     this.$$url = me(this.$$path) + (t ? "?" + t : "") + e, this.$$absUrl = i + this.$$url.substr(1);
    }, this.$$parseLinkUrl = function(r, o) {
     if (o && "#" === o[0]) return this.hash(o.slice(1)), !0;
     var s, a, c;
     return (s = we(t, r)) !== n ? (a = s, c = (s = we(e, s)) !== n ? i + (we("/", s) || s) : t + a) : (s = we(i, r)) !== n ? c = i + s : i == r + "/" && (c = i), 
     c && this.$$parse(c), !!c;
    };
   }
   function Ee(t, e) {
    var n = $e(t);
    ye(t, this), this.$$parse = function(i) {
     function r(t, e, n) {
      var i, r = /^\/[A-Z]:(\/.*)/;
      return 0 === e.indexOf(n) && (e = e.replace(n, "")), r.exec(e) ? t : (i = r.exec(t), 
      i ? i[1] : t);
     }
     var o, s = we(t, i) || we(n, i);
     "#" === s.charAt(0) ? (o = we(e, s), m(o) && (o = s)) : o = this.$$html5 ? s : "", 
     be(o, this), this.$$path = r(this.$$path, o, t), this.$$compose();
    }, this.$$compose = function() {
     var n = X(this.$$search), i = this.$$hash ? "#" + Y(this.$$hash) : "";
     this.$$url = me(this.$$path) + (n ? "?" + n : "") + i, this.$$absUrl = t + (this.$$url ? e + this.$$url : "");
    }, this.$$parseLinkUrl = function(e) {
     return _e(t) == _e(e) ? (this.$$parse(e), !0) : !1;
    };
   }
   function Ce(t, e) {
    this.$$html5 = !0, Ee.apply(this, arguments);
    var n = $e(t);
    this.$$parseLinkUrl = function(i, r) {
     if (r && "#" === r[0]) return this.hash(r.slice(1)), !0;
     var o, s;
     return t == _e(i) ? o = i : (s = we(n, i)) ? o = t + e + s : n === i + "/" && (o = n), 
     o && this.$$parse(o), !!o;
    }, this.$$compose = function() {
     var n = X(this.$$search), i = this.$$hash ? "#" + Y(this.$$hash) : "";
     this.$$url = me(this.$$path) + (n ? "?" + n : "") + i, this.$$absUrl = t + e + this.$$url;
    };
   }
   function Te(t) {
    return function() {
     return this[t];
    };
   }
   function Ae(t, e) {
    return function(n) {
     return m(n) ? this[t] : (this[t] = e(n), this.$$compose(), this);
    };
   }
   function je() {
    var t = "", e = {
     enabled: !1,
     requireBase: !0,
     rewriteLinks: !0
    };
    this.hashPrefix = function(e) {
     return y(e) ? (t = e, this) : t;
    }, this.html5Mode = function(t) {
     return j(t) ? (e.enabled = t, this) : b(t) ? (j(t.enabled) && (e.enabled = t.enabled), 
     j(t.requireBase) && (e.requireBase = t.requireBase), j(t.rewriteLinks) && (e.rewriteLinks = t.rewriteLinks), 
     this) : e;
    }, this.$get = [ "$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function(n, i, r, o, s) {
     function a(t, e, n) {
      var r = u.url(), o = u.$$state;
      try {
       i.url(t, e, n), u.$$state = i.state();
      } catch (s) {
       throw u.url(r), u.$$state = o, s;
      }
     }
     function c(t, e) {
      n.$broadcast("$locationChangeSuccess", u.absUrl(), t, u.$$state, e);
     }
     var u, l, h, p = i.baseHref(), f = i.url();
     if (e.enabled) {
      if (!p && e.requireBase) throw rr("nobase", "$location in HTML5 mode requires a <base> tag to be present!");
      h = ke(f) + (p || "/"), l = r.history ? Se : Ce;
     } else h = _e(f), l = Ee;
     u = new l(h, "#" + t), u.$$parseLinkUrl(f, f), u.$$state = i.state();
     var d = /^\s*(javascript|mailto):/i;
     o.on("click", function(t) {
      if (e.rewriteLinks && !t.ctrlKey && !t.metaKey && !t.shiftKey && 2 != t.which && 2 != t.button) {
       for (var r = Zn(t.target); "a" !== M(r[0]); ) if (r[0] === o[0] || !(r = r.parent())[0]) return;
       var a = r.prop("href"), c = r.attr("href") || r.attr("xlink:href");
       b(a) && "[object SVGAnimatedString]" === a.toString() && (a = rn(a.animVal).href), 
       d.test(a) || !a || r.attr("target") || t.isDefaultPrevented() || u.$$parseLinkUrl(a, c) && (t.preventDefault(), 
       u.absUrl() != i.url() && (n.$apply(), s.angular["ff-684208-preventDefault"] = !0));
      }
     }), xe(u.absUrl()) != xe(f) && i.url(u.absUrl(), !0);
     var v = !0;
     return i.onUrlChange(function(t, e) {
      n.$evalAsync(function() {
       var i, r = u.absUrl(), o = u.$$state;
       u.$$parse(t), u.$$state = e, i = n.$broadcast("$locationChangeStart", t, r, e, o).defaultPrevented, 
       u.absUrl() === t && (i ? (u.$$parse(r), u.$$state = o, a(r, !1, o)) : (v = !1, c(r, o)));
      }), n.$$phase || n.$digest();
     }), n.$watch(function() {
      var t = xe(i.url()), e = xe(u.absUrl()), o = i.state(), s = u.$$replace, l = t !== e || u.$$html5 && r.history && o !== u.$$state;
      (v || l) && (v = !1, n.$evalAsync(function() {
       var e = u.absUrl(), i = n.$broadcast("$locationChangeStart", e, t, u.$$state, o).defaultPrevented;
       u.absUrl() === e && (i ? (u.$$parse(t), u.$$state = o) : (l && a(e, s, o === u.$$state ? null : u.$$state), 
       c(t, o)));
      })), u.$$replace = !1;
     }), u;
    } ];
   }
   function Pe() {
    var t = !0, e = this;
    this.debugEnabled = function(e) {
     return y(e) ? (t = e, this) : t;
    }, this.$get = [ "$window", function(n) {
     function i(t) {
      return t instanceof Error && (t.stack ? t = t.message && -1 === t.stack.indexOf(t.message) ? "Error: " + t.message + "\n" + t.stack : t.stack : t.sourceURL && (t = t.message + "\n" + t.sourceURL + ":" + t.line)), 
      t;
     }
     function r(t) {
      var e = n.console || {}, r = e[t] || e.log || d, s = !1;
      try {
       s = !!r.apply;
      } catch (a) {}
      return s ? function() {
       var t = [];
       return o(arguments, function(e) {
        t.push(i(e));
       }), r.apply(e, t);
      } : function(t, e) {
       r(t, null == e ? "" : e);
      };
     }
     return {
      log: r("log"),
      info: r("info"),
      warn: r("warn"),
      error: r("error"),
      debug: function() {
       var n = r("debug");
       return function() {
        t && n.apply(e, arguments);
       };
      }()
     };
    } ];
   }
   function Le(t, e) {
    if ("__defineGetter__" === t || "__defineSetter__" === t || "__lookupGetter__" === t || "__lookupSetter__" === t || "__proto__" === t) throw sr("isecfld", "Attempting to access a disallowed field in Angular expressions! Expression: {0}", e);
    return t;
   }
   function Oe(t, e) {
    if (t) {
     if (t.constructor === t) throw sr("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
     if (t.window === t) throw sr("isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", e);
     if (t.children && (t.nodeName || t.prop && t.attr && t.find)) throw sr("isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", e);
     if (t === Object) throw sr("isecobj", "Referencing Object in Angular expressions is disallowed! Expression: {0}", e);
    }
    return t;
   }
   function Me(t, e) {
    if (t) {
     if (t.constructor === t) throw sr("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
     if (t === ar || t === cr || t === ur) throw sr("isecff", "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}", e);
    }
   }
   function Ne(t) {
    return t.constant;
   }
   function Re(t, e, n, i, r) {
    Oe(t, r), Oe(e, r);
    for (var o, s = n.split("."), a = 0; s.length > 1; a++) {
     o = Le(s.shift(), r);
     var c = 0 === a && e && e[o] || t[o];
     c || (c = {}, t[o] = c), t = Oe(c, r);
    }
    return o = Le(s.shift(), r), Oe(t[o], r), t[o] = i, i;
   }
   function He(t) {
    return "constructor" == t;
   }
   function De(t, e, i, r, o, s, a) {
    Le(t, s), Le(e, s), Le(i, s), Le(r, s), Le(o, s);
    var c = function(t) {
     return Oe(t, s);
    }, u = a || He(t) ? c : v, l = a || He(e) ? c : v, h = a || He(i) ? c : v, p = a || He(r) ? c : v, f = a || He(o) ? c : v;
    return function(s, a) {
     var c = a && a.hasOwnProperty(t) ? a : s;
     return null == c ? c : (c = u(c[t]), e ? null == c ? n : (c = l(c[e]), i ? null == c ? n : (c = h(c[i]), 
     r ? null == c ? n : (c = p(c[r]), o ? null == c ? n : c = f(c[o]) : c) : c) : c) : c);
    };
   }
   function Be(t, e) {
    return function(n, i) {
     return t(n, i, Oe, e);
    };
   }
   function Ie(t, e, i) {
    var r = e.expensiveChecks, s = r ? gr : vr, a = s[t];
    if (a) return a;
    var c = t.split("."), u = c.length;
    if (e.csp) a = 6 > u ? De(c[0], c[1], c[2], c[3], c[4], i, r) : function(t, e) {
     var o, s = 0;
     do o = De(c[s++], c[s++], c[s++], c[s++], c[s++], i, r)(t, e), e = n, t = o; while (u > s);
     return o;
    }; else {
     var l = "";
     r && (l += "s = eso(s, fe);\nl = eso(l, fe);\n");
     var h = r;
     o(c, function(t, e) {
      Le(t, i);
      var n = (e ? "s" : '((l&&l.hasOwnProperty("' + t + '"))?l:s)') + "." + t;
      (r || He(t)) && (n = "eso(" + n + ", fe)", h = !0), l += "if(s == null) return undefined;\ns=" + n + ";\n";
     }), l += "return s;";
     var p = new Function("s", "l", "eso", "fe", l);
     p.toString = g(l), h && (p = Be(p, i)), a = p;
    }
    return a.sharedGetter = !0, a.assign = function(e, n, i) {
     return Re(e, i, t, n, t);
    }, s[t] = a, a;
   }
   function qe(t) {
    return $(t.valueOf) ? t.valueOf() : mr.call(t);
   }
   function Fe() {
    var t = ut(), e = ut();
    this.$get = [ "$filter", "$sniffer", function(n, i) {
     function r(t) {
      var e = t;
      return t.sharedGetter && (e = function(e, n) {
       return t(e, n);
      }, e.literal = t.literal, e.constant = t.constant, e.assign = t.assign), e;
     }
     function s(t, e) {
      for (var n = 0, i = t.length; i > n; n++) {
       var r = t[n];
       r.constant || (r.inputs ? s(r.inputs, e) : -1 === e.indexOf(r) && e.push(r));
      }
      return e;
     }
     function a(t, e) {
      return null == t || null == e ? t === e : "object" == typeof t && (t = qe(t), "object" == typeof t) ? !1 : t === e || t !== t && e !== e;
     }
     function c(t, e, n, i) {
      var r, o = i.$$inputs || (i.$$inputs = s(i.inputs, []));
      if (1 === o.length) {
       var c = a;
       return o = o[0], t.$watch(function(t) {
        var e = o(t);
        return a(e, c) || (r = i(t), c = e && qe(e)), r;
       }, e, n);
      }
      for (var u = [], l = 0, h = o.length; h > l; l++) u[l] = a;
      return t.$watch(function(t) {
       for (var e = !1, n = 0, s = o.length; s > n; n++) {
        var c = o[n](t);
        (e || (e = !a(c, u[n]))) && (u[n] = c && qe(c));
       }
       return e && (r = i(t)), r;
      }, e, n);
     }
     function u(t, e, n, i) {
      var r, o;
      return r = t.$watch(function(t) {
       return i(t);
      }, function(t, n, i) {
       o = t, $(e) && e.apply(this, arguments), y(t) && i.$$postDigest(function() {
        y(o) && r();
       });
      }, n);
     }
     function l(t, e, n, i) {
      function r(t) {
       var e = !0;
       return o(t, function(t) {
        y(t) || (e = !1);
       }), e;
      }
      var s, a;
      return s = t.$watch(function(t) {
       return i(t);
      }, function(t, n, i) {
       a = t, $(e) && e.call(this, t, n, i), r(t) && i.$$postDigest(function() {
        r(a) && s();
       });
      }, n);
     }
     function h(t, e, n, i) {
      var r;
      return r = t.$watch(function(t) {
       return i(t);
      }, function() {
       $(e) && e.apply(this, arguments), r();
      }, n);
     }
     function p(t, e) {
      if (!e) return t;
      var n = t.$$watchDelegate, i = n !== l && n !== u, r = i ? function(n, i) {
       var r = t(n, i);
       return e(r, n, i);
      } : function(n, i) {
       var r = t(n, i), o = e(r, n, i);
       return y(r) ? o : r;
      };
      return t.$$watchDelegate && t.$$watchDelegate !== c ? r.$$watchDelegate = t.$$watchDelegate : e.$stateful || (r.$$watchDelegate = c, 
      r.inputs = [ t ]), r;
     }
     var f = {
      csp: i.csp,
      expensiveChecks: !1
     }, v = {
      csp: i.csp,
      expensiveChecks: !0
     };
     return function(i, o, s) {
      var a, g, m;
      switch (typeof i) {
      case "string":
       m = i = i.trim();
       var y = s ? e : t;
       if (a = y[m], !a) {
        ":" === i.charAt(0) && ":" === i.charAt(1) && (g = !0, i = i.substring(2));
        var b = s ? v : f, w = new fr(b), _ = new dr(w, n, b);
        a = _.parse(i), a.constant ? a.$$watchDelegate = h : g ? (a = r(a), a.$$watchDelegate = a.literal ? l : u) : a.inputs && (a.$$watchDelegate = c), 
        y[m] = a;
       }
       return p(a, o);

      case "function":
       return p(i, o);

      default:
       return p(d, o);
      }
     };
    } ];
   }
   function ze() {
    this.$get = [ "$rootScope", "$exceptionHandler", function(t, e) {
     return Ve(function(e) {
      t.$evalAsync(e);
     }, e);
    } ];
   }
   function Ue() {
    this.$get = [ "$browser", "$exceptionHandler", function(t, e) {
     return Ve(function(e) {
      t.defer(e);
     }, e);
    } ];
   }
   function Ve(t, e) {
    function r(t, e, n) {
     function i(e) {
      return function(n) {
       r || (r = !0, e.call(t, n));
      };
     }
     var r = !1;
     return [ i(e), i(n) ];
    }
    function s() {
     this.$$state = {
      status: 0
     };
    }
    function a(t, e) {
     return function(n) {
      e.call(t, n);
     };
    }
    function c(t) {
     var i, r, o;
     o = t.pending, t.processScheduled = !1, t.pending = n;
     for (var s = 0, a = o.length; a > s; ++s) {
      r = o[s][0], i = o[s][t.status];
      try {
       $(i) ? r.resolve(i(t.value)) : 1 === t.status ? r.resolve(t.value) : r.reject(t.value);
      } catch (c) {
       r.reject(c), e(c);
      }
     }
    }
    function u(e) {
     !e.processScheduled && e.pending && (e.processScheduled = !0, t(function() {
      c(e);
     }));
    }
    function l() {
     this.promise = new s(), this.resolve = a(this, this.resolve), this.reject = a(this, this.reject), 
     this.notify = a(this, this.notify);
    }
    function h(t) {
     var e = new l(), n = 0, i = li(t) ? [] : {};
     return o(t, function(t, r) {
      n++, m(t).then(function(t) {
       i.hasOwnProperty(r) || (i[r] = t, --n || e.resolve(i));
      }, function(t) {
       i.hasOwnProperty(r) || e.reject(t);
      });
     }), 0 === n && e.resolve(i), e.promise;
    }
    var p = i("$q", TypeError), f = function() {
     return new l();
    };
    s.prototype = {
     then: function(t, e, n) {
      var i = new l();
      return this.$$state.pending = this.$$state.pending || [], this.$$state.pending.push([ i, t, e, n ]), 
      this.$$state.status > 0 && u(this.$$state), i.promise;
     },
     "catch": function(t) {
      return this.then(null, t);
     },
     "finally": function(t, e) {
      return this.then(function(e) {
       return g(e, !0, t);
      }, function(e) {
       return g(e, !1, t);
      }, e);
     }
    }, l.prototype = {
     resolve: function(t) {
      this.promise.$$state.status || (t === this.promise ? this.$$reject(p("qcycle", "Expected promise to be resolved with value other than itself '{0}'", t)) : this.$$resolve(t));
     },
     $$resolve: function(t) {
      var n, i;
      i = r(this, this.$$resolve, this.$$reject);
      try {
       (b(t) || $(t)) && (n = t && t.then), $(n) ? (this.promise.$$state.status = -1, n.call(t, i[0], i[1], this.notify)) : (this.promise.$$state.value = t, 
       this.promise.$$state.status = 1, u(this.promise.$$state));
      } catch (o) {
       i[1](o), e(o);
      }
     },
     reject: function(t) {
      this.promise.$$state.status || this.$$reject(t);
     },
     $$reject: function(t) {
      this.promise.$$state.value = t, this.promise.$$state.status = 2, u(this.promise.$$state);
     },
     notify: function(n) {
      var i = this.promise.$$state.pending;
      this.promise.$$state.status <= 0 && i && i.length && t(function() {
       for (var t, r, o = 0, s = i.length; s > o; o++) {
        r = i[o][0], t = i[o][3];
        try {
         r.notify($(t) ? t(n) : n);
        } catch (a) {
         e(a);
        }
       }
      });
     }
    };
    var d = function(t) {
     var e = new l();
     return e.reject(t), e.promise;
    }, v = function(t, e) {
     var n = new l();
     return e ? n.resolve(t) : n.reject(t), n.promise;
    }, g = function(t, e, n) {
     var i = null;
     try {
      $(n) && (i = n());
     } catch (r) {
      return v(r, !1);
     }
     return P(i) ? i.then(function() {
      return v(t, e);
     }, function(t) {
      return v(t, !1);
     }) : v(t, e);
    }, m = function(t, e, n, i) {
     var r = new l();
     return r.resolve(t), r.promise.then(e, n, i);
    }, y = function w(t) {
     function e(t) {
      i.resolve(t);
     }
     function n(t) {
      i.reject(t);
     }
     if (!$(t)) throw p("norslvr", "Expected resolverFn, got '{0}'", t);
     if (!(this instanceof w)) return new w(t);
     var i = new l();
     return t(e, n), i.promise;
    };
    return y.defer = f, y.reject = d, y.when = m, y.all = h, y;
   }
   function We() {
    this.$get = [ "$window", "$timeout", function(t, e) {
     var n = t.requestAnimationFrame || t.webkitRequestAnimationFrame, i = t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.webkitCancelRequestAnimationFrame, r = !!n, o = r ? function(t) {
      var e = n(t);
      return function() {
       i(e);
      };
     } : function(t) {
      var n = e(t, 16.66, !1);
      return function() {
       e.cancel(n);
      };
     };
     return o.supported = r, o;
    } ];
   }
   function Ge() {
    var t = 10, e = i("$rootScope"), n = null, s = null;
    this.digestTtl = function(e) {
     return arguments.length && (t = e), t;
    }, this.$get = [ "$injector", "$exceptionHandler", "$parse", "$browser", function(i, a, c, l) {
     function h() {
      this.$id = u(), this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null, 
      this.$root = this, this.$$destroyed = !1, this.$$listeners = {}, this.$$listenerCount = {}, 
      this.$$isolateBindings = null;
     }
     function p(t) {
      if (_.$$phase) throw e("inprog", "{0} already in progress", _.$$phase);
      _.$$phase = t;
     }
     function f() {
      _.$$phase = null;
     }
     function v(t, e, n) {
      do t.$$listenerCount[n] -= e, 0 === t.$$listenerCount[n] && delete t.$$listenerCount[n]; while (t = t.$parent);
     }
     function g() {}
     function y() {
      for (;S.length; ) try {
       S.shift()();
      } catch (t) {
       a(t);
      }
      s = null;
     }
     function w() {
      null === s && (s = l.defer(function() {
       _.$apply(y);
      }));
     }
     h.prototype = {
      constructor: h,
      $new: function(t, e) {
       function n() {
        i.$$destroyed = !0;
       }
       var i;
       return e = e || this, t ? (i = new h(), i.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = function() {
        this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null, 
        this.$$listeners = {}, this.$$listenerCount = {}, this.$id = u(), this.$$ChildScope = null;
       }, this.$$ChildScope.prototype = this), i = new this.$$ChildScope()), i.$parent = e, 
       i.$$prevSibling = e.$$childTail, e.$$childHead ? (e.$$childTail.$$nextSibling = i, 
       e.$$childTail = i) : e.$$childHead = e.$$childTail = i, (t || e != this) && i.$on("$destroy", n), 
       i;
      },
      $watch: function(t, e, i) {
       var r = c(t);
       if (r.$$watchDelegate) return r.$$watchDelegate(this, e, i, r);
       var o = this, s = o.$$watchers, a = {
        fn: e,
        last: g,
        get: r,
        exp: t,
        eq: !!i
       };
       return n = null, $(e) || (a.fn = d), s || (s = o.$$watchers = []), s.unshift(a), 
       function() {
        N(s, a), n = null;
       };
      },
      $watchGroup: function(t, e) {
       function n() {
        c = !1, u ? (u = !1, e(r, r, a)) : e(r, i, a);
       }
       var i = new Array(t.length), r = new Array(t.length), s = [], a = this, c = !1, u = !0;
       if (!t.length) {
        var l = !0;
        return a.$evalAsync(function() {
         l && e(r, r, a);
        }), function() {
         l = !1;
        };
       }
       return 1 === t.length ? this.$watch(t[0], function(t, n, o) {
        r[0] = t, i[0] = n, e(r, t === n ? r : i, o);
       }) : (o(t, function(t, e) {
        var o = a.$watch(t, function(t, o) {
         r[e] = t, i[e] = o, c || (c = !0, a.$evalAsync(n));
        });
        s.push(o);
       }), function() {
        for (;s.length; ) s.shift()();
       });
      },
      $watchCollection: function(t, e) {
       function n(t) {
        o = t;
        var e, n, i, a, c;
        if (!m(o)) {
         if (b(o)) if (r(o)) {
          s !== f && (s = f, g = s.length = 0, h++), e = o.length, g !== e && (h++, s.length = g = e);
          for (var u = 0; e > u; u++) c = s[u], a = o[u], i = c !== c && a !== a, i || c === a || (h++, 
          s[u] = a);
         } else {
          s !== d && (s = d = {}, g = 0, h++), e = 0;
          for (n in o) o.hasOwnProperty(n) && (e++, a = o[n], c = s[n], n in s ? (i = c !== c && a !== a, 
          i || c === a || (h++, s[n] = a)) : (g++, s[n] = a, h++));
          if (g > e) {
           h++;
           for (n in s) o.hasOwnProperty(n) || (g--, delete s[n]);
          }
         } else s !== o && (s = o, h++);
         return h;
        }
       }
       function i() {
        if (v ? (v = !1, e(o, o, u)) : e(o, a, u), l) if (b(o)) if (r(o)) {
         a = new Array(o.length);
         for (var t = 0; t < o.length; t++) a[t] = o[t];
        } else {
         a = {};
         for (var n in o) Xn.call(o, n) && (a[n] = o[n]);
        } else a = o;
       }
       n.$stateful = !0;
       var o, s, a, u = this, l = e.length > 1, h = 0, p = c(t, n), f = [], d = {}, v = !0, g = 0;
       return this.$watch(p, i);
      },
      $digest: function() {
       var i, r, o, c, u, h, d, v, m, b, w = t, S = this, E = [];
       p("$digest"), l.$$checkUrlChange(), this === _ && null !== s && (l.defer.cancel(s), 
       y()), n = null;
       do {
        for (h = !1, v = S; x.length; ) {
         try {
          b = x.shift(), b.scope.$eval(b.expression, b.locals);
         } catch (C) {
          a(C);
         }
         n = null;
        }
        t: do {
         if (c = v.$$watchers) for (u = c.length; u--; ) try {
          if (i = c[u]) if ((r = i.get(v)) === (o = i.last) || (i.eq ? D(r, o) : "number" == typeof r && "number" == typeof o && isNaN(r) && isNaN(o))) {
           if (i === n) {
            h = !1;
            break t;
           }
          } else h = !0, n = i, i.last = i.eq ? R(r, null) : r, i.fn(r, o === g ? r : o, v), 
          5 > w && (m = 4 - w, E[m] || (E[m] = []), E[m].push({
           msg: $(i.exp) ? "fn: " + (i.exp.name || i.exp.toString()) : i.exp,
           newVal: r,
           oldVal: o
          }));
         } catch (C) {
          a(C);
         }
         if (!(d = v.$$childHead || v !== S && v.$$nextSibling)) for (;v !== S && !(d = v.$$nextSibling); ) v = v.$parent;
        } while (v = d);
        if ((h || x.length) && !w--) throw f(), e("infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", t, E);
       } while (h || x.length);
       for (f(); k.length; ) try {
        k.shift()();
       } catch (C) {
        a(C);
       }
      },
      $destroy: function() {
       if (!this.$$destroyed) {
        var t = this.$parent;
        if (this.$broadcast("$destroy"), this.$$destroyed = !0, this !== _) {
         for (var e in this.$$listenerCount) v(this, this.$$listenerCount[e], e);
         t.$$childHead == this && (t.$$childHead = this.$$nextSibling), t.$$childTail == this && (t.$$childTail = this.$$prevSibling), 
         this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), 
         this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = d, 
         this.$on = this.$watch = this.$watchGroup = function() {
          return d;
         }, this.$$listeners = {}, this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = this.$$watchers = null;
        }
       }
      },
      $eval: function(t, e) {
       return c(t)(this, e);
      },
      $evalAsync: function(t, e) {
       _.$$phase || x.length || l.defer(function() {
        x.length && _.$digest();
       }), x.push({
        scope: this,
        expression: t,
        locals: e
       });
      },
      $$postDigest: function(t) {
       k.push(t);
      },
      $apply: function(t) {
       try {
        return p("$apply"), this.$eval(t);
       } catch (e) {
        a(e);
       } finally {
        f();
        try {
         _.$digest();
        } catch (e) {
         throw a(e), e;
        }
       }
      },
      $applyAsync: function(t) {
       function e() {
        n.$eval(t);
       }
       var n = this;
       t && S.push(e), w();
      },
      $on: function(t, e) {
       var n = this.$$listeners[t];
       n || (this.$$listeners[t] = n = []), n.push(e);
       var i = this;
       do i.$$listenerCount[t] || (i.$$listenerCount[t] = 0), i.$$listenerCount[t]++; while (i = i.$parent);
       var r = this;
       return function() {
        var i = n.indexOf(e);
        -1 !== i && (n[i] = null, v(r, 1, t));
       };
      },
      $emit: function(t) {
       var e, n, i, r = [], o = this, s = !1, c = {
        name: t,
        targetScope: o,
        stopPropagation: function() {
         s = !0;
        },
        preventDefault: function() {
         c.defaultPrevented = !0;
        },
        defaultPrevented: !1
       }, u = B([ c ], arguments, 1);
       do {
        for (e = o.$$listeners[t] || r, c.currentScope = o, n = 0, i = e.length; i > n; n++) if (e[n]) try {
         e[n].apply(null, u);
        } catch (l) {
         a(l);
        } else e.splice(n, 1), n--, i--;
        if (s) return c.currentScope = null, c;
        o = o.$parent;
       } while (o);
       return c.currentScope = null, c;
      },
      $broadcast: function(t) {
       var e = this, n = e, i = e, r = {
        name: t,
        targetScope: e,
        preventDefault: function() {
         r.defaultPrevented = !0;
        },
        defaultPrevented: !1
       };
       if (!e.$$listenerCount[t]) return r;
       for (var o, s, c, u = B([ r ], arguments, 1); n = i; ) {
        for (r.currentScope = n, o = n.$$listeners[t] || [], s = 0, c = o.length; c > s; s++) if (o[s]) try {
         o[s].apply(null, u);
        } catch (l) {
         a(l);
        } else o.splice(s, 1), s--, c--;
        if (!(i = n.$$listenerCount[t] && n.$$childHead || n !== e && n.$$nextSibling)) for (;n !== e && !(i = n.$$nextSibling); ) n = n.$parent;
       }
       return r.currentScope = null, r;
      }
     };
     var _ = new h(), x = _.$$asyncQueue = [], k = _.$$postDigestQueue = [], S = _.$$applyAsyncQueue = [];
     return _;
    } ];
   }
   function Xe() {
    var t = /^\s*(https?|ftp|mailto|tel|file):/, e = /^\s*((https?|ftp|file|blob):|data:image\/)/;
    this.aHrefSanitizationWhitelist = function(e) {
     return y(e) ? (t = e, this) : t;
    }, this.imgSrcSanitizationWhitelist = function(t) {
     return y(t) ? (e = t, this) : e;
    }, this.$get = function() {
     return function(n, i) {
      var r, o = i ? e : t;
      return r = rn(n).href, "" === r || r.match(o) ? n : "unsafe:" + r;
     };
    };
   }
   function Ye(t) {
    if ("self" === t) return t;
    if (w(t)) {
     if (t.indexOf("***") > -1) throw yr("iwcard", "Illegal sequence *** in string matcher.  String: {0}", t);
     return t = pi(t).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"), new RegExp("^" + t + "$");
    }
    if (k(t)) return new RegExp("^" + t.source + "$");
    throw yr("imatcher", 'Matchers may only be "self", string patterns or RegExp objects');
   }
   function Je(t) {
    var e = [];
    return y(t) && o(t, function(t) {
     e.push(Ye(t));
    }), e;
   }
   function Ke() {
    this.SCE_CONTEXTS = br;
    var t = [ "self" ], e = [];
    this.resourceUrlWhitelist = function(e) {
     return arguments.length && (t = Je(e)), t;
    }, this.resourceUrlBlacklist = function(t) {
     return arguments.length && (e = Je(t)), e;
    }, this.$get = [ "$injector", function(i) {
     function r(t, e) {
      return "self" === t ? on(e) : !!t.exec(e.href);
     }
     function o(n) {
      var i, o, s = rn(n.toString()), a = !1;
      for (i = 0, o = t.length; o > i; i++) if (r(t[i], s)) {
       a = !0;
       break;
      }
      if (a) for (i = 0, o = e.length; o > i; i++) if (r(e[i], s)) {
       a = !1;
       break;
      }
      return a;
     }
     function s(t) {
      var e = function(t) {
       this.$$unwrapTrustedValue = function() {
        return t;
       };
      };
      return t && (e.prototype = new t()), e.prototype.valueOf = function() {
       return this.$$unwrapTrustedValue();
      }, e.prototype.toString = function() {
       return this.$$unwrapTrustedValue().toString();
      }, e;
     }
     function a(t, e) {
      var i = p.hasOwnProperty(t) ? p[t] : null;
      if (!i) throw yr("icontext", "Attempted to trust a value in invalid context. Context: {0}; Value: {1}", t, e);
      if (null === e || e === n || "" === e) return e;
      if ("string" != typeof e) throw yr("itype", "Attempted to trust a non-string value in a content requiring a string: Context: {0}", t);
      return new i(e);
     }
     function c(t) {
      return t instanceof h ? t.$$unwrapTrustedValue() : t;
     }
     function u(t, e) {
      if (null === e || e === n || "" === e) return e;
      var i = p.hasOwnProperty(t) ? p[t] : null;
      if (i && e instanceof i) return e.$$unwrapTrustedValue();
      if (t === br.RESOURCE_URL) {
       if (o(e)) return e;
       throw yr("insecurl", "Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}", e.toString());
      }
      if (t === br.HTML) return l(e);
      throw yr("unsafe", "Attempting to use an unsafe value in a safe context.");
     }
     var l = function() {
      throw yr("unsafe", "Attempting to use an unsafe value in a safe context.");
     };
     i.has("$sanitize") && (l = i.get("$sanitize"));
     var h = s(), p = {};
     return p[br.HTML] = s(h), p[br.CSS] = s(h), p[br.URL] = s(h), p[br.JS] = s(h), p[br.RESOURCE_URL] = s(p[br.URL]), 
     {
      trustAs: a,
      getTrusted: u,
      valueOf: c
     };
    } ];
   }
   function Qe() {
    var t = !0;
    this.enabled = function(e) {
     return arguments.length && (t = !!e), t;
    }, this.$get = [ "$parse", "$sceDelegate", function(e, n) {
     if (t && 8 > Qn) throw yr("iequirks", "Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");
     var i = H(br);
     i.isEnabled = function() {
      return t;
     }, i.trustAs = n.trustAs, i.getTrusted = n.getTrusted, i.valueOf = n.valueOf, t || (i.trustAs = i.getTrusted = function(t, e) {
      return e;
     }, i.valueOf = v), i.parseAs = function(t, n) {
      var r = e(n);
      return r.literal && r.constant ? r : e(n, function(e) {
       return i.getTrusted(t, e);
      });
     };
     var r = i.parseAs, s = i.getTrusted, a = i.trustAs;
     return o(br, function(t, e) {
      var n = Gn(e);
      i[vt("parse_as_" + n)] = function(e) {
       return r(t, e);
      }, i[vt("get_trusted_" + n)] = function(e) {
       return s(t, e);
      }, i[vt("trust_as_" + n)] = function(e) {
       return a(t, e);
      };
     }), i;
    } ];
   }
   function Ze() {
    this.$get = [ "$window", "$document", function(t, e) {
     var n, i, r = {}, o = p((/android (\d+)/.exec(Gn((t.navigator || {}).userAgent)) || [])[1]), s = /Boxee/i.test((t.navigator || {}).userAgent), a = e[0] || {}, c = /^(Moz|webkit|ms)(?=[A-Z])/, u = a.body && a.body.style, l = !1, h = !1;
     if (u) {
      for (var f in u) if (i = c.exec(f)) {
       n = i[0], n = n.substr(0, 1).toUpperCase() + n.substr(1);
       break;
      }
      n || (n = "WebkitOpacity" in u && "webkit"), l = !!("transition" in u || n + "Transition" in u), 
      h = !!("animation" in u || n + "Animation" in u), !o || l && h || (l = w(a.body.style.webkitTransition), 
      h = w(a.body.style.webkitAnimation));
     }
     return {
      history: !(!t.history || !t.history.pushState || 4 > o || s),
      hasEvent: function(t) {
       if ("input" === t && 11 >= Qn) return !1;
       if (m(r[t])) {
        var e = a.createElement("div");
        r[t] = "on" + t in e;
       }
       return r[t];
      },
      csp: fi(),
      vendorPrefix: n,
      transitions: l,
      animations: h,
      android: o
     };
    } ];
   }
   function tn() {
    this.$get = [ "$templateCache", "$http", "$q", function(t, e, n) {
     function i(r, o) {
      function s(t) {
       if (!o) throw Gi("tpload", "Failed to load template: {0}", r);
       return n.reject(t);
      }
      i.totalPendingRequests++;
      var a = e.defaults && e.defaults.transformResponse;
      li(a) ? a = a.filter(function(t) {
       return t !== re;
      }) : a === re && (a = null);
      var c = {
       cache: t,
       transformResponse: a
      };
      return e.get(r, c)["finally"](function() {
       i.totalPendingRequests--;
      }).then(function(t) {
       return t.data;
      }, s);
     }
     return i.totalPendingRequests = 0, i;
    } ];
   }
   function en() {
    this.$get = [ "$rootScope", "$browser", "$location", function(t, e, n) {
     var i = {};
     return i.findBindings = function(t, e, n) {
      var i = t.getElementsByClassName("ng-binding"), r = [];
      return o(i, function(t) {
       var i = ai.element(t).data("$binding");
       i && o(i, function(i) {
        if (n) {
         var o = new RegExp("(^|\\s)" + pi(e) + "(\\s|\\||$)");
         o.test(i) && r.push(t);
        } else -1 != i.indexOf(e) && r.push(t);
       });
      }), r;
     }, i.findModels = function(t, e, n) {
      for (var i = [ "ng-", "data-ng-", "ng\\:" ], r = 0; r < i.length; ++r) {
       var o = n ? "=" : "*=", s = "[" + i[r] + "model" + o + '"' + e + '"]', a = t.querySelectorAll(s);
       if (a.length) return a;
      }
     }, i.getLocation = function() {
      return n.url();
     }, i.setLocation = function(e) {
      e !== n.url() && (n.url(e), t.$digest());
     }, i.whenStable = function(t) {
      e.notifyWhenNoOutstandingRequests(t);
     }, i;
    } ];
   }
   function nn() {
    this.$get = [ "$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function(t, e, n, i, r) {
     function o(o, a, c) {
      var u, l = y(c) && !c, h = (l ? i : n).defer(), p = h.promise;
      return u = e.defer(function() {
       try {
        h.resolve(o());
       } catch (e) {
        h.reject(e), r(e);
       } finally {
        delete s[p.$$timeoutId];
       }
       l || t.$apply();
      }, a), p.$$timeoutId = u, s[u] = h, p;
     }
     var s = {};
     return o.cancel = function(t) {
      return t && t.$$timeoutId in s ? (s[t.$$timeoutId].reject("canceled"), delete s[t.$$timeoutId], 
      e.defer.cancel(t.$$timeoutId)) : !1;
     }, o;
    } ];
   }
   function rn(t) {
    var e = t;
    return Qn && (wr.setAttribute("href", e), e = wr.href), wr.setAttribute("href", e), 
    {
     href: wr.href,
     protocol: wr.protocol ? wr.protocol.replace(/:$/, "") : "",
     host: wr.host,
     search: wr.search ? wr.search.replace(/^\?/, "") : "",
     hash: wr.hash ? wr.hash.replace(/^#/, "") : "",
     hostname: wr.hostname,
     port: wr.port,
     pathname: "/" === wr.pathname.charAt(0) ? wr.pathname : "/" + wr.pathname
    };
   }
   function on(t) {
    var e = w(t) ? rn(t) : t;
    return e.protocol === _r.protocol && e.host === _r.host;
   }
   function sn() {
    this.$get = g(t);
   }
   function an(t) {
    function e(i, r) {
     if (b(i)) {
      var s = {};
      return o(i, function(t, n) {
       s[n] = e(n, t);
      }), s;
     }
     return t.factory(i + n, r);
    }
    var n = "Filter";
    this.register = e, this.$get = [ "$injector", function(t) {
     return function(e) {
      return t.get(e + n);
     };
    } ], e("currency", hn), e("date", xn), e("filter", cn), e("json", $n), e("limitTo", kn), 
    e("lowercase", Er), e("number", pn), e("orderBy", Sn), e("uppercase", Cr);
   }
   function cn() {
    return function(t, e, n) {
     if (!li(t)) return t;
     var i, r;
     switch (typeof e) {
     case "function":
      i = e;
      break;

     case "boolean":
     case "number":
     case "string":
      r = !0;

     case "object":
      i = un(e, n, r);
      break;

     default:
      return t;
     }
     return t.filter(i);
    };
   }
   function un(t, e, n) {
    var i, r = b(t) && "$" in t;
    return e === !0 ? e = D : $(e) || (e = function(t, e) {
     return b(t) || b(e) ? !1 : (t = Gn("" + t), e = Gn("" + e), -1 !== t.indexOf(e));
    }), i = function(i) {
     return r && !b(i) ? ln(i, t.$, e, !1) : ln(i, t, e, n);
    };
   }
   function ln(t, e, n, i, r) {
    var o = typeof t, s = typeof e;
    if ("string" === s && "!" === e.charAt(0)) return !ln(t, e.substring(1), n, i);
    if (li(t)) return t.some(function(t) {
     return ln(t, e, n, i);
    });
    switch (o) {
    case "object":
     var a;
     if (i) {
      for (a in t) if ("$" !== a.charAt(0) && ln(t[a], e, n, !0)) return !0;
      return r ? !1 : ln(t, e, n, !1);
     }
     if ("object" === s) {
      for (a in e) {
       var c = e[a];
       if (!$(c)) {
        var u = "$" === a, l = u ? t : t[a];
        if (!ln(l, c, n, u, u)) return !1;
       }
      }
      return !0;
     }
     return n(t, e);

    case "function":
     return !1;

    default:
     return n(t, e);
    }
   }
   function hn(t) {
    var e = t.NUMBER_FORMATS;
    return function(t, n, i) {
     return m(n) && (n = e.CURRENCY_SYM), m(i) && (i = e.PATTERNS[1].maxFrac), null == t ? t : fn(t, e.PATTERNS[1], e.GROUP_SEP, e.DECIMAL_SEP, i).replace(/\u00A4/g, n);
    };
   }
   function pn(t) {
    var e = t.NUMBER_FORMATS;
    return function(t, n) {
     return null == t ? t : fn(t, e.PATTERNS[0], e.GROUP_SEP, e.DECIMAL_SEP, n);
    };
   }
   function fn(t, e, n, i, r) {
    if (!isFinite(t) || b(t)) return "";
    var o = 0 > t;
    t = Math.abs(t);
    var s = t + "", a = "", c = [], u = !1;
    if (-1 !== s.indexOf("e")) {
     var l = s.match(/([\d\.]+)e(-?)(\d+)/);
     l && "-" == l[2] && l[3] > r + 1 ? t = 0 : (a = s, u = !0);
    }
    if (u) r > 0 && 1 > t && (a = t.toFixed(r), t = parseFloat(a)); else {
     var h = (s.split(xr)[1] || "").length;
     m(r) && (r = Math.min(Math.max(e.minFrac, h), e.maxFrac)), t = +(Math.round(+(t.toString() + "e" + r)).toString() + "e" + -r);
     var p = ("" + t).split(xr), f = p[0];
     p = p[1] || "";
     var d, v = 0, g = e.lgSize, y = e.gSize;
     if (f.length >= g + y) for (v = f.length - g, d = 0; v > d; d++) (v - d) % y === 0 && 0 !== d && (a += n), 
     a += f.charAt(d);
     for (d = v; d < f.length; d++) (f.length - d) % g === 0 && 0 !== d && (a += n), 
     a += f.charAt(d);
     for (;p.length < r; ) p += "0";
     r && "0" !== r && (a += i + p.substr(0, r));
    }
    return 0 === t && (o = !1), c.push(o ? e.negPre : e.posPre, a, o ? e.negSuf : e.posSuf), 
    c.join("");
   }
   function dn(t, e, n) {
    var i = "";
    for (0 > t && (i = "-", t = -t), t = "" + t; t.length < e; ) t = "0" + t;
    return n && (t = t.substr(t.length - e)), i + t;
   }
   function vn(t, e, n, i) {
    return n = n || 0, function(r) {
     var o = r["get" + t]();
     return (n > 0 || o > -n) && (o += n), 0 === o && -12 == n && (o = 12), dn(o, e, i);
    };
   }
   function gn(t, e) {
    return function(n, i) {
     var r = n["get" + t](), o = Yn(e ? "SHORT" + t : t);
     return i[o][r];
    };
   }
   function mn(t) {
    var e = -1 * t.getTimezoneOffset(), n = e >= 0 ? "+" : "";
    return n += dn(Math[e > 0 ? "floor" : "ceil"](e / 60), 2) + dn(Math.abs(e % 60), 2);
   }
   function yn(t) {
    var e = new Date(t, 0, 1).getDay();
    return new Date(t, 0, (4 >= e ? 5 : 12) - e);
   }
   function bn(t) {
    return new Date(t.getFullYear(), t.getMonth(), t.getDate() + (4 - t.getDay()));
   }
   function wn(t) {
    return function(e) {
     var n = yn(e.getFullYear()), i = bn(e), r = +i - +n, o = 1 + Math.round(r / 6048e5);
     return dn(o, t);
    };
   }
   function _n(t, e) {
    return t.getHours() < 12 ? e.AMPMS[0] : e.AMPMS[1];
   }
   function xn(t) {
    function e(t) {
     var e;
     if (e = t.match(n)) {
      var i = new Date(0), r = 0, o = 0, s = e[8] ? i.setUTCFullYear : i.setFullYear, a = e[8] ? i.setUTCHours : i.setHours;
      e[9] && (r = p(e[9] + e[10]), o = p(e[9] + e[11])), s.call(i, p(e[1]), p(e[2]) - 1, p(e[3]));
      var c = p(e[4] || 0) - r, u = p(e[5] || 0) - o, l = p(e[6] || 0), h = Math.round(1e3 * parseFloat("0." + (e[7] || 0)));
      return a.call(i, c, u, l, h), i;
     }
     return t;
    }
    var n = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
    return function(n, i, r) {
     var s, a, c = "", u = [];
     if (i = i || "mediumDate", i = t.DATETIME_FORMATS[i] || i, w(n) && (n = Sr.test(n) ? p(n) : e(n)), 
     _(n) && (n = new Date(n)), !x(n)) return n;
     for (;i; ) a = kr.exec(i), a ? (u = B(u, a, 1), i = u.pop()) : (u.push(i), i = null);
     return r && "UTC" === r && (n = new Date(n.getTime()), n.setMinutes(n.getMinutes() + n.getTimezoneOffset())), 
     o(u, function(e) {
      s = $r[e], c += s ? s(n, t.DATETIME_FORMATS) : e.replace(/(^'|'$)/g, "").replace(/''/g, "'");
     }), c;
    };
   }
   function $n() {
    return function(t, e) {
     return m(e) && (e = 2), z(t, e);
    };
   }
   function kn() {
    return function(t, e) {
     return _(t) && (t = t.toString()), li(t) || w(t) ? (e = Math.abs(Number(e)) === 1 / 0 ? Number(e) : p(e), 
     e ? e > 0 ? t.slice(0, e) : t.slice(e) : w(t) ? "" : []) : t;
    };
   }
   function Sn(t) {
    return function(e, n, i) {
     function o(t, e) {
      for (var i = 0; i < n.length; i++) {
       var r = n[i](t, e);
       if (0 !== r) return r;
      }
      return 0;
     }
     function s(t, e) {
      return e ? function(e, n) {
       return t(n, e);
      } : t;
     }
     function a(t) {
      switch (typeof t) {
      case "number":
      case "boolean":
      case "string":
       return !0;

      default:
       return !1;
      }
     }
     function c(t) {
      return null === t ? "null" : "function" == typeof t.valueOf && (t = t.valueOf(), 
      a(t)) ? t : "function" == typeof t.toString && (t = t.toString(), a(t)) ? t : "";
     }
     function u(t, e) {
      var n = typeof t, i = typeof e;
      return n === i && "object" === n && (t = c(t), e = c(e)), n === i ? ("string" === n && (t = t.toLowerCase(), 
      e = e.toLowerCase()), t === e ? 0 : e > t ? -1 : 1) : i > n ? -1 : 1;
     }
     return r(e) ? (n = li(n) ? n : [ n ], 0 === n.length && (n = [ "+" ]), n = n.map(function(e) {
      var n = !1, i = e || v;
      if (w(e)) {
       if (("+" == e.charAt(0) || "-" == e.charAt(0)) && (n = "-" == e.charAt(0), e = e.substring(1)), 
       "" === e) return s(u, n);
       if (i = t(e), i.constant) {
        var r = i();
        return s(function(t, e) {
         return u(t[r], e[r]);
        }, n);
       }
      }
      return s(function(t, e) {
       return u(i(t), i(e));
      }, n);
     }), ni.call(e).sort(s(o, i))) : e;
    };
   }
   function En(t) {
    return $(t) && (t = {
     link: t
    }), t.restrict = t.restrict || "AC", g(t);
   }
   function Cn(t, e) {
    t.$name = e;
   }
   function Tn(t, e, i, r, s) {
    var a = this, c = [], u = a.$$parentForm = t.parent().controller("form") || jr;
    a.$error = {}, a.$$success = {}, a.$pending = n, a.$name = s(e.name || e.ngForm || "")(i), 
    a.$dirty = !1, a.$pristine = !0, a.$valid = !0, a.$invalid = !1, a.$submitted = !1, 
    u.$addControl(a), a.$rollbackViewValue = function() {
     o(c, function(t) {
      t.$rollbackViewValue();
     });
    }, a.$commitViewValue = function() {
     o(c, function(t) {
      t.$commitViewValue();
     });
    }, a.$addControl = function(t) {
     st(t.$name, "input"), c.push(t), t.$name && (a[t.$name] = t);
    }, a.$$renameControl = function(t, e) {
     var n = t.$name;
     a[n] === t && delete a[n], a[e] = t, t.$name = e;
    }, a.$removeControl = function(t) {
     t.$name && a[t.$name] === t && delete a[t.$name], o(a.$pending, function(e, n) {
      a.$setValidity(n, null, t);
     }), o(a.$error, function(e, n) {
      a.$setValidity(n, null, t);
     }), o(a.$$success, function(e, n) {
      a.$setValidity(n, null, t);
     }), N(c, t);
    }, zn({
     ctrl: this,
     $element: t,
     set: function(t, e, n) {
      var i = t[e];
      if (i) {
       var r = i.indexOf(n);
       -1 === r && i.push(n);
      } else t[e] = [ n ];
     },
     unset: function(t, e, n) {
      var i = t[e];
      i && (N(i, n), 0 === i.length && delete t[e]);
     },
     parentForm: u,
     $animate: r
    }), a.$setDirty = function() {
     r.removeClass(t, po), r.addClass(t, fo), a.$dirty = !0, a.$pristine = !1, u.$setDirty();
    }, a.$setPristine = function() {
     r.setClass(t, po, fo + " " + Pr), a.$dirty = !1, a.$pristine = !0, a.$submitted = !1, 
     o(c, function(t) {
      t.$setPristine();
     });
    }, a.$setUntouched = function() {
     o(c, function(t) {
      t.$setUntouched();
     });
    }, a.$setSubmitted = function() {
     r.addClass(t, Pr), a.$submitted = !0, u.$setSubmitted();
    };
   }
   function An(t) {
    t.$formatters.push(function(e) {
     return t.$isEmpty(e) ? e : e.toString();
    });
   }
   function jn(t, e, n, i, r, o) {
    Pn(t, e, n, i, r, o), An(i);
   }
   function Pn(t, e, n, i, r, o) {
    var s = Gn(e[0].type);
    if (!r.android) {
     var a = !1;
     e.on("compositionstart", function() {
      a = !0;
     }), e.on("compositionend", function() {
      a = !1, c();
     });
    }
    var c = function(t) {
     if (u && (o.defer.cancel(u), u = null), !a) {
      var r = e.val(), c = t && t.type;
      "password" === s || n.ngTrim && "false" === n.ngTrim || (r = hi(r)), (i.$viewValue !== r || "" === r && i.$$hasNativeValidators) && i.$setViewValue(r, c);
     }
    };
    if (r.hasEvent("input")) e.on("input", c); else {
     var u, l = function(t, e, n) {
      u || (u = o.defer(function() {
       u = null, e && e.value === n || c(t);
      }));
     };
     e.on("keydown", function(t) {
      var e = t.keyCode;
      91 === e || e > 15 && 19 > e || e >= 37 && 40 >= e || l(t, this, this.value);
     }), r.hasEvent("paste") && e.on("paste cut", l);
    }
    e.on("change", c), i.$render = function() {
     e.val(i.$isEmpty(i.$viewValue) ? "" : i.$viewValue);
    };
   }
   function Ln(t, e) {
    if (x(t)) return t;
    if (w(t)) {
     qr.lastIndex = 0;
     var n = qr.exec(t);
     if (n) {
      var i = +n[1], r = +n[2], o = 0, s = 0, a = 0, c = 0, u = yn(i), l = 7 * (r - 1);
      return e && (o = e.getHours(), s = e.getMinutes(), a = e.getSeconds(), c = e.getMilliseconds()), 
      new Date(i, 0, u.getDate() + l, o, s, a, c);
     }
    }
    return 0 / 0;
   }
   function On(t, e) {
    return function(n, i) {
     var r, s;
     if (x(n)) return n;
     if (w(n)) {
      if ('"' == n.charAt(0) && '"' == n.charAt(n.length - 1) && (n = n.substring(1, n.length - 1)), 
      Nr.test(n)) return new Date(n);
      if (t.lastIndex = 0, r = t.exec(n)) return r.shift(), s = i ? {
       yyyy: i.getFullYear(),
       MM: i.getMonth() + 1,
       dd: i.getDate(),
       HH: i.getHours(),
       mm: i.getMinutes(),
       ss: i.getSeconds(),
       sss: i.getMilliseconds() / 1e3
      } : {
       yyyy: 1970,
       MM: 1,
       dd: 1,
       HH: 0,
       mm: 0,
       ss: 0,
       sss: 0
      }, o(r, function(t, n) {
       n < e.length && (s[e[n]] = +t);
      }), new Date(s.yyyy, s.MM - 1, s.dd, s.HH, s.mm, s.ss || 0, 1e3 * s.sss || 0);
     }
     return 0 / 0;
    };
   }
   function Mn(t, e, i, r) {
    return function(o, s, a, c, u, l, h) {
     function p(t) {
      return t && !(t.getTime && t.getTime() !== t.getTime());
     }
     function f(t) {
      return y(t) ? x(t) ? t : i(t) : n;
     }
     Nn(o, s, a, c), Pn(o, s, a, c, u, l);
     var d, v = c && c.$options && c.$options.timezone;
     if (c.$$parserName = t, c.$parsers.push(function(t) {
      if (c.$isEmpty(t)) return null;
      if (e.test(t)) {
       var r = i(t, d);
       return "UTC" === v && r.setMinutes(r.getMinutes() - r.getTimezoneOffset()), r;
      }
      return n;
     }), c.$formatters.push(function(t) {
      if (t && !x(t)) throw yo("datefmt", "Expected `{0}` to be a date", t);
      if (p(t)) {
       if (d = t, d && "UTC" === v) {
        var e = 6e4 * d.getTimezoneOffset();
        d = new Date(d.getTime() + e);
       }
       return h("date")(t, r, v);
      }
      return d = null, "";
     }), y(a.min) || a.ngMin) {
      var g;
      c.$validators.min = function(t) {
       return !p(t) || m(g) || i(t) >= g;
      }, a.$observe("min", function(t) {
       g = f(t), c.$validate();
      });
     }
     if (y(a.max) || a.ngMax) {
      var b;
      c.$validators.max = function(t) {
       return !p(t) || m(b) || i(t) <= b;
      }, a.$observe("max", function(t) {
       b = f(t), c.$validate();
      });
     }
    };
   }
   function Nn(t, e, i, r) {
    var o = e[0], s = r.$$hasNativeValidators = b(o.validity);
    s && r.$parsers.push(function(t) {
     var i = e.prop(Wn) || {};
     return i.badInput && !i.typeMismatch ? n : t;
    });
   }
   function Rn(t, e, i, r, o, s) {
    if (Nn(t, e, i, r), Pn(t, e, i, r, o, s), r.$$parserName = "number", r.$parsers.push(function(t) {
     return r.$isEmpty(t) ? null : Dr.test(t) ? parseFloat(t) : n;
    }), r.$formatters.push(function(t) {
     if (!r.$isEmpty(t)) {
      if (!_(t)) throw yo("numfmt", "Expected `{0}` to be a number", t);
      t = t.toString();
     }
     return t;
    }), y(i.min) || i.ngMin) {
     var a;
     r.$validators.min = function(t) {
      return r.$isEmpty(t) || m(a) || t >= a;
     }, i.$observe("min", function(t) {
      y(t) && !_(t) && (t = parseFloat(t, 10)), a = _(t) && !isNaN(t) ? t : n, r.$validate();
     });
    }
    if (y(i.max) || i.ngMax) {
     var c;
     r.$validators.max = function(t) {
      return r.$isEmpty(t) || m(c) || c >= t;
     }, i.$observe("max", function(t) {
      y(t) && !_(t) && (t = parseFloat(t, 10)), c = _(t) && !isNaN(t) ? t : n, r.$validate();
     });
    }
   }
   function Hn(t, e, n, i, r, o) {
    Pn(t, e, n, i, r, o), An(i), i.$$parserName = "url", i.$validators.url = function(t, e) {
     var n = t || e;
     return i.$isEmpty(n) || Rr.test(n);
    };
   }
   function Dn(t, e, n, i, r, o) {
    Pn(t, e, n, i, r, o), An(i), i.$$parserName = "email", i.$validators.email = function(t, e) {
     var n = t || e;
     return i.$isEmpty(n) || Hr.test(n);
    };
   }
   function Bn(t, e, n, i) {
    m(n.name) && e.attr("name", u());
    var r = function(t) {
     e[0].checked && i.$setViewValue(n.value, t && t.type);
    };
    e.on("click", r), i.$render = function() {
     var t = n.value;
     e[0].checked = t == i.$viewValue;
    }, n.$observe("value", i.$render);
   }
   function In(t, e, n, r, o) {
    var s;
    if (y(r)) {
     if (s = t(r), !s.constant) throw i("ngModel")("constexpr", "Expected constant expression for `{0}`, but saw `{1}`.", n, r);
     return s(e);
    }
    return o;
   }
   function qn(t, e, n, i, r, o, s, a) {
    var c = In(a, t, "ngTrueValue", n.ngTrueValue, !0), u = In(a, t, "ngFalseValue", n.ngFalseValue, !1), l = function(t) {
     i.$setViewValue(e[0].checked, t && t.type);
    };
    e.on("click", l), i.$render = function() {
     e[0].checked = i.$viewValue;
    }, i.$isEmpty = function(t) {
     return t === !1;
    }, i.$formatters.push(function(t) {
     return D(t, c);
    }), i.$parsers.push(function(t) {
     return t ? c : u;
    });
   }
   function Fn(t, e) {
    return t = "ngClass" + t, [ "$animate", function(n) {
     function i(t, e) {
      var n = [];
      t: for (var i = 0; i < t.length; i++) {
       for (var r = t[i], o = 0; o < e.length; o++) if (r == e[o]) continue t;
       n.push(r);
      }
      return n;
     }
     function r(t) {
      if (li(t)) return t;
      if (w(t)) return t.split(" ");
      if (b(t)) {
       var e = [];
       return o(t, function(t, n) {
        t && (e = e.concat(n.split(" ")));
       }), e;
      }
      return t;
     }
     return {
      restrict: "AC",
      link: function(s, a, c) {
       function u(t) {
        var e = h(t, 1);
        c.$addClass(e);
       }
       function l(t) {
        var e = h(t, -1);
        c.$removeClass(e);
       }
       function h(t, e) {
        var n = a.data("$classCounts") || {}, i = [];
        return o(t, function(t) {
         (e > 0 || n[t]) && (n[t] = (n[t] || 0) + e, n[t] === +(e > 0) && i.push(t));
        }), a.data("$classCounts", n), i.join(" ");
       }
       function p(t, e) {
        var r = i(e, t), o = i(t, e);
        r = h(r, 1), o = h(o, -1), r && r.length && n.addClass(a, r), o && o.length && n.removeClass(a, o);
       }
       function f(t) {
        if (e === !0 || s.$index % 2 === e) {
         var n = r(t || []);
         if (d) {
          if (!D(t, d)) {
           var i = r(d);
           p(i, n);
          }
         } else u(n);
        }
        d = H(t);
       }
       var d;
       s.$watch(c[t], f, !0), c.$observe("class", function() {
        f(s.$eval(c[t]));
       }), "ngClass" !== t && s.$watch("$index", function(n, i) {
        var o = 1 & n;
        if (o !== (1 & i)) {
         var a = r(s.$eval(c[t]));
         o === e ? u(a) : l(a);
        }
       });
      }
     };
    } ];
   }
   function zn(t) {
    function e(t, e, c) {
     e === n ? i("$pending", t, c) : r("$pending", t, c), j(e) ? e ? (h(a.$error, t, c), 
     l(a.$$success, t, c)) : (l(a.$error, t, c), h(a.$$success, t, c)) : (h(a.$error, t, c), 
     h(a.$$success, t, c)), a.$pending ? (o(mo, !0), a.$valid = a.$invalid = n, s("", null)) : (o(mo, !1), 
     a.$valid = Un(a.$error), a.$invalid = !a.$valid, s("", a.$valid));
     var u;
     u = a.$pending && a.$pending[t] ? n : a.$error[t] ? !1 : a.$$success[t] ? !0 : null, 
     s(t, u), p.$setValidity(t, u, a);
    }
    function i(t, e, n) {
     a[t] || (a[t] = {}), l(a[t], e, n);
    }
    function r(t, e, i) {
     a[t] && h(a[t], e, i), Un(a[t]) && (a[t] = n);
    }
    function o(t, e) {
     e && !u[t] ? (f.addClass(c, t), u[t] = !0) : !e && u[t] && (f.removeClass(c, t), 
     u[t] = !1);
    }
    function s(t, e) {
     t = t ? "-" + nt(t, "-") : "", o(lo + t, e === !0), o(ho + t, e === !1);
    }
    var a = t.ctrl, c = t.$element, u = {}, l = t.set, h = t.unset, p = t.parentForm, f = t.$animate;
    u[ho] = !(u[lo] = c.hasClass(lo)), a.$setValidity = e;
   }
   function Un(t) {
    if (t) for (var e in t) return !1;
    return !0;
   }
   var Vn = /^\/(.+)\/([a-z]*)$/, Wn = "validity", Gn = function(t) {
    return w(t) ? t.toLowerCase() : t;
   }, Xn = Object.prototype.hasOwnProperty, Yn = function(t) {
    return w(t) ? t.toUpperCase() : t;
   }, Jn = function(t) {
    return w(t) ? t.replace(/[A-Z]/g, function(t) {
     return String.fromCharCode(32 | t.charCodeAt(0));
    }) : t;
   }, Kn = function(t) {
    return w(t) ? t.replace(/[a-z]/g, function(t) {
     return String.fromCharCode(-33 & t.charCodeAt(0));
    }) : t;
   };
   "i" !== "I".toLowerCase() && (Gn = Jn, Yn = Kn);
   var Qn, Zn, ti, ei, ni = [].slice, ii = [].splice, ri = [].push, oi = Object.prototype.toString, si = i("ng"), ai = t.angular || (t.angular = {}), ci = 0;
   Qn = e.documentMode, d.$inject = [], v.$inject = [];
   var ui, li = Array.isArray, hi = function(t) {
    return w(t) ? t.trim() : t;
   }, pi = function(t) {
    return t.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
   }, fi = function() {
    if (y(fi.isActive_)) return fi.isActive_;
    var t = !(!e.querySelector("[ng-csp]") && !e.querySelector("[data-ng-csp]"));
    if (!t) try {
     new Function("");
    } catch (n) {
     t = !0;
    }
    return fi.isActive_ = t;
   }, di = [ "ng-", "data-ng-", "ng:", "x-ng-" ], vi = /[A-Z]/g, gi = !1, mi = 1, yi = 3, bi = 8, wi = 9, _i = 11, xi = {
    full: "1.3.14",
    major: 1,
    minor: 3,
    dot: 14,
    codeName: "instantaneous-browserification"
   };
   wt.expando = "ng339";
   var $i = wt.cache = {}, ki = 1, Si = function(t, e, n) {
    t.addEventListener(e, n, !1);
   }, Ei = function(t, e, n) {
    t.removeEventListener(e, n, !1);
   };
   wt._data = function(t) {
    return this.cache[t[this.expando]] || {};
   };
   var Ci = /([\:\-\_]+(.))/g, Ti = /^moz([A-Z])/, Ai = {
    mouseleave: "mouseout",
    mouseenter: "mouseover"
   }, ji = i("jqLite"), Pi = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, Li = /<|&#?\w+;/, Oi = /<([\w:]+)/, Mi = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, Ni = {
    option: [ 1, '<select multiple="multiple">', "</select>" ],
    thead: [ 1, "<table>", "</table>" ],
    col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
    tr: [ 2, "<table><tbody>", "</tbody></table>" ],
    td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
    _default: [ 0, "", "" ]
   };
   Ni.optgroup = Ni.option, Ni.tbody = Ni.tfoot = Ni.colgroup = Ni.caption = Ni.thead, 
   Ni.th = Ni.td;
   var Ri = wt.prototype = {
    ready: function(n) {
     function i() {
      r || (r = !0, n());
     }
     var r = !1;
     "complete" === e.readyState ? setTimeout(i) : (this.on("DOMContentLoaded", i), wt(t).on("load", i));
    },
    toString: function() {
     var t = [];
     return o(this, function(e) {
      t.push("" + e);
     }), "[" + t.join(", ") + "]";
    },
    eq: function(t) {
     return Zn(t >= 0 ? this[t] : this[this.length + t]);
    },
    length: 0,
    push: ri,
    sort: [].sort,
    splice: [].splice
   }, Hi = {};
   o("multiple,selected,checked,disabled,readOnly,required,open".split(","), function(t) {
    Hi[Gn(t)] = t;
   });
   var Di = {};
   o("input,select,option,textarea,button,form,details".split(","), function(t) {
    Di[t] = !0;
   });
   var Bi = {
    ngMinlength: "minlength",
    ngMaxlength: "maxlength",
    ngMin: "min",
    ngMax: "max",
    ngPattern: "pattern"
   };
   o({
    data: Et,
    removeData: kt
   }, function(t, e) {
    wt[e] = t;
   }), o({
    data: Et,
    inheritedData: Lt,
    scope: function(t) {
     return Zn.data(t, "$scope") || Lt(t.parentNode || t, [ "$isolateScope", "$scope" ]);
    },
    isolateScope: function(t) {
     return Zn.data(t, "$isolateScope") || Zn.data(t, "$isolateScopeNoTemplate");
    },
    controller: Pt,
    injector: function(t) {
     return Lt(t, "$injector");
    },
    removeAttr: function(t, e) {
     t.removeAttribute(e);
    },
    hasClass: Ct,
    css: function(t, e, n) {
     return e = vt(e), y(n) ? void (t.style[e] = n) : t.style[e];
    },
    attr: function(t, e, i) {
     var r = Gn(e);
     if (Hi[r]) {
      if (!y(i)) return t[e] || (t.attributes.getNamedItem(e) || d).specified ? r : n;
      i ? (t[e] = !0, t.setAttribute(e, r)) : (t[e] = !1, t.removeAttribute(r));
     } else if (y(i)) t.setAttribute(e, i); else if (t.getAttribute) {
      var o = t.getAttribute(e, 2);
      return null === o ? n : o;
     }
    },
    prop: function(t, e, n) {
     return y(n) ? void (t[e] = n) : t[e];
    },
    text: function() {
     function t(t, e) {
      if (m(e)) {
       var n = t.nodeType;
       return n === mi || n === yi ? t.textContent : "";
      }
      t.textContent = e;
     }
     return t.$dv = "", t;
    }(),
    val: function(t, e) {
     if (m(e)) {
      if (t.multiple && "select" === M(t)) {
       var n = [];
       return o(t.options, function(t) {
        t.selected && n.push(t.value || t.text);
       }), 0 === n.length ? null : n;
      }
      return t.value;
     }
     t.value = e;
    },
    html: function(t, e) {
     return m(e) ? t.innerHTML : (xt(t, !0), void (t.innerHTML = e));
    },
    empty: Ot
   }, function(t, e) {
    wt.prototype[e] = function(e, i) {
     var r, o, s = this.length;
     if (t !== Ot && (2 == t.length && t !== Ct && t !== Pt ? e : i) === n) {
      if (b(e)) {
       for (r = 0; s > r; r++) if (t === Et) t(this[r], e); else for (o in e) t(this[r], o, e[o]);
       return this;
      }
      for (var a = t.$dv, c = a === n ? Math.min(s, 1) : s, u = 0; c > u; u++) {
       var l = t(this[u], e, i);
       a = a ? a + l : l;
      }
      return a;
     }
     for (r = 0; s > r; r++) t(this[r], e, i);
     return this;
    };
   }), o({
    removeData: kt,
    on: function Vo(t, e, n, i) {
     if (y(i)) throw ji("onargs", "jqLite#on() does not support the `selector` or `eventData` parameters");
     if (mt(t)) {
      var r = St(t, !0), o = r.events, s = r.handle;
      s || (s = r.handle = Dt(t, o));
      for (var a = e.indexOf(" ") >= 0 ? e.split(" ") : [ e ], c = a.length; c--; ) {
       e = a[c];
       var u = o[e];
       u || (o[e] = [], "mouseenter" === e || "mouseleave" === e ? Vo(t, Ai[e], function(t) {
        var n = this, i = t.relatedTarget;
        (!i || i !== n && !n.contains(i)) && s(t, e);
       }) : "$destroy" !== e && Si(t, e, s), u = o[e]), u.push(n);
      }
     }
    },
    off: $t,
    one: function(t, e, n) {
     t = Zn(t), t.on(e, function i() {
      t.off(e, n), t.off(e, i);
     }), t.on(e, n);
    },
    replaceWith: function(t, e) {
     var n, i = t.parentNode;
     xt(t), o(new wt(e), function(e) {
      n ? i.insertBefore(e, n.nextSibling) : i.replaceChild(e, t), n = e;
     });
    },
    children: function(t) {
     var e = [];
     return o(t.childNodes, function(t) {
      t.nodeType === mi && e.push(t);
     }), e;
    },
    contents: function(t) {
     return t.contentDocument || t.childNodes || [];
    },
    append: function(t, e) {
     var n = t.nodeType;
     if (n === mi || n === _i) {
      e = new wt(e);
      for (var i = 0, r = e.length; r > i; i++) {
       var o = e[i];
       t.appendChild(o);
      }
     }
    },
    prepend: function(t, e) {
     if (t.nodeType === mi) {
      var n = t.firstChild;
      o(new wt(e), function(e) {
       t.insertBefore(e, n);
      });
     }
    },
    wrap: function(t, e) {
     e = Zn(e).eq(0).clone()[0];
     var n = t.parentNode;
     n && n.replaceChild(e, t), e.appendChild(t);
    },
    remove: Mt,
    detach: function(t) {
     Mt(t, !0);
    },
    after: function(t, e) {
     var n = t, i = t.parentNode;
     e = new wt(e);
     for (var r = 0, o = e.length; o > r; r++) {
      var s = e[r];
      i.insertBefore(s, n.nextSibling), n = s;
     }
    },
    addClass: At,
    removeClass: Tt,
    toggleClass: function(t, e, n) {
     e && o(e.split(" "), function(e) {
      var i = n;
      m(i) && (i = !Ct(t, e)), (i ? At : Tt)(t, e);
     });
    },
    parent: function(t) {
     var e = t.parentNode;
     return e && e.nodeType !== _i ? e : null;
    },
    next: function(t) {
     return t.nextElementSibling;
    },
    find: function(t, e) {
     return t.getElementsByTagName ? t.getElementsByTagName(e) : [];
    },
    clone: _t,
    triggerHandler: function(t, e, n) {
     var i, r, s, a = e.type || e, c = St(t), u = c && c.events, l = u && u[a];
     l && (i = {
      preventDefault: function() {
       this.defaultPrevented = !0;
      },
      isDefaultPrevented: function() {
       return this.defaultPrevented === !0;
      },
      stopImmediatePropagation: function() {
       this.immediatePropagationStopped = !0;
      },
      isImmediatePropagationStopped: function() {
       return this.immediatePropagationStopped === !0;
      },
      stopPropagation: d,
      type: a,
      target: t
     }, e.type && (i = h(i, e)), r = H(l), s = n ? [ i ].concat(n) : [ i ], o(r, function(e) {
      i.isImmediatePropagationStopped() || e.apply(t, s);
     }));
    }
   }, function(t, e) {
    wt.prototype[e] = function(e, n, i) {
     for (var r, o = 0, s = this.length; s > o; o++) m(r) ? (r = t(this[o], e, n, i), 
     y(r) && (r = Zn(r))) : jt(r, t(this[o], e, n, i));
     return y(r) ? r : this;
    }, wt.prototype.bind = wt.prototype.on, wt.prototype.unbind = wt.prototype.off;
   }), qt.prototype = {
    put: function(t, e) {
     this[It(t, this.nextUid)] = e;
    },
    get: function(t) {
     return this[It(t, this.nextUid)];
    },
    remove: function(t) {
     var e = this[t = It(t, this.nextUid)];
     return delete this[t], e;
    }
   };
   var Ii = /^function\s*[^\(]*\(\s*([^\)]*)\)/m, qi = /,/, Fi = /^\s*(_?)(\S+?)\1\s*$/, zi = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm, Ui = i("$injector");
   Ut.$$annotate = zt;
   var Vi = i("$animate"), Wi = [ "$provide", function(t) {
    this.$$selectors = {}, this.register = function(e, n) {
     var i = e + "-animation";
     if (e && "." != e.charAt(0)) throw Vi("notcsel", "Expecting class selector starting with '.' got '{0}'.", e);
     this.$$selectors[e.substr(1)] = i, t.factory(i, n);
    }, this.classNameFilter = function(t) {
     return 1 === arguments.length && (this.$$classNameFilter = t instanceof RegExp ? t : null), 
     this.$$classNameFilter;
    }, this.$get = [ "$$q", "$$asyncCallback", "$rootScope", function(t, e, n) {
     function i(e) {
      var i, r = t.defer();
      return r.promise.$$cancelFn = function() {
       i && i();
      }, n.$$postDigest(function() {
       i = e(function() {
        r.resolve();
       });
      }), r.promise;
     }
     function r(t, e) {
      var n = [], i = [], r = ut();
      return o((t.attr("class") || "").split(/\s+/), function(t) {
       r[t] = !0;
      }), o(e, function(t, e) {
       var o = r[e];
       t === !1 && o ? i.push(e) : t !== !0 || o || n.push(e);
      }), n.length + i.length > 0 && [ n.length ? n : null, i.length ? i : null ];
     }
     function s(t, e, n) {
      for (var i = 0, r = e.length; r > i; ++i) {
       var o = e[i];
       t[o] = n;
      }
     }
     function a() {
      return u || (u = t.defer(), e(function() {
       u.resolve(), u = null;
      })), u.promise;
     }
     function c(t, e) {
      if (ai.isObject(e)) {
       var n = h(e.from || {}, e.to || {});
       t.css(n);
      }
     }
     var u;
     return {
      animate: function(t, e, n) {
       return c(t, {
        from: e,
        to: n
       }), a();
      },
      enter: function(t, e, n, i) {
       return c(t, i), n ? n.after(t) : e.prepend(t), a();
      },
      leave: function(t) {
       return t.remove(), a();
      },
      move: function(t, e, n, i) {
       return this.enter(t, e, n, i);
      },
      addClass: function(t, e, n) {
       return this.setClass(t, e, [], n);
      },
      $$addClassImmediately: function(t, e, n) {
       return t = Zn(t), e = w(e) ? e : li(e) ? e.join(" ") : "", o(t, function(t) {
        At(t, e);
       }), c(t, n), a();
      },
      removeClass: function(t, e, n) {
       return this.setClass(t, [], e, n);
      },
      $$removeClassImmediately: function(t, e, n) {
       return t = Zn(t), e = w(e) ? e : li(e) ? e.join(" ") : "", o(t, function(t) {
        Tt(t, e);
       }), c(t, n), a();
      },
      setClass: function(t, e, n, o) {
       var a = this, c = "$$animateClasses", u = !1;
       t = Zn(t);
       var l = t.data(c);
       l ? o && l.options && (l.options = ai.extend(l.options || {}, o)) : (l = {
        classes: {},
        options: o
       }, u = !0);
       var h = l.classes;
       return e = li(e) ? e : e.split(" "), n = li(n) ? n : n.split(" "), s(h, e, !0), 
       s(h, n, !1), u && (l.promise = i(function(e) {
        var n = t.data(c);
        if (t.removeData(c), n) {
         var i = r(t, n.classes);
         i && a.$$setClassImmediately(t, i[0], i[1], n.options);
        }
        e();
       }), t.data(c, l)), l.promise;
      },
      $$setClassImmediately: function(t, e, n, i) {
       return e && this.$$addClassImmediately(t, e), n && this.$$removeClassImmediately(t, n), 
       c(t, i), a();
      },
      enabled: d,
      cancel: d
     };
    } ];
   } ], Gi = i("$compile");
   Kt.$inject = [ "$provide", "$$sanitizeUriProvider" ];
   var Xi = /^((?:x|data)[\:\-_])/i, Yi = i("$controller"), Ji = "application/json", Ki = {
    "Content-Type": Ji + ";charset=utf-8"
   }, Qi = /^\[|^\{(?!\{)/, Zi = {
    "[": /]$/,
    "{": /}$/
   }, tr = /^\)\]\}',?\n/, er = i("$interpolate"), nr = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, ir = {
    http: 80,
    https: 443,
    ftp: 21
   }, rr = i("$location"), or = {
    $$html5: !1,
    $$replace: !1,
    absUrl: Te("$$absUrl"),
    url: function(t) {
     if (m(t)) return this.$$url;
     var e = nr.exec(t);
     return (e[1] || "" === t) && this.path(decodeURIComponent(e[1])), (e[2] || e[1] || "" === t) && this.search(e[3] || ""), 
     this.hash(e[5] || ""), this;
    },
    protocol: Te("$$protocol"),
    host: Te("$$host"),
    port: Te("$$port"),
    path: Ae("$$path", function(t) {
     return t = null !== t ? t.toString() : "", "/" == t.charAt(0) ? t : "/" + t;
    }),
    search: function(t, e) {
     switch (arguments.length) {
     case 0:
      return this.$$search;

     case 1:
      if (w(t) || _(t)) t = t.toString(), this.$$search = G(t); else {
       if (!b(t)) throw rr("isrcharg", "The first argument of the `$location#search()` call must be a string or an object.");
       t = R(t, {}), o(t, function(e, n) {
        null == e && delete t[n];
       }), this.$$search = t;
      }
      break;

     default:
      m(e) || null === e ? delete this.$$search[t] : this.$$search[t] = e;
     }
     return this.$$compose(), this;
    },
    hash: Ae("$$hash", function(t) {
     return null !== t ? t.toString() : "";
    }),
    replace: function() {
     return this.$$replace = !0, this;
    }
   };
   o([ Ce, Ee, Se ], function(t) {
    t.prototype = Object.create(or), t.prototype.state = function(e) {
     if (!arguments.length) return this.$$state;
     if (t !== Se || !this.$$html5) throw rr("nostate", "History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");
     return this.$$state = m(e) ? null : e, this;
    };
   });
   var sr = i("$parse"), ar = Function.prototype.call, cr = Function.prototype.apply, ur = Function.prototype.bind, lr = ut();
   o({
    "null": function() {
     return null;
    },
    "true": function() {
     return !0;
    },
    "false": function() {
     return !1;
    },
    undefined: function() {}
   }, function(t, e) {
    t.constant = t.literal = t.sharedGetter = !0, lr[e] = t;
   }), lr["this"] = function(t) {
    return t;
   }, lr["this"].sharedGetter = !0;
   var hr = h(ut(), {
    "+": function(t, e, i, r) {
     return i = i(t, e), r = r(t, e), y(i) ? y(r) ? i + r : i : y(r) ? r : n;
    },
    "-": function(t, e, n, i) {
     return n = n(t, e), i = i(t, e), (y(n) ? n : 0) - (y(i) ? i : 0);
    },
    "*": function(t, e, n, i) {
     return n(t, e) * i(t, e);
    },
    "/": function(t, e, n, i) {
     return n(t, e) / i(t, e);
    },
    "%": function(t, e, n, i) {
     return n(t, e) % i(t, e);
    },
    "===": function(t, e, n, i) {
     return n(t, e) === i(t, e);
    },
    "!==": function(t, e, n, i) {
     return n(t, e) !== i(t, e);
    },
    "==": function(t, e, n, i) {
     return n(t, e) == i(t, e);
    },
    "!=": function(t, e, n, i) {
     return n(t, e) != i(t, e);
    },
    "<": function(t, e, n, i) {
     return n(t, e) < i(t, e);
    },
    ">": function(t, e, n, i) {
     return n(t, e) > i(t, e);
    },
    "<=": function(t, e, n, i) {
     return n(t, e) <= i(t, e);
    },
    ">=": function(t, e, n, i) {
     return n(t, e) >= i(t, e);
    },
    "&&": function(t, e, n, i) {
     return n(t, e) && i(t, e);
    },
    "||": function(t, e, n, i) {
     return n(t, e) || i(t, e);
    },
    "!": function(t, e, n) {
     return !n(t, e);
    },
    "=": !0,
    "|": !0
   }), pr = {
    n: "\n",
    f: "\f",
    r: "\r",
    t: "	",
    v: "",
    "'": "'",
    '"': '"'
   }, fr = function(t) {
    this.options = t;
   };
   fr.prototype = {
    constructor: fr,
    lex: function(t) {
     for (this.text = t, this.index = 0, this.tokens = []; this.index < this.text.length; ) {
      var e = this.text.charAt(this.index);
      if ('"' === e || "'" === e) this.readString(e); else if (this.isNumber(e) || "." === e && this.isNumber(this.peek())) this.readNumber(); else if (this.isIdent(e)) this.readIdent(); else if (this.is(e, "(){}[].,;:?")) this.tokens.push({
       index: this.index,
       text: e
      }), this.index++; else if (this.isWhitespace(e)) this.index++; else {
       var n = e + this.peek(), i = n + this.peek(2), r = hr[e], o = hr[n], s = hr[i];
       if (r || o || s) {
        var a = s ? i : o ? n : e;
        this.tokens.push({
         index: this.index,
         text: a,
         operator: !0
        }), this.index += a.length;
       } else this.throwError("Unexpected next character ", this.index, this.index + 1);
      }
     }
     return this.tokens;
    },
    is: function(t, e) {
     return -1 !== e.indexOf(t);
    },
    peek: function(t) {
     var e = t || 1;
     return this.index + e < this.text.length ? this.text.charAt(this.index + e) : !1;
    },
    isNumber: function(t) {
     return t >= "0" && "9" >= t && "string" == typeof t;
    },
    isWhitespace: function(t) {
     return " " === t || "\r" === t || "	" === t || "\n" === t || "" === t || " " === t;
    },
    isIdent: function(t) {
     return t >= "a" && "z" >= t || t >= "A" && "Z" >= t || "_" === t || "$" === t;
    },
    isExpOperator: function(t) {
     return "-" === t || "+" === t || this.isNumber(t);
    },
    throwError: function(t, e, n) {
     n = n || this.index;
     var i = y(e) ? "s " + e + "-" + this.index + " [" + this.text.substring(e, n) + "]" : " " + n;
     throw sr("lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", t, i, this.text);
    },
    readNumber: function() {
     for (var t = "", e = this.index; this.index < this.text.length; ) {
      var n = Gn(this.text.charAt(this.index));
      if ("." == n || this.isNumber(n)) t += n; else {
       var i = this.peek();
       if ("e" == n && this.isExpOperator(i)) t += n; else if (this.isExpOperator(n) && i && this.isNumber(i) && "e" == t.charAt(t.length - 1)) t += n; else {
        if (!this.isExpOperator(n) || i && this.isNumber(i) || "e" != t.charAt(t.length - 1)) break;
        this.throwError("Invalid exponent");
       }
      }
      this.index++;
     }
     this.tokens.push({
      index: e,
      text: t,
      constant: !0,
      value: Number(t)
     });
    },
    readIdent: function() {
     for (var t = this.index; this.index < this.text.length; ) {
      var e = this.text.charAt(this.index);
      if (!this.isIdent(e) && !this.isNumber(e)) break;
      this.index++;
     }
     this.tokens.push({
      index: t,
      text: this.text.slice(t, this.index),
      identifier: !0
     });
    },
    readString: function(t) {
     var e = this.index;
     this.index++;
     for (var n = "", i = t, r = !1; this.index < this.text.length; ) {
      var o = this.text.charAt(this.index);
      if (i += o, r) {
       if ("u" === o) {
        var s = this.text.substring(this.index + 1, this.index + 5);
        s.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + s + "]"), 
        this.index += 4, n += String.fromCharCode(parseInt(s, 16));
       } else {
        var a = pr[o];
        n += a || o;
       }
       r = !1;
      } else if ("\\" === o) r = !0; else {
       if (o === t) return this.index++, void this.tokens.push({
        index: e,
        text: i,
        constant: !0,
        value: n
       });
       n += o;
      }
      this.index++;
     }
     this.throwError("Unterminated quote", e);
    }
   };
   var dr = function(t, e, n) {
    this.lexer = t, this.$filter = e, this.options = n;
   };
   dr.ZERO = h(function() {
    return 0;
   }, {
    sharedGetter: !0,
    constant: !0
   }), dr.prototype = {
    constructor: dr,
    parse: function(t) {
     this.text = t, this.tokens = this.lexer.lex(t);
     var e = this.statements();
     return 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]), 
     e.literal = !!e.literal, e.constant = !!e.constant, e;
    },
    primary: function() {
     var t;
     this.expect("(") ? (t = this.filterChain(), this.consume(")")) : this.expect("[") ? t = this.arrayDeclaration() : this.expect("{") ? t = this.object() : this.peek().identifier && this.peek().text in lr ? t = lr[this.consume().text] : this.peek().identifier ? t = this.identifier() : this.peek().constant ? t = this.constant() : this.throwError("not a primary expression", this.peek());
     for (var e, n; e = this.expect("(", "[", "."); ) "(" === e.text ? (t = this.functionCall(t, n), 
     n = null) : "[" === e.text ? (n = t, t = this.objectIndex(t)) : "." === e.text ? (n = t, 
     t = this.fieldAccess(t)) : this.throwError("IMPOSSIBLE");
     return t;
    },
    throwError: function(t, e) {
     throw sr("syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", e.text, t, e.index + 1, this.text, this.text.substring(e.index));
    },
    peekToken: function() {
     if (0 === this.tokens.length) throw sr("ueoe", "Unexpected end of expression: {0}", this.text);
     return this.tokens[0];
    },
    peek: function(t, e, n, i) {
     return this.peekAhead(0, t, e, n, i);
    },
    peekAhead: function(t, e, n, i, r) {
     if (this.tokens.length > t) {
      var o = this.tokens[t], s = o.text;
      if (s === e || s === n || s === i || s === r || !e && !n && !i && !r) return o;
     }
     return !1;
    },
    expect: function(t, e, n, i) {
     var r = this.peek(t, e, n, i);
     return r ? (this.tokens.shift(), r) : !1;
    },
    consume: function(t) {
     if (0 === this.tokens.length) throw sr("ueoe", "Unexpected end of expression: {0}", this.text);
     var e = this.expect(t);
     return e || this.throwError("is unexpected, expecting [" + t + "]", this.peek()), 
     e;
    },
    unaryFn: function(t, e) {
     var n = hr[t];
     return h(function(t, i) {
      return n(t, i, e);
     }, {
      constant: e.constant,
      inputs: [ e ]
     });
    },
    binaryFn: function(t, e, n, i) {
     var r = hr[e];
     return h(function(e, i) {
      return r(e, i, t, n);
     }, {
      constant: t.constant && n.constant,
      inputs: !i && [ t, n ]
     });
    },
    identifier: function() {
     for (var t = this.consume().text; this.peek(".") && this.peekAhead(1).identifier && !this.peekAhead(2, "("); ) t += this.consume().text + this.consume().text;
     return Ie(t, this.options, this.text);
    },
    constant: function() {
     var t = this.consume().value;
     return h(function() {
      return t;
     }, {
      constant: !0,
      literal: !0
     });
    },
    statements: function() {
     for (var t = []; ;) if (this.tokens.length > 0 && !this.peek("}", ")", ";", "]") && t.push(this.filterChain()), 
     !this.expect(";")) return 1 === t.length ? t[0] : function(e, n) {
      for (var i, r = 0, o = t.length; o > r; r++) i = t[r](e, n);
      return i;
     };
    },
    filterChain: function() {
     for (var t, e = this.expression(); t = this.expect("|"); ) e = this.filter(e);
     return e;
    },
    filter: function(t) {
     var e, i, r = this.$filter(this.consume().text);
     if (this.peek(":")) for (e = [], i = []; this.expect(":"); ) e.push(this.expression());
     var o = [ t ].concat(e || []);
     return h(function(o, s) {
      var a = t(o, s);
      if (i) {
       i[0] = a;
       for (var c = e.length; c--; ) i[c + 1] = e[c](o, s);
       return r.apply(n, i);
      }
      return r(a);
     }, {
      constant: !r.$stateful && o.every(Ne),
      inputs: !r.$stateful && o
     });
    },
    expression: function() {
     return this.assignment();
    },
    assignment: function() {
     var t, e, n = this.ternary();
     return (e = this.expect("=")) ? (n.assign || this.throwError("implies assignment but [" + this.text.substring(0, e.index) + "] can not be assigned to", e), 
     t = this.ternary(), h(function(e, i) {
      return n.assign(e, t(e, i), i);
     }, {
      inputs: [ n, t ]
     })) : n;
    },
    ternary: function() {
     var t, e, n = this.logicalOR();
     if ((e = this.expect("?")) && (t = this.assignment(), this.consume(":"))) {
      var i = this.assignment();
      return h(function(e, r) {
       return n(e, r) ? t(e, r) : i(e, r);
      }, {
       constant: n.constant && t.constant && i.constant
      });
     }
     return n;
    },
    logicalOR: function() {
     for (var t, e = this.logicalAND(); t = this.expect("||"); ) e = this.binaryFn(e, t.text, this.logicalAND(), !0);
     return e;
    },
    logicalAND: function() {
     for (var t, e = this.equality(); t = this.expect("&&"); ) e = this.binaryFn(e, t.text, this.equality(), !0);
     return e;
    },
    equality: function() {
     for (var t, e = this.relational(); t = this.expect("==", "!=", "===", "!=="); ) e = this.binaryFn(e, t.text, this.relational());
     return e;
    },
    relational: function() {
     for (var t, e = this.additive(); t = this.expect("<", ">", "<=", ">="); ) e = this.binaryFn(e, t.text, this.additive());
     return e;
    },
    additive: function() {
     for (var t, e = this.multiplicative(); t = this.expect("+", "-"); ) e = this.binaryFn(e, t.text, this.multiplicative());
     return e;
    },
    multiplicative: function() {
     for (var t, e = this.unary(); t = this.expect("*", "/", "%"); ) e = this.binaryFn(e, t.text, this.unary());
     return e;
    },
    unary: function() {
     var t;
     return this.expect("+") ? this.primary() : (t = this.expect("-")) ? this.binaryFn(dr.ZERO, t.text, this.unary()) : (t = this.expect("!")) ? this.unaryFn(t.text, this.unary()) : this.primary();
    },
    fieldAccess: function(t) {
     var e = this.identifier();
     return h(function(i, r, o) {
      var s = o || t(i, r);
      return null == s ? n : e(s);
     }, {
      assign: function(n, i, r) {
       var o = t(n, r);
       return o || t.assign(n, o = {}, r), e.assign(o, i);
      }
     });
    },
    objectIndex: function(t) {
     var e = this.text, i = this.expression();
     return this.consume("]"), h(function(r, o) {
      var s, a = t(r, o), c = i(r, o);
      return Le(c, e), a ? s = Oe(a[c], e) : n;
     }, {
      assign: function(n, r, o) {
       var s = Le(i(n, o), e), a = Oe(t(n, o), e);
       return a || t.assign(n, a = {}, o), a[s] = r;
      }
     });
    },
    functionCall: function(t, e) {
     var i = [];
     if (")" !== this.peekToken().text) do i.push(this.expression()); while (this.expect(","));
     this.consume(")");
     var r = this.text, o = i.length ? [] : null;
     return function(s, a) {
      var c = e ? e(s, a) : y(e) ? n : s, u = t(s, a, c) || d;
      if (o) for (var l = i.length; l--; ) o[l] = Oe(i[l](s, a), r);
      Oe(c, r), Me(u, r);
      var h = u.apply ? u.apply(c, o) : u(o[0], o[1], o[2], o[3], o[4]);
      return o && (o.length = 0), Oe(h, r);
     };
    },
    arrayDeclaration: function() {
     var t = [];
     if ("]" !== this.peekToken().text) do {
      if (this.peek("]")) break;
      t.push(this.expression());
     } while (this.expect(","));
     return this.consume("]"), h(function(e, n) {
      for (var i = [], r = 0, o = t.length; o > r; r++) i.push(t[r](e, n));
      return i;
     }, {
      literal: !0,
      constant: t.every(Ne),
      inputs: t
     });
    },
    object: function() {
     var t = [], e = [];
     if ("}" !== this.peekToken().text) do {
      if (this.peek("}")) break;
      var n = this.consume();
      n.constant ? t.push(n.value) : n.identifier ? t.push(n.text) : this.throwError("invalid key", n), 
      this.consume(":"), e.push(this.expression());
     } while (this.expect(","));
     return this.consume("}"), h(function(n, i) {
      for (var r = {}, o = 0, s = e.length; s > o; o++) r[t[o]] = e[o](n, i);
      return r;
     }, {
      literal: !0,
      constant: e.every(Ne),
      inputs: e
     });
    }
   };
   var vr = ut(), gr = ut(), mr = Object.prototype.valueOf, yr = i("$sce"), br = {
    HTML: "html",
    CSS: "css",
    URL: "url",
    RESOURCE_URL: "resourceUrl",
    JS: "js"
   }, Gi = i("$compile"), wr = e.createElement("a"), _r = rn(t.location.href);
   an.$inject = [ "$provide" ], hn.$inject = [ "$locale" ], pn.$inject = [ "$locale" ];
   var xr = ".", $r = {
    yyyy: vn("FullYear", 4),
    yy: vn("FullYear", 2, 0, !0),
    y: vn("FullYear", 1),
    MMMM: gn("Month"),
    MMM: gn("Month", !0),
    MM: vn("Month", 2, 1),
    M: vn("Month", 1, 1),
    dd: vn("Date", 2),
    d: vn("Date", 1),
    HH: vn("Hours", 2),
    H: vn("Hours", 1),
    hh: vn("Hours", 2, -12),
    h: vn("Hours", 1, -12),
    mm: vn("Minutes", 2),
    m: vn("Minutes", 1),
    ss: vn("Seconds", 2),
    s: vn("Seconds", 1),
    sss: vn("Milliseconds", 3),
    EEEE: gn("Day"),
    EEE: gn("Day", !0),
    a: _n,
    Z: mn,
    ww: wn(2),
    w: wn(1)
   }, kr = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, Sr = /^\-?\d+$/;
   xn.$inject = [ "$locale" ];
   var Er = g(Gn), Cr = g(Yn);
   Sn.$inject = [ "$parse" ];
   var Tr = g({
    restrict: "E",
    compile: function(t, e) {
     return e.href || e.xlinkHref || e.name ? void 0 : function(t, e) {
      if ("a" === e[0].nodeName.toLowerCase()) {
       var n = "[object SVGAnimatedString]" === oi.call(e.prop("href")) ? "xlink:href" : "href";
       e.on("click", function(t) {
        e.attr(n) || t.preventDefault();
       });
      }
     };
    }
   }), Ar = {};
   o(Hi, function(t, e) {
    if ("multiple" != t) {
     var n = Qt("ng-" + e);
     Ar[n] = function() {
      return {
       restrict: "A",
       priority: 100,
       link: function(t, i, r) {
        t.$watch(r[n], function(t) {
         r.$set(e, !!t);
        });
       }
      };
     };
    }
   }), o(Bi, function(t, e) {
    Ar[e] = function() {
     return {
      priority: 100,
      link: function(t, n, i) {
       if ("ngPattern" === e && "/" == i.ngPattern.charAt(0)) {
        var r = i.ngPattern.match(Vn);
        if (r) return void i.$set("ngPattern", new RegExp(r[1], r[2]));
       }
       t.$watch(i[e], function(t) {
        i.$set(e, t);
       });
      }
     };
    };
   }), o([ "src", "srcset", "href" ], function(t) {
    var e = Qt("ng-" + t);
    Ar[e] = function() {
     return {
      priority: 99,
      link: function(n, i, r) {
       var o = t, s = t;
       "href" === t && "[object SVGAnimatedString]" === oi.call(i.prop("href")) && (s = "xlinkHref", 
       r.$attr[s] = "xlink:href", o = null), r.$observe(e, function(e) {
        return e ? (r.$set(s, e), void (Qn && o && i.prop(o, r[s]))) : void ("href" === t && r.$set(s, null));
       });
      }
     };
    };
   });
   var jr = {
    $addControl: d,
    $$renameControl: Cn,
    $removeControl: d,
    $setValidity: d,
    $setDirty: d,
    $setPristine: d,
    $setSubmitted: d
   }, Pr = "ng-submitted";
   Tn.$inject = [ "$element", "$attrs", "$scope", "$animate", "$interpolate" ];
   var Lr = function(t) {
    return [ "$timeout", function(e) {
     var i = {
      name: "form",
      restrict: t ? "EAC" : "E",
      controller: Tn,
      compile: function(t) {
       return t.addClass(po).addClass(lo), {
        pre: function(t, i, r, o) {
         if (!("action" in r)) {
          var s = function(e) {
           t.$apply(function() {
            o.$commitViewValue(), o.$setSubmitted();
           }), e.preventDefault();
          };
          Si(i[0], "submit", s), i.on("$destroy", function() {
           e(function() {
            Ei(i[0], "submit", s);
           }, 0, !1);
          });
         }
         var a = o.$$parentForm, c = o.$name;
         c && (Re(t, null, c, o, c), r.$observe(r.name ? "name" : "ngForm", function(e) {
          c !== e && (Re(t, null, c, n, c), c = e, Re(t, null, c, o, c), a.$$renameControl(o, c));
         })), i.on("$destroy", function() {
          a.$removeControl(o), c && Re(t, null, c, n, c), h(o, jr);
         });
        }
       };
      }
     };
     return i;
    } ];
   }, Or = Lr(), Mr = Lr(!0), Nr = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, Rr = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, Hr = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i, Dr = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/, Br = /^(\d{4})-(\d{2})-(\d{2})$/, Ir = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, qr = /^(\d{4})-W(\d\d)$/, Fr = /^(\d{4})-(\d\d)$/, zr = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, Ur = {
    text: jn,
    date: Mn("date", Br, On(Br, [ "yyyy", "MM", "dd" ]), "yyyy-MM-dd"),
    "datetime-local": Mn("datetimelocal", Ir, On(Ir, [ "yyyy", "MM", "dd", "HH", "mm", "ss", "sss" ]), "yyyy-MM-ddTHH:mm:ss.sss"),
    time: Mn("time", zr, On(zr, [ "HH", "mm", "ss", "sss" ]), "HH:mm:ss.sss"),
    week: Mn("week", qr, Ln, "yyyy-Www"),
    month: Mn("month", Fr, On(Fr, [ "yyyy", "MM" ]), "yyyy-MM"),
    number: Rn,
    url: Hn,
    email: Dn,
    radio: Bn,
    checkbox: qn,
    hidden: d,
    button: d,
    submit: d,
    reset: d,
    file: d
   }, Vr = [ "$browser", "$sniffer", "$filter", "$parse", function(t, e, n, i) {
    return {
     restrict: "E",
     require: [ "?ngModel" ],
     link: {
      pre: function(r, o, s, a) {
       a[0] && (Ur[Gn(s.type)] || Ur.text)(r, o, s, a[0], e, t, n, i);
      }
     }
    };
   } ], Wr = /^(true|false|\d+)$/, Gr = function() {
    return {
     restrict: "A",
     priority: 100,
     compile: function(t, e) {
      return Wr.test(e.ngValue) ? function(t, e, n) {
       n.$set("value", t.$eval(n.ngValue));
      } : function(t, e, n) {
       t.$watch(n.ngValue, function(t) {
        n.$set("value", t);
       });
      };
     }
    };
   }, Xr = [ "$compile", function(t) {
    return {
     restrict: "AC",
     compile: function(e) {
      return t.$$addBindingClass(e), function(e, i, r) {
       t.$$addBindingInfo(i, r.ngBind), i = i[0], e.$watch(r.ngBind, function(t) {
        i.textContent = t === n ? "" : t;
       });
      };
     }
    };
   } ], Yr = [ "$interpolate", "$compile", function(t, e) {
    return {
     compile: function(i) {
      return e.$$addBindingClass(i), function(i, r, o) {
       var s = t(r.attr(o.$attr.ngBindTemplate));
       e.$$addBindingInfo(r, s.expressions), r = r[0], o.$observe("ngBindTemplate", function(t) {
        r.textContent = t === n ? "" : t;
       });
      };
     }
    };
   } ], Jr = [ "$sce", "$parse", "$compile", function(t, e, n) {
    return {
     restrict: "A",
     compile: function(i, r) {
      var o = e(r.ngBindHtml), s = e(r.ngBindHtml, function(t) {
       return (t || "").toString();
      });
      return n.$$addBindingClass(i), function(e, i, r) {
       n.$$addBindingInfo(i, r.ngBindHtml), e.$watch(s, function() {
        i.html(t.getTrustedHtml(o(e)) || "");
       });
      };
     }
    };
   } ], Kr = g({
    restrict: "A",
    require: "ngModel",
    link: function(t, e, n, i) {
     i.$viewChangeListeners.push(function() {
      t.$eval(n.ngChange);
     });
    }
   }), Qr = Fn("", !0), Zr = Fn("Odd", 0), to = Fn("Even", 1), eo = En({
    compile: function(t, e) {
     e.$set("ngCloak", n), t.removeClass("ng-cloak");
    }
   }), no = [ function() {
    return {
     restrict: "A",
     scope: !0,
     controller: "@",
     priority: 500
    };
   } ], io = {}, ro = {
    blur: !0,
    focus: !0
   };
   o("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function(t) {
    var e = Qt("ng-" + t);
    io[e] = [ "$parse", "$rootScope", function(n, i) {
     return {
      restrict: "A",
      compile: function(r, o) {
       var s = n(o[e], null, !0);
       return function(e, n) {
        n.on(t, function(n) {
         var r = function() {
          s(e, {
           $event: n
          });
         };
         ro[t] && i.$$phase ? e.$evalAsync(r) : e.$apply(r);
        });
       };
      }
     };
    } ];
   });
   var oo = [ "$animate", function(t) {
    return {
     multiElement: !0,
     transclude: "element",
     priority: 600,
     terminal: !0,
     restrict: "A",
     $$tlb: !0,
     link: function(n, i, r, o, s) {
      var a, c, u;
      n.$watch(r.ngIf, function(n) {
       n ? c || s(function(n, o) {
        c = o, n[n.length++] = e.createComment(" end ngIf: " + r.ngIf + " "), a = {
         clone: n
        }, t.enter(n, i.parent(), i);
       }) : (u && (u.remove(), u = null), c && (c.$destroy(), c = null), a && (u = ct(a.clone), 
       t.leave(u).then(function() {
        u = null;
       }), a = null));
      });
     }
    };
   } ], so = [ "$templateRequest", "$anchorScroll", "$animate", "$sce", function(t, e, n, i) {
    return {
     restrict: "ECA",
     priority: 400,
     terminal: !0,
     transclude: "element",
     controller: ai.noop,
     compile: function(r, o) {
      var s = o.ngInclude || o.src, a = o.onload || "", c = o.autoscroll;
      return function(r, o, u, l, h) {
       var p, f, d, v = 0, g = function() {
        f && (f.remove(), f = null), p && (p.$destroy(), p = null), d && (n.leave(d).then(function() {
         f = null;
        }), f = d, d = null);
       };
       r.$watch(i.parseAsResourceUrl(s), function(i) {
        var s = function() {
         !y(c) || c && !r.$eval(c) || e();
        }, u = ++v;
        i ? (t(i, !0).then(function(t) {
         if (u === v) {
          var e = r.$new();
          l.template = t;
          var c = h(e, function(t) {
           g(), n.enter(t, null, o).then(s);
          });
          p = e, d = c, p.$emit("$includeContentLoaded", i), r.$eval(a);
         }
        }, function() {
         u === v && (g(), r.$emit("$includeContentError", i));
        }), r.$emit("$includeContentRequested", i)) : (g(), l.template = null);
       });
      };
     }
    };
   } ], ao = [ "$compile", function(t) {
    return {
     restrict: "ECA",
     priority: -400,
     require: "ngInclude",
     link: function(n, i, r, o) {
      return /SVG/.test(i[0].toString()) ? (i.empty(), void t(yt(o.template, e).childNodes)(n, function(t) {
       i.append(t);
      }, {
       futureParentElement: i
      })) : (i.html(o.template), void t(i.contents())(n));
     }
    };
   } ], co = En({
    priority: 450,
    compile: function() {
     return {
      pre: function(t, e, n) {
       t.$eval(n.ngInit);
      }
     };
    }
   }), uo = function() {
    return {
     restrict: "A",
     priority: 100,
     require: "ngModel",
     link: function(t, e, i, r) {
      var s = e.attr(i.$attr.ngList) || ", ", a = "false" !== i.ngTrim, c = a ? hi(s) : s, u = function(t) {
       if (!m(t)) {
        var e = [];
        return t && o(t.split(c), function(t) {
         t && e.push(a ? hi(t) : t);
        }), e;
       }
      };
      r.$parsers.push(u), r.$formatters.push(function(t) {
       return li(t) ? t.join(s) : n;
      }), r.$isEmpty = function(t) {
       return !t || !t.length;
      };
     }
    };
   }, lo = "ng-valid", ho = "ng-invalid", po = "ng-pristine", fo = "ng-dirty", vo = "ng-untouched", go = "ng-touched", mo = "ng-pending", yo = new i("ngModel"), bo = [ "$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function(t, e, i, r, s, a, c, u, l, h) {
    this.$viewValue = Number.NaN, this.$modelValue = Number.NaN, this.$$rawModelValue = n, 
    this.$validators = {}, this.$asyncValidators = {}, this.$parsers = [], this.$formatters = [], 
    this.$viewChangeListeners = [], this.$untouched = !0, this.$touched = !1, this.$pristine = !0, 
    this.$dirty = !1, this.$valid = !0, this.$invalid = !1, this.$error = {}, this.$$success = {}, 
    this.$pending = n, this.$name = h(i.name || "", !1)(t);
    var p, f = s(i.ngModel), v = f.assign, g = f, b = v, w = null, x = this;
    this.$$setOptions = function(t) {
     if (x.$options = t, t && t.getterSetter) {
      var e = s(i.ngModel + "()"), n = s(i.ngModel + "($$$p)");
      g = function(t) {
       var n = f(t);
       return $(n) && (n = e(t)), n;
      }, b = function(t) {
       $(f(t)) ? n(t, {
        $$$p: x.$modelValue
       }) : v(t, x.$modelValue);
      };
     } else if (!f.assign) throw yo("nonassign", "Expression '{0}' is non-assignable. Element: {1}", i.ngModel, V(r));
    }, this.$render = d, this.$isEmpty = function(t) {
     return m(t) || "" === t || null === t || t !== t;
    };
    var k = r.inheritedData("$formController") || jr, S = 0;
    zn({
     ctrl: this,
     $element: r,
     set: function(t, e) {
      t[e] = !0;
     },
     unset: function(t, e) {
      delete t[e];
     },
     parentForm: k,
     $animate: a
    }), this.$setPristine = function() {
     x.$dirty = !1, x.$pristine = !0, a.removeClass(r, fo), a.addClass(r, po);
    }, this.$setDirty = function() {
     x.$dirty = !0, x.$pristine = !1, a.removeClass(r, po), a.addClass(r, fo), k.$setDirty();
    }, this.$setUntouched = function() {
     x.$touched = !1, x.$untouched = !0, a.setClass(r, vo, go);
    }, this.$setTouched = function() {
     x.$touched = !0, x.$untouched = !1, a.setClass(r, go, vo);
    }, this.$rollbackViewValue = function() {
     c.cancel(w), x.$viewValue = x.$$lastCommittedViewValue, x.$render();
    }, this.$validate = function() {
     if (!_(x.$modelValue) || !isNaN(x.$modelValue)) {
      var t = x.$$lastCommittedViewValue, e = x.$$rawModelValue, i = x.$valid, r = x.$modelValue, o = x.$options && x.$options.allowInvalid;
      x.$$runValidators(e, t, function(t) {
       o || i === t || (x.$modelValue = t ? e : n, x.$modelValue !== r && x.$$writeModelToScope());
      });
     }
    }, this.$$runValidators = function(t, e, i) {
     function r() {
      var t = x.$$parserName || "parse";
      return p !== n ? (p || (o(x.$validators, function(t, e) {
       c(e, null);
      }), o(x.$asyncValidators, function(t, e) {
       c(e, null);
      })), c(t, p), p) : (c(t, null), !0);
     }
     function s() {
      var n = !0;
      return o(x.$validators, function(i, r) {
       var o = i(t, e);
       n = n && o, c(r, o);
      }), n ? !0 : (o(x.$asyncValidators, function(t, e) {
       c(e, null);
      }), !1);
     }
     function a() {
      var i = [], r = !0;
      o(x.$asyncValidators, function(o, s) {
       var a = o(t, e);
       if (!P(a)) throw yo("$asyncValidators", "Expected asynchronous validator to return a promise but got '{0}' instead.", a);
       c(s, n), i.push(a.then(function() {
        c(s, !0);
       }, function() {
        r = !1, c(s, !1);
       }));
      }), i.length ? l.all(i).then(function() {
       u(r);
      }, d) : u(!0);
     }
     function c(t, e) {
      h === S && x.$setValidity(t, e);
     }
     function u(t) {
      h === S && i(t);
     }
     S++;
     var h = S;
     return r() && s() ? void a() : void u(!1);
    }, this.$commitViewValue = function() {
     var t = x.$viewValue;
     c.cancel(w), (x.$$lastCommittedViewValue !== t || "" === t && x.$$hasNativeValidators) && (x.$$lastCommittedViewValue = t, 
     x.$pristine && this.$setDirty(), this.$$parseAndValidate());
    }, this.$$parseAndValidate = function() {
     function e() {
      x.$modelValue !== s && x.$$writeModelToScope();
     }
     var i = x.$$lastCommittedViewValue, r = i;
     if (p = m(r) ? n : !0) for (var o = 0; o < x.$parsers.length; o++) if (r = x.$parsers[o](r), 
     m(r)) {
      p = !1;
      break;
     }
     _(x.$modelValue) && isNaN(x.$modelValue) && (x.$modelValue = g(t));
     var s = x.$modelValue, a = x.$options && x.$options.allowInvalid;
     x.$$rawModelValue = r, a && (x.$modelValue = r, e()), x.$$runValidators(r, x.$$lastCommittedViewValue, function(t) {
      a || (x.$modelValue = t ? r : n, e());
     });
    }, this.$$writeModelToScope = function() {
     b(t, x.$modelValue), o(x.$viewChangeListeners, function(t) {
      try {
       t();
      } catch (n) {
       e(n);
      }
     });
    }, this.$setViewValue = function(t, e) {
     x.$viewValue = t, (!x.$options || x.$options.updateOnDefault) && x.$$debounceViewValueCommit(e);
    }, this.$$debounceViewValueCommit = function(e) {
     var n, i = 0, r = x.$options;
     r && y(r.debounce) && (n = r.debounce, _(n) ? i = n : _(n[e]) ? i = n[e] : _(n["default"]) && (i = n["default"])), 
     c.cancel(w), i ? w = c(function() {
      x.$commitViewValue();
     }, i) : u.$$phase ? x.$commitViewValue() : t.$apply(function() {
      x.$commitViewValue();
     });
    }, t.$watch(function() {
     var e = g(t);
     if (e !== x.$modelValue) {
      x.$modelValue = x.$$rawModelValue = e, p = n;
      for (var i = x.$formatters, r = i.length, o = e; r--; ) o = i[r](o);
      x.$viewValue !== o && (x.$viewValue = x.$$lastCommittedViewValue = o, x.$render(), 
      x.$$runValidators(e, o, d));
     }
     return e;
    });
   } ], wo = [ "$rootScope", function(t) {
    return {
     restrict: "A",
     require: [ "ngModel", "^?form", "^?ngModelOptions" ],
     controller: bo,
     priority: 1,
     compile: function(e) {
      return e.addClass(po).addClass(vo).addClass(lo), {
       pre: function(t, e, n, i) {
        var r = i[0], o = i[1] || jr;
        r.$$setOptions(i[2] && i[2].$options), o.$addControl(r), n.$observe("name", function(t) {
         r.$name !== t && o.$$renameControl(r, t);
        }), t.$on("$destroy", function() {
         o.$removeControl(r);
        });
       },
       post: function(e, n, i, r) {
        var o = r[0];
        o.$options && o.$options.updateOn && n.on(o.$options.updateOn, function(t) {
         o.$$debounceViewValueCommit(t && t.type);
        }), n.on("blur", function() {
         o.$touched || (t.$$phase ? e.$evalAsync(o.$setTouched) : e.$apply(o.$setTouched));
        });
       }
      };
     }
    };
   } ], _o = /(\s+|^)default(\s+|$)/, xo = function() {
    return {
     restrict: "A",
     controller: [ "$scope", "$attrs", function(t, e) {
      var i = this;
      this.$options = t.$eval(e.ngModelOptions), this.$options.updateOn !== n ? (this.$options.updateOnDefault = !1, 
      this.$options.updateOn = hi(this.$options.updateOn.replace(_o, function() {
       return i.$options.updateOnDefault = !0, " ";
      }))) : this.$options.updateOnDefault = !0;
     } ]
    };
   }, $o = En({
    terminal: !0,
    priority: 1e3
   }), ko = [ "$locale", "$interpolate", function(t, e) {
    var n = /{}/g, i = /^when(Minus)?(.+)$/;
    return {
     restrict: "EA",
     link: function(r, s, a) {
      function c(t) {
       s.text(t || "");
      }
      var u, l = a.count, h = a.$attr.when && s.attr(a.$attr.when), p = a.offset || 0, f = r.$eval(h) || {}, d = {}, v = e.startSymbol(), g = e.endSymbol(), m = v + l + "-" + p + g, y = ai.noop;
      o(a, function(t, e) {
       var n = i.exec(e);
       if (n) {
        var r = (n[1] ? "-" : "") + Gn(n[2]);
        f[r] = s.attr(a.$attr[e]);
       }
      }), o(f, function(t, i) {
       d[i] = e(t.replace(n, m));
      }), r.$watch(l, function(e) {
       var n = parseFloat(e), i = isNaN(n);
       i || n in f || (n = t.pluralCat(n - p)), n === u || i && isNaN(u) || (y(), y = r.$watch(d[n], c), 
       u = n);
      });
     }
    };
   } ], So = [ "$parse", "$animate", function(t, s) {
    var a = "$$NG_REMOVED", c = i("ngRepeat"), u = function(t, e, n, i, r, o, s) {
     t[n] = i, r && (t[r] = o), t.$index = e, t.$first = 0 === e, t.$last = e === s - 1, 
     t.$middle = !(t.$first || t.$last), t.$odd = !(t.$even = 0 === (1 & e));
    }, l = function(t) {
     return t.clone[0];
    }, h = function(t) {
     return t.clone[t.clone.length - 1];
    };
    return {
     restrict: "A",
     multiElement: !0,
     transclude: "element",
     priority: 1e3,
     terminal: !0,
     $$tlb: !0,
     compile: function(i, p) {
      var f = p.ngRepeat, d = e.createComment(" end ngRepeat: " + f + " "), v = f.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
      if (!v) throw c("iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", f);
      var g = v[1], m = v[2], y = v[3], b = v[4];
      if (v = g.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/), !v) throw c("iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", g);
      var w = v[3] || v[1], _ = v[2];
      if (y && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(y) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(y))) throw c("badident", "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.", y);
      var x, $, k, S, E = {
       $id: It
      };
      return b ? x = t(b) : (k = function(t, e) {
       return It(e);
      }, S = function(t) {
       return t;
      }), function(t, e, i, p, v) {
       x && ($ = function(e, n, i) {
        return _ && (E[_] = e), E[w] = n, E.$index = i, x(t, E);
       });
       var g = ut();
       t.$watchCollection(m, function(i) {
        var p, m, b, x, E, C, T, A, j, P, L, O, M = e[0], N = ut();
        if (y && (t[y] = i), r(i)) j = i, A = $ || k; else {
         A = $ || S, j = [];
         for (var R in i) i.hasOwnProperty(R) && "$" != R.charAt(0) && j.push(R);
         j.sort();
        }
        for (x = j.length, L = new Array(x), p = 0; x > p; p++) if (E = i === j ? p : j[p], 
        C = i[E], T = A(E, C, p), g[T]) P = g[T], delete g[T], N[T] = P, L[p] = P; else {
         if (N[T]) throw o(L, function(t) {
          t && t.scope && (g[t.id] = t);
         }), c("dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", f, T, C);
         L[p] = {
          id: T,
          scope: n,
          clone: n
         }, N[T] = !0;
        }
        for (var H in g) {
         if (P = g[H], O = ct(P.clone), s.leave(O), O[0].parentNode) for (p = 0, m = O.length; m > p; p++) O[p][a] = !0;
         P.scope.$destroy();
        }
        for (p = 0; x > p; p++) if (E = i === j ? p : j[p], C = i[E], P = L[p], P.scope) {
         b = M;
         do b = b.nextSibling; while (b && b[a]);
         l(P) != b && s.move(ct(P.clone), null, Zn(M)), M = h(P), u(P.scope, p, w, C, _, E, x);
        } else v(function(t, e) {
         P.scope = e;
         var n = d.cloneNode(!1);
         t[t.length++] = n, s.enter(t, null, Zn(M)), M = n, P.clone = t, N[P.id] = P, u(P.scope, p, w, C, _, E, x);
        });
        g = N;
       });
      };
     }
    };
   } ], Eo = "ng-hide", Co = "ng-hide-animate", To = [ "$animate", function(t) {
    return {
     restrict: "A",
     multiElement: !0,
     link: function(e, n, i) {
      e.$watch(i.ngShow, function(e) {
       t[e ? "removeClass" : "addClass"](n, Eo, {
        tempClasses: Co
       });
      });
     }
    };
   } ], Ao = [ "$animate", function(t) {
    return {
     restrict: "A",
     multiElement: !0,
     link: function(e, n, i) {
      e.$watch(i.ngHide, function(e) {
       t[e ? "addClass" : "removeClass"](n, Eo, {
        tempClasses: Co
       });
      });
     }
    };
   } ], jo = En(function(t, e, n) {
    t.$watchCollection(n.ngStyle, function(t, n) {
     n && t !== n && o(n, function(t, n) {
      e.css(n, "");
     }), t && e.css(t);
    });
   }), Po = [ "$animate", function(t) {
    return {
     restrict: "EA",
     require: "ngSwitch",
     controller: [ "$scope", function() {
      this.cases = {};
     } ],
     link: function(n, i, r, s) {
      var a = r.ngSwitch || r.on, c = [], u = [], l = [], h = [], p = function(t, e) {
       return function() {
        t.splice(e, 1);
       };
      };
      n.$watch(a, function(n) {
       var i, r;
       for (i = 0, r = l.length; r > i; ++i) t.cancel(l[i]);
       for (l.length = 0, i = 0, r = h.length; r > i; ++i) {
        var a = ct(u[i].clone);
        h[i].$destroy();
        var f = l[i] = t.leave(a);
        f.then(p(l, i));
       }
       u.length = 0, h.length = 0, (c = s.cases["!" + n] || s.cases["?"]) && o(c, function(n) {
        n.transclude(function(i, r) {
         h.push(r);
         var o = n.element;
         i[i.length++] = e.createComment(" end ngSwitchWhen: ");
         var s = {
          clone: i
         };
         u.push(s), t.enter(i, o.parent(), o);
        });
       });
      });
     }
    };
   } ], Lo = En({
    transclude: "element",
    priority: 1200,
    require: "^ngSwitch",
    multiElement: !0,
    link: function(t, e, n, i, r) {
     i.cases["!" + n.ngSwitchWhen] = i.cases["!" + n.ngSwitchWhen] || [], i.cases["!" + n.ngSwitchWhen].push({
      transclude: r,
      element: e
     });
    }
   }), Oo = En({
    transclude: "element",
    priority: 1200,
    require: "^ngSwitch",
    multiElement: !0,
    link: function(t, e, n, i, r) {
     i.cases["?"] = i.cases["?"] || [], i.cases["?"].push({
      transclude: r,
      element: e
     });
    }
   }), Mo = En({
    restrict: "EAC",
    link: function(t, e, n, r, o) {
     if (!o) throw i("ngTransclude")("orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", V(e));
     o(function(t) {
      e.empty(), e.append(t);
     });
    }
   }), No = [ "$templateCache", function(t) {
    return {
     restrict: "E",
     terminal: !0,
     compile: function(e, n) {
      if ("text/ng-template" == n.type) {
       var i = n.id, r = e[0].text;
       t.put(i, r);
      }
     }
    };
   } ], Ro = i("ngOptions"), Ho = g({
    restrict: "A",
    terminal: !0
   }), Do = [ "$compile", "$parse", function(t, i) {
    var r = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, a = {
     $setViewValue: d
    };
    return {
     restrict: "E",
     require: [ "select", "?ngModel" ],
     controller: [ "$element", "$scope", "$attrs", function(t, e, n) {
      var i, r, o = this, s = {}, c = a;
      o.databound = n.ngModel, o.init = function(t, e, n) {
       c = t, i = e, r = n;
      }, o.addOption = function(e, n) {
       st(e, '"option value"'), s[e] = !0, c.$viewValue == e && (t.val(e), r.parent() && r.remove()), 
       n && n[0].hasAttribute("selected") && (n[0].selected = !0);
      }, o.removeOption = function(t) {
       this.hasOption(t) && (delete s[t], c.$viewValue === t && this.renderUnknownOption(t));
      }, o.renderUnknownOption = function(e) {
       var n = "? " + It(e) + " ?";
       r.val(n), t.prepend(r), t.val(n), r.prop("selected", !0);
      }, o.hasOption = function(t) {
       return s.hasOwnProperty(t);
      }, e.$on("$destroy", function() {
       o.renderUnknownOption = d;
      });
     } ],
     link: function(a, c, u, l) {
      function h(t, e, n, i) {
       n.$render = function() {
        var t = n.$viewValue;
        i.hasOption(t) ? (S.parent() && S.remove(), e.val(t), "" === t && d.prop("selected", !0)) : m(t) && d ? e.val("") : i.renderUnknownOption(t);
       }, e.on("change", function() {
        t.$apply(function() {
         S.parent() && S.remove(), n.$setViewValue(e.val());
        });
       });
      }
      function p(t, e, n) {
       var i;
       n.$render = function() {
        var t = new qt(n.$viewValue);
        o(e.find("option"), function(e) {
         e.selected = y(t.get(e.value));
        });
       }, t.$watch(function() {
        D(i, n.$viewValue) || (i = H(n.$viewValue), n.$render());
       }), e.on("change", function() {
        t.$apply(function() {
         var t = [];
         o(e.find("option"), function(e) {
          e.selected && t.push(e.value);
         }), n.$setViewValue(t);
        });
       });
      }
      function f(e, a, c) {
       function u(t, n, i) {
        return D[C] = i, j && (D[j] = n), t(e, D);
       }
       function l() {
        e.$apply(function() {
         var t, n = O(e) || [];
         if (b) t = [], o(a.val(), function(e) {
          e = N ? R[e] : e, t.push(h(e, n[e]));
         }); else {
          var i = N ? R[a.val()] : a.val();
          t = h(i, n[i]);
         }
         c.$setViewValue(t), m();
        });
       }
       function h(t, e) {
        if ("?" === t) return n;
        if ("" === t) return null;
        var i = A ? A : L;
        return u(i, t, e);
       }
       function p() {
        var t, n = O(e);
        if (n && li(n)) {
         t = new Array(n.length);
         for (var i = 0, r = n.length; r > i; i++) t[i] = u(E, i, n[i]);
         return t;
        }
        if (n) {
         t = {};
         for (var o in n) n.hasOwnProperty(o) && (t[o] = u(E, o, n[o]));
        }
        return t;
       }
       function f(t) {
        var e;
        if (b) if (N && li(t)) {
         e = new qt([]);
         for (var n = 0; n < t.length; n++) e.put(u(N, null, t[n]), !0);
        } else e = new qt(t); else N && (t = u(N, null, t));
        return function(n, i) {
         var r;
         return r = N ? N : A ? A : L, b ? y(e.remove(u(r, n, i))) : t === u(r, n, i);
        };
       }
       function d() {
        x || (e.$$postDigest(m), x = !0);
       }
       function g(t, e, n) {
        t[e] = t[e] || 0, t[e] += n ? 1 : -1;
       }
       function m() {
        x = !1;
        var t, n, i, r, l, h, p, d, m, w, S, C, T, A, L, M, B, I = {
         "": []
        }, q = [ "" ], F = c.$viewValue, z = O(e) || [], U = j ? s(z) : z, V = {}, W = f(F), G = !1;
        for (R = {}, C = 0; w = U.length, w > C; C++) p = C, j && (p = U[C], "$" === p.charAt(0)) || (d = z[p], 
        t = u(P, p, d) || "", (n = I[t]) || (n = I[t] = [], q.push(t)), T = W(p, d), G = G || T, 
        M = u(E, p, d), M = y(M) ? M : "", B = N ? N(e, D) : j ? U[C] : C, N && (R[B] = p), 
        n.push({
         id: B,
         label: M,
         selected: T
        }));
        for (b || (_ || null === F ? I[""].unshift({
         id: "",
         label: "",
         selected: !G
        }) : G || I[""].unshift({
         id: "?",
         label: "",
         selected: !0
        })), S = 0, m = q.length; m > S; S++) {
         for (t = q[S], n = I[t], H.length <= S ? (r = {
          element: k.clone().attr("label", t),
          label: n.label
         }, l = [ r ], H.push(l), a.append(r.element)) : (l = H[S], r = l[0], r.label != t && r.element.attr("label", r.label = t)), 
         A = null, C = 0, w = n.length; w > C; C++) i = n[C], (h = l[C + 1]) ? (A = h.element, 
         h.label !== i.label && (g(V, h.label, !1), g(V, i.label, !0), A.text(h.label = i.label), 
         A.prop("label", h.label)), h.id !== i.id && A.val(h.id = i.id), A[0].selected !== i.selected && (A.prop("selected", h.selected = i.selected), 
         Qn && A.prop("selected", h.selected))) : ("" === i.id && _ ? L = _ : (L = $.clone()).val(i.id).prop("selected", i.selected).attr("selected", i.selected).prop("label", i.label).text(i.label), 
         l.push(h = {
          element: L,
          label: i.label,
          id: i.id,
          selected: i.selected
         }), g(V, i.label, !0), A ? A.after(L) : r.element.append(L), A = L);
         for (C++; l.length > C; ) i = l.pop(), g(V, i.label, !1), i.element.remove();
        }
        for (;H.length > S; ) {
         for (n = H.pop(), C = 1; C < n.length; ++C) g(V, n[C].label, !1);
         n[0].element.remove();
        }
        o(V, function(t, e) {
         t > 0 ? v.addOption(e) : 0 > t && v.removeOption(e);
        });
       }
       var S;
       if (!(S = w.match(r))) throw Ro("iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", w, V(a));
       var E = i(S[2] || S[1]), C = S[4] || S[6], T = / as /.test(S[0]) && S[1], A = T ? i(T) : null, j = S[5], P = i(S[3] || ""), L = i(S[2] ? S[1] : C), O = i(S[7]), M = S[8], N = M ? i(S[8]) : null, R = {}, H = [ [ {
        element: a,
        label: ""
       } ] ], D = {};
       _ && (t(_)(e), _.removeClass("ng-scope"), _.remove()), a.empty(), a.on("change", l), 
       c.$render = m, e.$watchCollection(O, d), e.$watchCollection(p, d), b && e.$watchCollection(function() {
        return c.$modelValue;
       }, d);
      }
      if (l[1]) {
       for (var d, v = l[0], g = l[1], b = u.multiple, w = u.ngOptions, _ = !1, x = !1, $ = Zn(e.createElement("option")), k = Zn(e.createElement("optgroup")), S = $.clone(), E = 0, C = c.children(), T = C.length; T > E; E++) if ("" === C[E].value) {
        d = _ = C.eq(E);
        break;
       }
       v.init(g, _, S), b && (g.$isEmpty = function(t) {
        return !t || 0 === t.length;
       }), w ? f(a, c, g) : b ? p(a, c, g) : h(a, c, g, v);
      }
     }
    };
   } ], Bo = [ "$interpolate", function(t) {
    var e = {
     addOption: d,
     removeOption: d
    };
    return {
     restrict: "E",
     priority: 100,
     compile: function(n, i) {
      if (m(i.value)) {
       var r = t(n.text(), !0);
       r || i.$set("value", n.text());
      }
      return function(t, n, i) {
       var o = "$selectController", s = n.parent(), a = s.data(o) || s.parent().data(o);
       a && a.databound || (a = e), r ? t.$watch(r, function(t, e) {
        i.$set("value", t), e !== t && a.removeOption(e), a.addOption(t, n);
       }) : a.addOption(i.value, n), n.on("$destroy", function() {
        a.removeOption(i.value);
       });
      };
     }
    };
   } ], Io = g({
    restrict: "E",
    terminal: !1
   }), qo = function() {
    return {
     restrict: "A",
     require: "?ngModel",
     link: function(t, e, n, i) {
      i && (n.required = !0, i.$validators.required = function(t, e) {
       return !n.required || !i.$isEmpty(e);
      }, n.$observe("required", function() {
       i.$validate();
      }));
     }
    };
   }, Fo = function() {
    return {
     restrict: "A",
     require: "?ngModel",
     link: function(t, e, r, o) {
      if (o) {
       var s, a = r.ngPattern || r.pattern;
       r.$observe("pattern", function(t) {
        if (w(t) && t.length > 0 && (t = new RegExp("^" + t + "$")), t && !t.test) throw i("ngPattern")("noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", a, t, V(e));
        s = t || n, o.$validate();
       }), o.$validators.pattern = function(t) {
        return o.$isEmpty(t) || m(s) || s.test(t);
       };
      }
     }
    };
   }, zo = function() {
    return {
     restrict: "A",
     require: "?ngModel",
     link: function(t, e, n, i) {
      if (i) {
       var r = -1;
       n.$observe("maxlength", function(t) {
        var e = p(t);
        r = isNaN(e) ? -1 : e, i.$validate();
       }), i.$validators.maxlength = function(t, e) {
        return 0 > r || i.$isEmpty(e) || e.length <= r;
       };
      }
     }
    };
   }, Uo = function() {
    return {
     restrict: "A",
     require: "?ngModel",
     link: function(t, e, n, i) {
      if (i) {
       var r = 0;
       n.$observe("minlength", function(t) {
        r = p(t) || 0, i.$validate();
       }), i.$validators.minlength = function(t, e) {
        return i.$isEmpty(e) || e.length >= r;
       };
      }
     }
    };
   };
   return t.angular.bootstrap ? void console.log("WARNING: Tried to load angular more than once.") : (it(), 
   ft(ai), void Zn(e).ready(function() {
    Q(e, Z);
   }));
  }(window, document), !window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
 }, {} ],
 27: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/flat-bubble.html"), r = "flatBubble";
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    transclude: !0,
    scope: {
     disabled: "@?",
     orientation: "@?",
     buttons: "=?",
     clickBubble: "&?",
     clickButton: "&?"
    },
    controller: [ "$scope", function(t) {
     n.trace(r, t.buttons), t._clickButton = function(e) {
      n.trace(r, "_clickButton", e), e.event.stopPropagation(), t.clickButton({
       opts: e
      });
     }, t._clickBubble = function(e) {
      n.trace(r, "_clickBubble", e), e.event.stopPropagation(), t.clickBubble({
       opts: e
      });
     };
    } ]
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-bubble.html": 34,
  "jslib/utils/Log": 187
 } ],
 28: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/ui/ActiveHandler"), i = t("../views/flat-button.html"), r = "flatButton";
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    scope: {
     disabled: "@?",
     submit: "@?",
     value: "@?",
     img: "@?"
    },
    link: function(t, e) {
     new n(e[0], "fake-active"), e.bind("click", function(t) {
      t.stopPropagation();
     }), t.$watch("disabled", function(t) {
      "false" === t ? e.addClass("disabled") : e.removeClass("disabled");
     });
    },
    controller: [ "$scope", function() {} ]
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-button.html": 35,
  "jslib/ui/ActiveHandler": 181
 } ],
 29: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = "flatEdit";
  e.directive(n, [ function() {
   return {
    restrict: "E",
    template: t("../views/flat-edit.html"),
    scope: {
     bindValue: "=",
     placeholder: "@?",
     password: "@?",
     onFocus: "&?",
     ngDisabled: "@?",
     fixedReadonly: "@?"
    },
    link: function(t, e, n) {
     t.password + "" == "true" && (e[0].getElementsByTagName("input")[0].type = "password");
     var i = e.children()[0];
     if (n.onFocus && i.addEventListener("click", function() {
      t.$apply(function() {
       t.onFocus();
      });
     }, !1), "true" === t.fixedReadonly) {
      var r, o, s = function() {
       if (!o) {
        var t = i.value;
        setTimeout(function() {
         t !== i.value && (o || (r = t, o = setTimeout(function() {
          console.log("reset"), o = void 0, i.value = r;
         }, 100)));
        }, 1);
       }
      };
      i.addEventListener("keydown", s, !1), i.addEventListener("cut", s, !1), i.addEventListener("click", function() {
       i.focus(), i.select();
      }, !1);
     }
    }
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-edit.html": 36
 } ],
 30: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("../views/flat-slider.html"), i = "flatSlider", r = 210;
  e.directive(i, [ function() {
   return {
    restrict: "E",
    template: n,
    scope: {
     index: "=?",
     animated: "@animated",
     values: "=",
     onToggle: "&?",
     msAnimate: "@?"
    },
    controller: [ "$scope", "$timeout", function(t, e) {
     t.opened = !1, isNaN(parseInt(t.msAnimate, 10) || parseInt(t.msAnimate, 10) <= 0) && (t.msAnimate = r), 
     t._click = function(n, i) {
      t.values && (n.stopPropagation(), t.opened && t._select(i), t.opened = !t.opened, 
      t.onToggle && e(function() {
       t.onToggle({
        opened: t.opened
       });
      }, t.animated ? parseInt(t.msAnimate, 10) : 1));
     }, t._select = function(e) {
      t.index = e;
     }, t.index || t._select(0);
    } ]
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-slider.html": 37
 } ],
 31: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/flat-sliderlist.html"), r = "flatSliderlist";
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    replace: !0,
    scope: {
     values: "=",
     select: "&?"
    },
    controller: [ "$scope", function(t) {
     n.trace(r, "values()", t.values), t._select = function(e, n) {
      e.stopPropagation(), t.select({
       index: n
      });
     };
    } ]
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-sliderlist.html": 38,
  "jslib/utils/Log": 187
 } ],
 32: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/flat-switch.html"), r = "flatSwitch";
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    scope: {
     values: "=",
     index: "=?",
     value: "=?"
    },
    controller: [ "$scope", function(t) {
     n.trace(r, "values()", t.values), void 0 === t.index && void 0 !== t.value && (t.index = t.values.indexOf(t.value)), 
     void 0 !== t.index && void 0 === t.value && (t.value = t.values[t.index]), t._select = function(e, n) {
      e.stopPropagation(), t.index = n, t.value = t.values[n];
     };
    } ]
   };
  } ]);
 }, {
  "../ngmodule": 33,
  "../views/flat-switch.html": 39,
  "jslib/utils/Log": 187
 } ],
 33: [ function(t, e) {
  "use strict";
  var n = t("angular/angular"), i = "flat";
  n.module(i, []), e.exports = n.module(i);
 }, {
  "angular/angular": 22
 } ],
 34: [ function(t, e) {
  e.exports = '<div\n	class="flat-bubble-content"\n	ng-click="::_clickBubble({ event: $event })"\n	ng-transclude>\n</div>\n<div\n	ng-if="::buttons"\n	class="flat-bubble-buttons">\n	<div\n		class="flat-bubble-button"\n		ng-repeat="button in ::buttons"\n		ng-click="::_clickButton({ index: $index, event: $event })"\n		ng-style="::{ backgroundImage: \'url(\\\'\' + button.img + \'\\\')\' }"\n		fake-active>\n	</div>\n</div>\n';
 }, {} ],
 35: [ function(t, e) {
  e.exports = '<div\n	class="spacer">\n</div>\n\n<!-- extra wrapper for background image, to respect bevel -->\n<div ng-if="img" class="bgimg" ng-style="{ backgroundImage: \'url(\' + img + \')\' }"></div>\n\n<span>{{ value }}</span>\n';
 }, {} ],
 36: [ function(t, e) {
  e.exports = '<input\n	type="text"\n	autocomplete="off"\n	ng-model="bindValue"\n	placeholder="{{ placeholder }}"	/>\n';
 }, {} ],
 37: [ function(t, e) {
  e.exports = '<div\n	class="row"\n	ng-repeat="value in values"\n	ng-click="_click($event, $index)"\n	ng-class="{ selected: $index === index, animated: animated, opened: opened }"\n	fake-active>\n	<span>{{ ::value }}</span>\n</div>\n';
 }, {} ],
 38: [ function(t, e) {
  e.exports = '<div\n	class="flat-sliderlist">\n	<div\n		class="row"\n		ng-repeat="row in values"\n		ng-click="_select($event, $index)"\n		ng-class="{ even: $index % 2 === 0 }"\n		fake-active>\n		{{ row }}\n	</div>\n</div>\n';
 }, {} ],
 39: [ function(t, e) {
  e.exports = '<div\n	class="table">\n	<div\n		class="field"\n		ng-repeat="field in ::values"\n		ng-click="_select($event, $index)"\n		ng-class="{ even: $index % 2 === 0, selected: $index === index }">\n		{{ ::field }}\n	</div>\n</div>\n\n';
 }, {} ],
 40: [ function(t, e) {
  "use strict";
  var n = t("jslib/utils/ChainMap");
  e.exports = {
   prefKeys: {
    SOUND_ENABLED: "h5_sound_enabled",
    VIBRATE_INVITE: "h5_invite_vibrate",
    PROFANITY_FILTER: "h5_profanity_filer"
   },
   gtype: "example",
   defMessageThread: "1e318dce-e776-4def-b572-0a64c5b175dd",
   urlGame: "http://localhost:8001",
   urlGplus: "https://apps.facebook.com/carlhopf",
   urlFb: "https://apps.facebook.com/carlhopf",
   urlFbApp: "https://apps.facebook.com/carlhopf",
   urlDev: "https://carlhopf.com",
   urlTerms: "https://carlhopf.com/terms",
   menuStrings: {
    home: {
     title: [ "h5_menu_home_title_hello", "h5_menu_home_title_howdy" ],
     slogan: [ "h5_menu_home_slogan_lets_play", "h5_menu_home_slogan_hows_things" ]
    },
    sp: {
     title: [ "h5_menu_sp_title_ready" ],
     slogan: [ "h5_menu_sp_slogan_chose_flavour" ]
    }
   },
   gameTemplates: new n(),
   tutorialTemplates: new n()
  };
 }, {
  "jslib/utils/ChainMap": 186
 } ],
 41: [ function(t, e) {
  "use strict";
  t("./lib/controllers/Index");
  var n = t("./lib/views/index.html");
  e.exports = function(t) {
   var e = angular.element(document).find("body");
   e.attr("ng-controller", "H5IndexCtrl"), e.addClass("h5-index"), e.append(angular.element(n)), 
   angular.bootstrap(document, [ t ]);
  };
 }, {
  "./lib/controllers/Index": 43,
  "./lib/views/index.html": 139
 } ],
 42: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = (t("../../config"), t("jslib/utils/Log"), e.exports = "H5ExampleTutorialCtrl");
  n.controller(i, [ "$scope", t("webapp/services/Back"), t("webapp/services/Analytics"), function(t, e, n) {
   n.sendAppView("tutorial");
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "jslib/utils/Log": 187,
  "webapp/services/Analytics": 218,
  "webapp/services/Back": 219
 } ],
 43: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/UtilsLocation"), r = e.exports = "H5IndexCtrl";
  t("webapp/services/MobileFixes"), t("webapp/services/Fastclick"), t("webapp/services/ErrorReporter"), 
  t("jsgames/example/register"), t("../directives/Game"), t("../directives/Menu"), 
  t("../directives/Lobby"), document.addEventListener("deviceready", function() {
   "undefined" != typeof window.StatusBar && window.StatusBar.hide(), navigator && "undefined" != typeof navigator.splashscreen && navigator.splashscreen.hide();
  }), n.controller(r, [ "$scope", t("webapp/services/Exit"), t("webapp/services/Analytics"), t("../services/Connection"), t("../services/Game"), t("../services/Autojoin"), function(t, e, n, r, o, s) {
   t.page = i.gup("page") || "menu", t.Game = o, t.Connection = r, t.setPage = function(e) {
    t.page = e;
   }, t.exit = function() {
    e.exit();
   }, s.has(function() {
    t.setPage("lobby");
   });
  } ]);
 }, {
  "../../ngmodule": 158,
  "../directives/Game": 51,
  "../directives/Lobby": 61,
  "../directives/Menu": 64,
  "../services/Autojoin": 82,
  "../services/Connection": 83,
  "../services/Game": 86,
  "jsgames/example/register": 170,
  "jslib/utils/UtilsLocation": 195,
  "webapp/services/Analytics": 218,
  "webapp/services/ErrorReporter": 222,
  "webapp/services/Exit": 223,
  "webapp/services/Fastclick": 224,
  "webapp/services/MobileFixes": 227
 } ],
 44: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = e.exports = "H5LobbyCtrl";
  n.controller(o, [ "$scope", t("webapp/services/Back"), t("../services/Connection"), t("../services/Session"), t("../services/Server"), t("../services/Notifications"), t("../services/Inbox"), t("../services/ThreadReader"), t("../services/GroomHandler"), t("../services/Rooms"), t("../services/Contacts"), t("../services/GameOpts"), t("../services/Me"), t("../services/Autojoin"), t("webapp/services/Analytics"), function(t, e, n, s, a, c, u, l, h, p, f, d, v, g, m) {
   n.start(), t.server = a, t.session = s, t.me = v, t.groom = h, t.rooms = p, t.contacts = f, 
   t.inbox = u, t.notifications = c, t.data = {
    tab: "home",
    profile: {
     cid: void 0,
     tab: 0
    }
   }, u.select(i.defMessageThread), t.popups = {}, t.$watch("data.tab", function(e) {
    switch (e) {
    case "home":
     l.watch(void 0);
     break;

    case "chat":
     l.watch(t.getTid());
    }
   }), t.togglePopup = function(e, n) {
    if (t.popups[e] = !t.popups[e], r.trace(o, "togglePopup() " + e + " " + t.popups[e]), 
    n) switch (e) {
    case "profile":
     t.data.profile.cid = n.cid, t.data.profile.tab = n.message ? "chat" : void 0;
    }
   }, t.hidePopup = function(e) {
    return t.popups[e] = !1, !0;
   }, t.onBack = function() {
    t.groom.rid ? (t.groom.leave(), "chat" === t.data.tab && (t.data.tab = "home")) : e.back();
   }, t.getTid = function() {
    return h.rid && !h.isQuickmatch() ? h.tid : i.defMessageThread;
   }, t.showLobbyGroom = function() {
    return h.rid && !h.isQuickmatch();
   }, t.getNotifyTid = function() {
    var e = t.getTid();
    return e ? l.get(t.getTid()).notify > 0 : !1;
   }, m.sendAppView("lobby");
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Autojoin": 82,
  "../services/Connection": 83,
  "../services/Contacts": 84,
  "../services/GameOpts": 87,
  "../services/GroomHandler": 88,
  "../services/Inbox": 90,
  "../services/Me": 92,
  "../services/Notifications": 93,
  "../services/Rooms": 98,
  "../services/Server": 99,
  "../services/Session": 100,
  "../services/ThreadReader": 103,
  "jslib/utils/Log": 187,
  "webapp/services/Analytics": 218,
  "webapp/services/Back": 219
 } ],
 45: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/avatar.html"), i = "h5Avatar";
  t("./PlayerImage"), e.directive(i, [ t("../services/Server"), function(t) {
   return {
    restrict: "E",
    template: n,
    scope: {
     cid: "@?",
     has: "@?",
     status: "@?",
     url: "@?"
    },
    link: function(e) {
     e.server = t.uri();
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Server": 99,
  "../views/avatar.html": 124,
  "./PlayerImage": 70
 } ],
 46: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/contact-popup.html"), r = "h5ContactPopup";
  e.directive(r, [ "$filter", t("../services/Server"), t("../services/Contacts"), t("../services/GroomHandler"), function(t, e, o, s) {
   return {
    restrict: "E",
    template: i,
    scope: {
     showOffline: "@?",
     showCheckbox: "@?",
     showAdd: "@?",
     onHide: "&",
     onClickPlayer: "&",
     onClickChat: "&"
    },
    controller: [ "$scope", function(i) {
     n.trace(r, "init"), i.service = o, i.groom = s, i.title = "h5client_contact_popup_title", 
     i.data = {
      name: "",
      result: -2,
      selected: {},
      msgInvite: t("lcze")("h5client_contact_popup_bubble_invite")
     }, i.clickAdd = function() {
      n.trace(r, "clickAdd()", i.data.name), 0 !== i.data.name.length && (i.data.result = -1, 
      i.$emit("dialog.center"), i.$emit("iscroll.refresh"), e.post("/api/v1/contact/addname", {
       name: i.data.name
      }).then(function(t) {
       t.data.cid ? (i.data.result = 0, o.update()) : i.data.result = 1;
      }, function(t) {
       n.warn(r, "http error adding contact by name", t.status);
      }));
     };
     var a = [ {
      img: "res/h5client/ic_chat-128.png",
      tag: "chat"
     } ], c = [ {
      img: "res/h5client/ic_controller.png",
      tag: "invite"
     }, {
      img: "res/h5client/ic_chat-128.png",
      tag: "chat"
     } ];
     i.getButtons = function() {
      return s.rid ? c : a;
     }, i.clickPlayer = function(t) {
      n.trace(r, "clickPlayer()", t), i.onClickPlayer({
       cid: t.cid,
       player: t
      }), i.onHide();
     }, i.clickButton = function(e, r) {
      switch (n.trace(e, "clickButton()", e, r), e) {
      case "invite":
       n.trace(e, "clickButton() invite", r), s.invite([ r.cid ]), i.data.msgInvite = t("lcze")("h5client_contact_popup_bubble_invited") + r.username + ".";
       break;

      case "chat":
       i.onClickChat({
        cid: r.cid,
        player: r
       }), i.onHide();
      }
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/contact-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Contacts": 84,
  "../services/GroomHandler": 88,
  "../services/Server": 99,
  "../strings/contact-popup.json": 104,
  "../views/contact-popup.html": 125,
  "jslib/utils/Log": 187,
  "webapp/services/Lcze": 226
 } ],
 47: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/create-room-popup.html"), r = "h5CreateRoomPopup";
  t("flat/directives/FlatButton"), t("webapp/filters/Lcze"), t("./Header"), t("./GoptList"), 
  t("./QuickmatchView"), e.directive(r, [ "$timeout", "$filter", "$q", t("../services/GroomHandler"), t("../services/Quickmatch"), t("webapp/services/Analytics"), function(t, e, o, s, a, c) {
   return {
    restrict: "E",
    template: i,
    scope: {
     onHide: "&"
    },
    controller: [ "$scope", function(t) {
     n.trace(r, "init"), t.service = s, t.quickmatch = a, t.opts = {}, t.busy = !1, t.ts = new Date().getTime(), 
     t.waitSec = 30 + 5 * Math.floor(6 * Math.random()), t.tryHide = function() {
      return s.isLeaveAllowed() ? s.rid ? (s.leave(), "keep") : void t.onHide() : "keep";
     }, t.refresh = function() {
      t.ts = new Date().getTime();
     }, t.submit = function() {
      if (!t.busy) if (t.busy = !0, t.refresh(), "quick" === t.opts["public"]) {
       var e = o.defer();
       t.$on("$destroy", e.resolve.bind(e, !0)), a.join(e, t.opts).then(function(e) {
        n.trace(r, "quickmatch join result", e), t.busy = !1;
       });
      } else s.create(t.opts);
     }, t.cancel = function() {
      s.isLeaveAllowed() && (s.leave(), t.busy = !1, t.refresh());
     }, t.getTitle = function() {
      return s.isQuickmatch() ? "h5client_create_room_popup_title_quick" : "h5client_create_room_popup_title";
     }, t.getHeaderGradient = function() {
      return s.isQuickmatch() ? "true" : "false";
     }, t.getButton = function() {
      return t.busy ? "h5_create_room_popup_button_wait" : "h5_create_room_popup_button_create";
     };
     var e = function(e, i, o) {
      0 === e && "quick" !== o.opts["public"] && (n.trace(r, "hide after onJoin success", o), 
      t.onHide());
     };
     c.sendAppView("create-room"), s.on("join", e), t.$on("$destroy", function() {
      n.trace(r, "destroy"), s.off("join", e);
     });
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/create-room-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/GroomHandler": 88,
  "../services/Quickmatch": 96,
  "../strings/create-room-popup.json": 105,
  "../views/create-room-popup.html": 126,
  "./GoptList": 57,
  "./Header": 60,
  "./QuickmatchView": 77,
  "flat/directives/FlatButton": 28,
  "jslib/utils/Log": 187,
  "webapp/filters/Lcze": 215,
  "webapp/services/Analytics": 218,
  "webapp/services/Lcze": 226
 } ],
 48: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/edit-avatar-popup.html"), i = t("jslib/utils/Log"), r = t("jslib/utils/UtilsCordova"), o = t("jslib/utils/UtilsWebapp"), s = "h5EditAvatarPopup";
  e.directive(s, [ "$upload", t("../services/Server"), t("../services/Me"), function(t, e, a) {
   return {
    restrict: "E",
    template: n,
    scope: {
     onHide: "&"
    },
    controller: [ "$scope", function(n) {
     var c = !1, u = e.uri() + "/api/v1/fileupload";
     n.me = a, n.status = "select", n.type = o.isWaWindowsPhoneApp() ? "windows" : r.isCordova() ? "cordova" : "default";
     var l = function(t) {
      return console.log(s, "wawindowsappfilepicker", t), t.detail && t.detail.files ? void n.$apply(function() {
       f(t.detail.files);
      }) : i.warn(s, "wawindowsappfilepicker event data missing");
     }, h = function(t) {
      console.log("wawindowsappfilepickerprogress", t), n.$apply(function() {
       n.status = "progress", n.percent = t.detail.percent;
      });
     }, p = function() {
      n.$apply(function() {
       n.status = "select";
      });
     }, f = function(t) {
      t && 0 !== t.length && e.send({
       t: "p",
       a: "avatar",
       file: t[0]
      });
     };
     n.upload = function(r) {
      i.trace(s, "upload()", r), r && 0 !== r.length && (n.percent = 0, n.status = "progress", 
      t.upload({
       url: u,
       fields: {
        access_token: e.getAccessToken()
       },
       file: r[0]
      }).progress(function(t) {
       n.percent = parseInt(100 * t.loaded / t.total, 10);
      }).success(function(t) {
       i.trace(s, "upload complete", t), f(t.files);
      }));
     }, n.uploadWaWindows = function() {
      window.external.notify(JSON.stringify({
       type: "filepickupload",
       filetype: "image",
       url: u,
       exts: [ ".png", ".jpg", ".jpeg" ]
      }));
     }, n.uploadCordova = function() {
      i.trace(s, "uploadCordova()"), navigator.camera.getPicture(function(t) {
       var e = function() {
        n.$apply(function() {
         n.percent = 0;
        });
       }, r = function(t) {
        if (!c) {
         if (!t) return void i.trace(s, "onsuccess files missing");
         n.$apply(function() {
          n.percent = 100;
         }), i.trace(s, "upload success of " + t.length + "files"), f(t);
        }
       }, o = function(t) {
        console.log("uploaded files, response " + t.response), t && t.response ? r(JSON.parse(t.response).files) : i.warn(s, "invalid response: " + t.response);
       }, a = function(t) {
        console.warn("error upload files, code " + t.code);
       };
       i.trace(s, "selected " + t);
       var l = new FileUploadOptions();
       l.fileKey = "file", l.fileName = t.substr(t.lastIndexOf("/") + 1);
       var h, p = t.lastIndexOf("."), d = -1 !== p ? t.substr(p + 1) : "jpg";
       switch (d) {
       case "jpg":
       case "jpeg":
        h = "image/jpg";
        break;

       case "png":
        h = "image/png";
        break;

       case "gif":
        h = "image/gif";
        break;

       default:
        return void i.warn(s, "cannot upload file as image: " + t);
       }
       l.mimeType = h, l.params = {
        value1: "test",
        value2: "param"
       }, n.status = "progress", e(0);
       var v = new FileTransfer();
       v.onprogress = function(t) {
        e(t && t.lengthComputable ? Math.floor(t.loaded / t.total * 100) : 0);
       }, v.upload(t, encodeURI(u), o, a, l);
      }, function(t) {
       i.warn(s, t);
      }, {
       quality: 50,
       destinationType: navigator.camera.DestinationType.FILE_URI,
       sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
      });
     };
     var d = function(t) {
      "p" === t.t && "avatar" === t.a && 0 === t.res && (i.trace(s, "avatar uploaded"), 
      a.update().then(function() {
       a.incrAvatarBuffer(), n.status = "select";
      }));
     };
     e.on("json", d), document.addEventListener("wawindowsappfilepickupload", l, !1), 
     document.addEventListener("wawindowsappfilepickuploadprogress", h, !1), document.addEventListener("wawindowsappfilepickuploaddone", p, !1), 
     n.$on("$destroy", function() {
      e.off("json", d), document.removeEventListener("wawindowsappfilepickupload", l), 
      document.removeEventListener("wawindowsappfilepickuploadprogress", h, !1), document.removeEventListener("wawindowsappfilepickuploaddone", p, !1), 
      c = !0;
     });
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/edit-avatar-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Me": 92,
  "../services/Server": 99,
  "../strings/edit-avatar-popup.json": 106,
  "../views/edit-avatar-popup.html": 127,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsCordova": 192,
  "jslib/utils/UtilsWebapp": 197,
  "webapp/services/Lcze": 226
 } ],
 49: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = "h5ExampleGame";
  n.gameTemplates.set([ "example" ], {
   html: "<h5-example-game></h5-example-game>"
  }), t("webapp/directives/Back"), t("./GameLeavePopup"), t("./ReconnectPopup"), t("./GameLeave"), 
  e.directive(i, [ t("../services/GroomHandler"), t("../services/Game"), function(e, n) {
   return {
    restrict: "E",
    template: t("../views/example-game.html"),
    scope: {},
    controller: [ "$scope", function(t) {
     var i = n.instance;
     if (!i) throw new Error("no game instance");
     t.popups = {}, t.game = i, t.groom = e, t.move = function() {
      setTimeout(function() {
       i.makeMove(i.getPidCurr());
      }, 0);
     }, t.moveEnd = function() {
      setTimeout(function() {
       i.makeEndMove(i.getPidCurr());
      }, 0);
     }, i.on("end", function() {
      t.$apply();
     }), t.$on("$destroy", function() {});
    } ]
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Game": 86,
  "../services/GroomHandler": 88,
  "../views/example-game.html": 128,
  "./GameLeave": 52,
  "./GameLeavePopup": 53,
  "./ReconnectPopup": 78,
  "webapp/directives/Back": 209
 } ],
 50: [ function(t) {
  "use strict";
  var e = t("../../config");
  e.tutorialTemplates.set([ "example" ], {
   controller: t("../controllers/ExampleTutorial"),
   html: t("../views/example-tutorial.html")
  });
 }, {
  "../../config": 40,
  "../controllers/ExampleTutorial": 42,
  "../views/example-tutorial.html": 129
 } ],
 51: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = "h5Game";
  t("./ExampleGame"), e.directive(i, [ "$controller", "$compile", t("../services/Game"), function(t, e, i) {
   return {
    restrict: "E",
    scope: {},
    compile: function() {
     return function(r, o) {
      var s = i.instance;
      if (!s) throw new Error("no game instance");
      var a = n.gameTemplates.find(s.chain);
      if (!a) throw new Error("no template found for " + JSON.stringify(s.chain));
      if ("string" != typeof a.html) throw new Error("template.html is not a string");
      o.html(a.html), e(o.contents())(r), a.controller && t(a.controller, {
       $scope: r
      });
     };
    }
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Game": 86,
  "./ExampleGame": 49
 } ],
 52: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = "h5GameLeave";
  e.directive(n, [ t("../services/Game"), t("../services/GroomHandler"), function(t, e) {
   return {
    restrict: "A",
    link: function(n) {
     n.$on("$destroy", function() {
      e.rid && e.game && !e.game.ended && e.leave();
      var n = t.instance;
      n && n.abort();
     });
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Game": 86,
  "../services/GroomHandler": 88
 } ],
 53: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = "h5GameLeavePopup";
  t("flat/directives/FlatButton"), t("webapp/filters/Lcze"), t("./Header"), e.directive(n, [ t("webapp/services/Back"), t("../services/Game"), function(e, n) {
   return {
    restrict: "E",
    template: t("../views/game-leave-popup.html"),
    scope: {
     onHide: "&"
    },
    controller: [ "$scope", function(t) {
     t.Back = e, t.show = !1;
     var i = function() {
      n.unset();
     };
     t.onBack = function() {
      var e = n.instance;
      return e.ended ? (i(), !0) : (t.show = !t.show, "keep");
     }, t.confirm = function() {
      i();
     }, t.cancel = function() {
      t.show = !1;
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/game-leave-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Game": 86,
  "../strings/game-leave-popup.json": 107,
  "../views/game-leave-popup.html": 130,
  "./Header": 60,
  "flat/directives/FlatButton": 28,
  "webapp/filters/Lcze": 215,
  "webapp/services/Back": 219,
  "webapp/services/Lcze": 226
 } ],
 54: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/game-list.html"), i = "h5GameList";
  t("../filters/LczeChain"), e.directive(i, [ "$parse", t("../services/GroomHandler"), t("../services/Rooms"), function(t, e, i) {
   return {
    restrict: "E",
    replace: !1,
    template: n,
    scope: {
     onClickEmpty: "&",
     onClickJoin: "&"
    },
    controller: [ "$scope", function(n) {
     n.service = i, i.listen(n), n.stats = [ {
      img: "res/h5client/ic_star-64.png",
      key: "'~' + info.avgRating",
      def: 0
     }, {
      img: "res/h5client/ic_info-64.png",
      key: "chain | lczeChain",
      def: 0
     } ], n.parse = function(e, n) {
      return t(e)(n);
     }, n.clickSelect = function(t) {
      var i = n.service.rooms[t];
      e.join(i.id), n.onClickJoin();
     }, n.clickEmpty = function(t) {
      t.stopPropagation(), n.onClickEmpty();
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/game-list.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../filters/LczeChain": 81,
  "../services/GroomHandler": 88,
  "../services/Rooms": 98,
  "../strings/game-list.json": 108,
  "../views/game-list.html": 131,
  "webapp/services/Lcze": 226
 } ],
 55: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/gopt.html"), i = t("jslib/utils/Log"), r = "h5Gopt";
  t("flat/directives/FlatSlider"), t("flat/directives/FlatSwitch"), t("flat/directives/FlatEdit"), 
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: n,
    scope: {
     type: "@",
     key: "@",
     values: "=?",
     value: "=?",
     onRefresh: "&?"
    },
    controller: [ "$filter", "$scope", function(t, e) {
     e.strings = [];
     var n = e.type, o = e.key, s = e.values;
     switch (n) {
     case "switch":
     case "selector":
      for (var a = 0; a < s.length; a++) e.strings.push(t("lcze")("opt_" + o + ":" + s[a]));
      break;

     case "string":
      e.strings.push(t("lcze")("opt_" + o + ":string"));
      break;

     default:
      i.warn(r, "addOpt() unsupported type " + n + " for key " + o);
     }
     e.data = {}, e.$watch("value", function(t) {
      e.data.index = e.values.indexOf(t);
     }), e.$watch("data.index", function(t) {
      i.trace(r, "index changed " + t), e.value = e.values[t];
     }), e.refresh = function() {
      i.trace(r, "refresh()"), e.onRefresh();
     };
    } ],
    link: function(t, e) {
     e.addClass("gopt-" + t.key);
    }
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/gopt.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../strings/gopt.json": 109,
  "../views/gopt.html": 134,
  "flat/directives/FlatEdit": 29,
  "flat/directives/FlatSlider": 30,
  "flat/directives/FlatSwitch": 32,
  "jslib/utils/Log": 187,
  "webapp/services/Lcze": 226
 } ],
 56: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/gopt-info.html"), i = "h5GoptInfo";
  e.directive(i, [ function() {
   return {
    restrict: "E",
    template: n,
    scope: {
     opts: "=",
     hidePublic: "@"
    },
    controller: [ "$scope", function(t) {
     t.items = [], t.$watch("opts", function(e) {
      var n = [], i = Object.keys(e), r = function(e) {
       return t.hidePublic && "public" === e ? !1 : "size" === e ? !1 : !0;
      }, o = i.filter(r).length;
      i.forEach(function(t) {
       "chain" === t && o > 1 || r(t) && n.push({
        string: "opt_" + t + ":" + e[t],
        key: t
       });
      }), n.sort(function(t, e) {
       return 0 === t.key.indexOf("chain") && 0 !== e.key.indexOf("chain") ? -1 : 0 !== t.key.indexOf("chain") && 0 === e.key.indexOf("chain") ? 1 : 0 === t.key.indexOf("chain") ? (t.key.match(/_/g) || []).length > (e.key.match(/_/g) || []).length ? 1 : -1 : t.key > e.key ? -1 : 1;
      }), t.items = n;
     }, !0);
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../views/gopt-info.html": 132
 } ],
 57: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = (t("../../config"), t("../views/gopt-list.html")), i = t("jslib/utils/Log"), r = t("jsgames/OptsParser2"), o = "h5Goptlist";
  t("flat/directives/FlatBubble"), t("webapp/filters/Lcze"), t("./Gopt"), e.directive(o, [ t("webapp/services/CompatStorage"), t("../services/GameOpts"), "$filter", function(t, e) {
   return {
    restrict: "E",
    template: n,
    scope: {
     opts: "=",
     groom: "@",
     sp: "@",
     onRefresh: "&?"
    },
    controller: [ "$scope", function(t) {
     t.optsChain = [], t.optsExtra = [], t.optsMp = [], t.optsSp = [];
     var n = function(e, n, r, s) {
      for (var a = e.length - 1; a >= 0; a--) if (e[a].key === n) {
       e.splice(a, 1);
       break;
      }
      var c;
      c = "string" == typeof r && "string" === r ? "string" : r instanceof Array ? "selector" : "error";
      var u = {
       type: c,
       key: n,
       values: r
      };
      return i.trace(o, "addOpt() '" + n + "' value '" + s + "'"), void 0 !== s && -1 !== r.indexOf(s) ? t.values[n] = s : (i.trace(o, "using default value for '" + n + "'"), 
      t.values[n] = r[0]), 1 === r.length ? i.trace(o, "dont show opt '" + n + "', only 1 value") : e.push(u), 
      u;
     }, s = function(e, n) {
      for (var i = e.length - 1; i >= 0; i--) {
       var r = e[i];
       n[r.key] || (e.splice(i, 1), delete t.opts[r.key]);
      }
     }, a = function(e, i) {
      var r = Object.keys(i);
      r.forEach(function(r) {
       n(e, r, i[r], t.values[r]);
      }, this), s(e, i);
     }, c = function(e) {
      var n = r.getOptsChain(e);
      i.trace(o, "opts for chain ", n), a(t.optsChain, n);
     }, u = function(e) {
      var n = r.getOptsExtra(e);
      i.trace(o, "opts extra for chain", n), a(t.optsExtra, n);
     }, l = function(e) {
      var n = r.getOptsExtra(e, r.TYPE_EXTRA_MP);
      a(t.optsMp, n);
     }, h = function(e) {
      var n = r.getOptsExtra(e, r.TYPE_EXTRA_SP);
      a(t.optsSp, n);
     }, p = function(t) {
      return t.values ? r.chain(t.values) : e.getChain();
     };
     t.$watch(p, function(n) {
      i.trace(o, "watch chain", n), t.chain = n, t.values = e.get(n), i.trace(o, "chain, saved values", t.values), 
      c(n), u(n), l(n), h(n), e.saveChain(n);
     }, !0), t.$watch("values", function(n) {
      i.trace(o, "watch values", n), Object.keys(n).forEach(function(e) {
       t.opts[e] = n[e];
      }), e.save(t.chain, n);
     }, !0), t.refresh = function() {
      t.onRefresh();
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/goptlist.json"));
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/GameOpts": 87,
  "../strings/goptlist.json": 110,
  "../views/gopt-list.html": 133,
  "./Gopt": 55,
  "flat/directives/FlatBubble": 27,
  "jsgames/OptsParser2": 163,
  "jslib/utils/Log": 187,
  "webapp/filters/Lcze": 215,
  "webapp/services/CompatStorage": 220,
  "webapp/services/Lcze": 226
 } ],
 58: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/groom-banner.html"), r = "h5GroomBanner";
  t("./PlayerImage"), e.filter(r + "Filter", [ function() {
   var t;
   return function(e) {
    if (e = parseInt(e, 10), t && t.length === e) return t;
    for (var n = [], i = 0; e > i; i++) n.push(i);
    return t = n, n;
   };
  } ]), e.directive(r, [ t("../services/GroomHandler"), function(t) {
   return {
    restrict: "E",
    template: i,
    scope: {
     cid: "@",
     togglePopup: "&"
    },
    controller: [ "$scope", "$interval", function(e, i) {
     var o = 30 + 5 * Math.floor(6 * Math.random());
     e.startSecs = -1, e.service = t, e.iconsQuick = [ {
      src: "res/h5client/ic_group-64.png",
      get: function() {
       return t.data.info.curr + "/" + t.data.opts.size;
      }
     }, {
      src: "res/h5client/ic_time-64.png",
      get: function() {
       return "~" + o + "s";
      }
     } ], e.icons = [ {
      src: "res/h5client/ic_group-64.png",
      get: function() {
       return t.data.info.curr + "/" + t.data.opts.size;
      }
     }, {
      src: "res/h5client/ic_star-64.png",
      get: function() {
       return "~" + t.data.info.avgRating;
      }
     }, {
      src: "res/h5client/ic_controller-64.png",
      get: function() {
       return "" + t.data.info.gamesPlayed;
      }
     } ], e.getStringWait = function() {
      return t.isQuickmatch() ? "h5_groom_banner_searching" : "h5_groom_banner_waiting";
     }, e.getLeft = function(e) {
      return Math.floor(100 / parseInt(t.data.opts.size, 10) * e) + "%";
     }, e.getRight = function(e) {
      return 100 - Math.min(100, Math.ceil(100 / parseInt(t.data.opts.size, 10) * (e + 1))) + "%";
     };
     var s, a = function() {
      e.startSecs <= 0 || e.startSecs--;
     }, c = function(t) {
      n.trace(r, "onCd", t), e.startSecs = Math.floor(t / 1e3), s = i(a, 1e3);
     }, u = function() {
      i.cancel(s), e.startSecs = -1;
     };
     -1 !== t.msCountdown && c(t.msCountdown - (new Date().getTime() - t.tsCountdownStart)), 
     t.on("cd", c), t.on("cdabort", u), e.$on("$destroy", function() {
      i.cancel(s), t.off("cd", c), t.off("cdabort", u);
     });
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/groom-banner.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/GroomHandler": 88,
  "../strings/groom-banner.json": 111,
  "../views/groom-banner.html": 135,
  "./PlayerImage": 70,
  "jslib/utils/Log": 187,
  "webapp/services/Lcze": 226
 } ],
 59: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("jslib/utils/Log"), r = t("jslib/utils/UtilsDOM"), o = t("jslib/utils/UtilsWindow"), s = t("../views/groom-view.html"), a = "h5GroomView";
  t("webapp/directives/CatchBack");
  var c = [ t("../services/Server"), t("../services/GroomHandler"), t("../services/Autojoin"), "$scope", function(t, e, s, c) {
   c.uri = t.uri(), c.service = e, c.data = {
    urlInvite: s.makeInviteUrl()
   }, c.getValue = function(t) {
    return c.$eval(t);
   }, c.clickInvite = function() {
    c.togglePopup({
     name: "contacts"
    });
   }, c.clickShare = function() {
    var t = r.metaName("h5-fbappid"), e = encodeURIComponent(n.urlGame + "/api/v1/share/closewindow"), c = encodeURIComponent(s.makeInviteUrl());
    i.trace(a, "post to fb", c), o.openInAppBrowser("https://www.facebook.com/v2.0/dialog/share?app_id=" + t + "&display=page&href=" + c + "&redirect_uri=" + e, "Share");
   };
  } ];
  e.directive(a, [ function() {
   return {
    restrict: "E",
    template: s,
    scope: {
     cid: "@",
     togglePopup: "&"
    },
    controller: c
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/groom-view.json"));
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Autojoin": 82,
  "../services/GroomHandler": 88,
  "../services/Server": 99,
  "../strings/groom-view.json": 112,
  "../views/groom-view.html": 136,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsDOM": 193,
  "jslib/utils/UtilsWindow": 198,
  "webapp/directives/CatchBack": 210,
  "webapp/services/Lcze": 226
 } ],
 60: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = "h5Header", r = i + "Icon", o = i + "Section";
  e.directive(o, [ function() {
   return {
    require: "^" + i,
    link: function(t, e, i, r, s) {
     n.trace(o, "link, name: " + i.name), r.registerSection(i.name, e, s);
    }
   };
  } ]), e.directive(r, [ function() {
   return {
    restrict: "E",
    template: t("../views/header-icon.html"),
    scope: {
     tag: "@?",
     img: "@?",
     notify: "@?",
     bind: "=?"
    },
    link: function(t) {
     n.trace(r, "link"), t.onClick = function() {
      t.bind && (t.bind = t.tag);
     };
    }
   };
  } ]), e.directive(i, [ function() {
   return {
    restrict: "E",
    template: t("../views/header.html"),
    transclude: !0,
    scope: {
     title: "@?",
     gradient: "@?",
     onBack: "&?"
    },
    link: function(t, e, o, s, a) {
     n.trace(i, "link"), a(function(t) {
      angular.forEach(t, function(t) {
       if (t.tagName && (n.trace(i, "transclude", t.tagName), t.tagName.replace(/-/g, "") === r.toUpperCase())) {
        var e = angular.element(t);
        s.sections[e.attr("type")].element.append(e);
       }
      });
     });
    },
    controller: [ "$scope", function(t) {
     n.trace(i, "controller"), this.sections = {}, this.registerSection = function(t, e) {
      this.sections[t] = {
       name: t,
       element: e
      }, n.trace(i, "register", this.sections);
     }, t._onBack = function(e) {
      e.stopPropagation(), t.onBack({
       $event: e
      });
     };
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../views/header-icon.html": 137,
  "../views/header.html": 138,
  "jslib/utils/Log": 187
 } ],
 61: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/lobby.html"), i = "h5Lobby";
  t("webapp/directives/Popup"), t("webapp/filters/Lcze"), t("webapp/directives/CatchBack"), 
  t("webapp/directives/IScroll"), t("./Header"), t("./Profile"), t("./LobbyView"), 
  t("./GroomView"), t("./GameList"), t("./MessageThread"), t("./LoginPopup"), t("./EditAvatarPopup"), 
  t("./NamePopup"), t("./RoomFilterPopup"), t("./CreateRoomPopup"), t("./ContactPopup"), 
  t("./NotificationDropdown"), t("../controllers/Lobby"), e.directive(i, [ function() {
   return {
    restrict: "E",
    template: n,
    scope: {
     onBack: "&",
     launchtut: "&",
     launchsp: "&",
     strings: "="
    },
    controller: "H5LobbyCtrl"
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/lobby.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../controllers/Lobby": 44,
  "../strings/lobby.json": 113,
  "../views/lobby.html": 141,
  "./ContactPopup": 46,
  "./CreateRoomPopup": 47,
  "./EditAvatarPopup": 48,
  "./GameList": 54,
  "./GroomView": 59,
  "./Header": 60,
  "./LobbyView": 62,
  "./LoginPopup": 63,
  "./MessageThread": 66,
  "./NamePopup": 67,
  "./NotificationDropdown": 68,
  "./Profile": 75,
  "./RoomFilterPopup": 79,
  "webapp/directives/CatchBack": 210,
  "webapp/directives/IScroll": 213,
  "webapp/directives/Popup": 214,
  "webapp/filters/Lcze": 215,
  "webapp/services/Lcze": 226
 } ],
 62: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/lobby-view.html"), r = "h5LobbyView";
  t("flat/directives/FlatButton"), t("flat/directives/FlatBubble"), t("./PlayerImage"), 
  t("./PlayerInfo"), t("./PlayerList"), e.directive(r, [ t("../services/Me"), t("../services/GroomHandler"), t("../services/Rooms"), t("../services/Contacts"), function(t, e, o, s) {
   return {
    restrict: "E",
    template: i,
    scope: {
     cid: "@",
     togglePopup: "&?"
    },
    controller: [ "$scope", "h5Server", "h5Session", function(e, i, a) {
     e.session = a, e.contacts = s, e.me = t, e.uri = i.uri(), e.bubbleButtonFriends = function(t) {
      switch (n.trace(r, "contacts.bubbleButton()", t), t.index) {
      case 0:
       e.togglePopup({
        name: "contacts"
       });
      }
     }, e.bubbleButtonGames = function(t) {
      switch (n.trace(r, "games.bubbleButton()", t), t.index) {
      case 0:
       o.refresh();
       break;

      case 1:
       e.togglePopup({
        name: "roomfilter"
       });
      }
     };
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Contacts": 84,
  "../services/GroomHandler": 88,
  "../services/Me": 92,
  "../services/Rooms": 98,
  "../views/lobby-view.html": 140,
  "./PlayerImage": 70,
  "./PlayerInfo": 71,
  "./PlayerList": 72,
  "flat/directives/FlatBubble": 27,
  "flat/directives/FlatButton": 28,
  "jslib/utils/Log": 187
 } ],
 63: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("jslib/utils/Log"), r = t("jslib/utils/UUID"), o = t("jslib/utils/UtilsChrome"), s = t("jslib/utils/UtilsString"), a = t("jslib/utils/UtilsWindow"), c = "h5LoginPopup";
  t("flat/directives/FlatButton"), t("flat/directives/FlatEdit"), t("flat/directives/FlatBubble"), 
  t("webapp/filters/Lcze"), t("webapp/directives/CatchBack"), t("./Header"), e.directive(c, [ function() {
   return {
    restrict: "E",
    template: t("../views/login-popup.html"),
    controller: "LoginPopupCtrl",
    link: function() {
     i.trace(c, "init");
    }
   };
  } ]), e.controller("LoginPopupCtrl", [ "$scope", "$timeout", t("../services/Server"), t("../services/Http"), t("webapp/services/CompatStorage"), t("webapp/services/Back"), t("../services/Login"), t("../services/Session"), t("../services/Connection"), t("webapp/services/Analytics"), function(t, e, u, l, h, p, f, d, v, g) {
   i.trace("LoginPopupCtrl", "init"), t.isChromePackaged = o.isChromePackagedApp(), 
   t.Session = d, t.Connection = v, t.data = {
    state: "login",
    login: {
     acc: "",
     pass: "",
     failed: !1,
     request: !1
    },
    register: {
     acc: "",
     pass1: "",
     pass2: "",
     message: void 0,
     result: -1
    }
   };
   var m, y, b, w;
   t.$on("$destroy", function() {
    m && m(), y && y(), w && clearInterval(w);
   }), t.setState = function(e) {
    t.data.state = e;
   }, t.back = function() {
    return "login" !== t.data.state ? void t.setState("login") : void p.back();
   }, t.clickLogin = function() {
    t.data.login.request || (t.data.login.request = !0, f.login(t.data.login.acc, t.data.login.pass, !1).then(function(e) {
     return i.trace(c, "clickLogin() res ", e), 200 !== parseInt(e.status, 10) ? (t.data.login.failed = !0, 
     !1) : (g.exec("send", "event", "login", "local", "success"), void x(e.data.access_token));
    }, function(e) {
     i.trace(c, "clickLogin() res " + e), g.exec("send", "event", "login", "local", "failed"), 
     t.data.login.failed = !0;
    }).then(function() {
     t.data.login.request = !1;
    }));
   }, t.clickLoginGuest = function() {
    t.data.login.request || (t.data.login.request = !0, f.loginGuest().then(function(t) {
     return i.trace(c, "clickLoginGuest() success"), g.exec("send", "event", "login", "guest", "success"), 
     x(t.data.access_token), !0;
    }, function(e) {
     return i.trace(c, "clickLoginGuest() failed " + e), g.exec("send", "event", "login", "guest", "failed"), 
     t.data.login.failed = !0, !0;
    }).then(function() {
     t.data.login.request = !1;
    }));
   }, t.clickRegister = function() {
    var e = t.data.register.acc, n = t.data.register.pass1, r = t.data.register.pass2;
    return i.trace(c, "clickRegister() email " + e), e && 0 !== e.length && s.isEmail(e) ? n && 0 !== n.length && n === r ? (t.data.register.message = "Creating your account...", 
    void f.register(e, n, e).then(function(e) {
     switch (t.data.register.result = e.res, e.res) {
     case 0:
      t.data.register.message = "Account created.", g.exec("send", "event", "register", "success");
      break;

     case 1:
      t.data.register.message = "Email already in use.";
      break;

     case 2:
      t.data.register.message = "Email already in use.";
      break;

     case 6:
      t.data.register.message = "Accountname too long or short";
      break;

     default:
      t.data.register.message = "error";
     }
    }, function() {
     t.data.register.message = "http error";
    })) : void (t.data.register.message = "Passwords do not match.") : void (t.data.register.message = "Invalid email address.");
   }, t.clickRecover = function() {
    a.openSystemBrowser(n.urlGame + "/api/v1/recover/local");
   }, t.signInFacebook = function() {
    _("facebook-" + n.gtype);
   }, t.signInGoogle = function() {
    _("google-" + n.gtype);
   }, t.signInFacebookDebug = function() {
    _("facebook-localdebug");
   }, t.signInGoogleDebug = function() {
    _("google-localdebug");
   };
   var _ = function(e) {
    var n = r.v4(), o = u.uri() + "/api/v2/auth/" + e + "?access_token=" + n;
    if (void 0 !== b) return void i.error(c, "childWindow already opened");
    if (t.data.login.request = !0, b = a.openInAppBrowser(o, "Login"), !b) return void i.warn(c, "error opening childWindow");
    try {
     var s;
     "function" == typeof b.addEventListener ? s = "addEventListener" : "function" == typeof b.attachEvent && (s = "attachEvent"), 
     s && (b[s]("exit", function(t) {
      i.trace(c, "childWindow exit event", t), b = void 0, clearInterval(w), x(n);
     }), b[s]("load", function(t) {
      i.trace(c, "childWindow load event", t);
     }), b[s]("onload", function(t) {
      i.trace(c, "childWindow onload event", t);
     }), b[s]("loadstop", function(t) {
      i.trace(c, "childWindow loadstop event", t);
      var e = t.url;
      e && /(.*)api\/v[0-9]+\/auth\/complete(.*)/.test(e) && (i.trace(c, "childWindow loadstop close, url " + e), 
      b.close(), b = void 0, clearInterval(w), x(n));
     }));
    } catch (l) {
     i.warn(c, "error attaching listeners to childWindow: " + l);
    }
    g.exec("send", "event", "login", e), w = setInterval(function() {
     b.closed && (i.trace(c, "childWindow timeout, closed", b), b = void 0, clearInterval(w), 
     x(n));
    }, 250);
   }, x = function(e) {
    t.data.login.request = !1, l.setAccessToken(e), v.notify();
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/login-popup.json"));
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Connection": 83,
  "../services/Http": 89,
  "../services/Login": 91,
  "../services/Server": 99,
  "../services/Session": 100,
  "../strings/login-popup.json": 114,
  "../views/login-popup.html": 142,
  "./Header": 60,
  "flat/directives/FlatBubble": 27,
  "flat/directives/FlatButton": 28,
  "flat/directives/FlatEdit": 29,
  "jslib/utils/Log": 187,
  "jslib/utils/UUID": 189,
  "jslib/utils/UtilsChrome": 191,
  "jslib/utils/UtilsString": 196,
  "jslib/utils/UtilsWindow": 198,
  "webapp/directives/CatchBack": 210,
  "webapp/filters/Lcze": 215,
  "webapp/services/Analytics": 218,
  "webapp/services/Back": 219,
  "webapp/services/CompatStorage": 220,
  "webapp/services/Lcze": 226
 } ],
 64: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("jslib/utils/Log"), r = t("jslib/utils/Analytics"), o = t("jslib/utils/UtilsWindow"), s = t("../views/menu.html"), a = t("jsgames/Registry"), c = "h5Menu";
  t("webapp/filters/Lcze"), t("flat/directives/FlatSlider"), t("./PrefsPopup"), t("./TutorialPopup"), 
  t("./MenuPage"), e.directive(c, [ t("webapp/services/CompatStorage"), t("../services/Game"), t("../services/Connection"), t("../services/Session"), t("../services/GameOpts"), t("../services/Me"), function(t, e) {
   return {
    restrict: "E",
    template: s,
    scope: {
     onClickMp: "&"
    },
    controller: [ "$scope", function(t) {
     t.refresh = 1, t.state = "home", t.opts = {}, t.config = n, t.popups = {};
     var s = function(t) {
      return t[Math.floor(Math.random() * t.length)];
     };
     t.info = {
      urlDev: n.urlDev,
      urlTerms: n.urlTerms,
      urlGame: n.urlGame,
      urlFb: n.urlFb,
      urlGplus: n.urlGplus,
      urlHelp: n.urlGame + "/api/v1/contact",
      strings: {
       home: {
        title: s(n.menuStrings.home.title),
        slogan: s(n.menuStrings.home.slogan)
       },
       sp: {
        title: s(n.menuStrings.sp.title),
        slogan: s(n.menuStrings.sp.slogan)
       }
      }
     }, t.refreshScroll = function() {
      i.trace(c, "refreshScroll() " + t.refresh), t.refresh++;
     }, t.setState = function(e) {
      t.state = e;
     }, t.clickStart = function() {
      var n = t.opts, i = a.createPlayersSP(n), r = a.createGame(i, n, !1), o = i.filter(function(t) {
       return !t.isBot;
      }).map(function(t) {
       return t.id;
      });
      r.ready(), e.set(r, o);
     }, t.openLink = function(t) {
      o.openSystemBrowser(t);
     }, r.sendAppView("menu");
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/menu.json"));
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Connection": 83,
  "../services/Game": 86,
  "../services/GameOpts": 87,
  "../services/Me": 92,
  "../services/Session": 100,
  "../strings/menu.json": 115,
  "../views/menu.html": 144,
  "./MenuPage": 65,
  "./PrefsPopup": 74,
  "./TutorialPopup": 80,
  "flat/directives/FlatSlider": 30,
  "jsgames/Registry": 165,
  "jslib/utils/Analytics": 185,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsWindow": 198,
  "webapp/filters/Lcze": 215,
  "webapp/services/CompatStorage": 220,
  "webapp/services/Lcze": 226
 } ],
 65: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/menu-page.html"), i = "h5MenuPage";
  e.directive(i, [ "$timeout", function(t) {
   return {
    restrict: "E",
    template: n,
    transclude: !0,
    scope: {
     bind: "@?"
    },
    link: function(e) {
     t(function() {
      e.$emit("iscroll.refresh");
     }, 100);
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../views/menu-page.html": 143
 } ],
 66: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/message-thread.html"), r = "h5MessageThread";
  t("webapp/filters/Timeago"), t("webapp/directives/EnterSubmit"), e.directive(r, [ t("../services/Thread"), t("../services/ThreadReader"), function(t, e) {
   return {
    restrict: "E",
    template: i,
    scope: {
     bind: "@?",
     tid: "@",
     noNotify: "@",
     onClickPlayer: "&?"
    },
    controller: [ "$scope", function(i) {
     i.edit = {
      value: ""
     }, i.clickPlayer = function(t, e) {
      t.stopPropagation(), i.onClickPlayer({
       cid: e
      });
     }, i.send = function() {
      return i.reader ? 0 === i.edit.value.length ? void n.debug(r, "send(), message length 0") : (t.send(i.reader.tid, i.edit.value), 
      void (i.edit.value = "")) : void n.debug(r, "send(), but not reader/tid");
     }, i.$watch("tid", function(t) {
      t && (n.trace(r, "tid changed to " + t), i.reader = e.get(t));
     }), e.attach(i);
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/message-thread.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Thread": 102,
  "../services/ThreadReader": 103,
  "../strings/message-thread.json": 116,
  "../views/message-thread.html": 145,
  "jslib/utils/Log": 187,
  "webapp/directives/EnterSubmit": 212,
  "webapp/filters/Timeago": 216,
  "webapp/services/Lcze": 226
 } ],
 67: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/name-popup.html"), r = "h5NamePopup";
  t("flat/directives/FlatEdit"), t("flat/directives/FlatButton"), t("./Header"), e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    scope: {},
    controller: [ "$scope", "h5Server", "h5Profile", "waBack", function(t, e, i, o) {
     t.busy = !1, t.data = {}, t.back = function() {
      o.back();
     }, t.clickSubmit = function() {
      if (t.busy) return n.info(r, "submit() but is busy");
      t.busy = !0;
      var o = t.data.value;
      n.trace(r, "submit name: " + o), e.post("/api/v1/profile/setname", {
       name: o
      }).then(function(e) {
       switch (n.trace(r, "setname result " + e.data.res), e.data.res) {
       case 0:
        i.update("me");
        break;

       case 1:
        t.message = "name_popup_result_taken";
        break;

       case 2:
        t.message = "name_popup_result_length";
        break;

       case 3:
        t.message = "name_popup_result_invalid";
        break;

       default:
        n.warn(r, "unhandled result " + e.data.res), t.message = "name_popup_result_error";
       }
      }, function(e) {
       n.warn(r, "http setname error " + e.status), t.message = "name_popup_result_error";
      }).then(function() {
       t.busy = !1;
      });
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/name-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../strings/name-popup.json": 117,
  "../views/name-popup.html": 146,
  "./Header": 60,
  "flat/directives/FlatButton": 28,
  "flat/directives/FlatEdit": 29,
  "jslib/utils/Log": 187,
  "webapp/services/Lcze": 226
 } ],
 68: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("../views/notification-dropdown.html"), r = t("jslib/utils/Log"), o = t("jslib/utils/UtilsWindow"), s = "h5NotificationDropdown";
  t("./NotificationList"), e.directive(s, [ t("../services/Connection"), t("../services/Session"), t("../services/Notifications"), t("../services/GroomHandler"), function(t, e, a, c) {
   return {
    restrict: "E",
    template: i,
    scope: {
     onHide: "&?",
     onClickMessage: "&?",
     onClickGroom: "&?",
     onClickAvatar: "&?"
    },
    link: function(e) {
     e.service = a, e.show = !0, e.buttons = [ {
      img: "res/h5client/ic_exit-64.png",
      tag: "exit"
     } ], e.onClick = function(t) {
      t.stopPropagation();
     }, e.onClickButton = function(e) {
      switch (e) {
      case "exit":
       this.hide(), t.stop(!0).then(function() {
        t.start();
       });
      }
     }, e.hide = function() {
      return e.onHide(), !0;
     }, e.onUpdate = function() {}, e.clickManage = function() {
      o.openSystemBrowser(n.urlGame + "/api/v1/account/manage");
     }, e.onSelect = function(t, n) {
      if (n) {
       switch (t.type) {
       case a.TYPE_EDIT_AVATAR:
        r.trace(s, "onSelect() avatar", t), e.onClickAvatar();
        break;

       case "message":
        r.trace(s, "onSelect() message", t), e.onClickMessage({
         cid: t.data.cid
        });
        break;

       case "groominv":
        r.trace(s, "onSelect() groom", t), c.rid || (t.data.rid || r.error(s, "rid missing"), 
        e.onClickGroom({
         rid: t.data.rid
        }));
        break;

       default:
        r.warn(s, "onSelect() unhandled type", t.type);
       }
       e.hide();
      }
     };
    }
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Connection": 83,
  "../services/GroomHandler": 88,
  "../services/Notifications": 93,
  "../services/Session": 100,
  "../views/notification-dropdown.html": 147,
  "./NotificationList": 69,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsWindow": 198
 } ],
 69: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/notification-list.html"), i = t("jslib/utils/Log"), r = "h5NotificationList";
  t("./Avatar"), e.directive(r, [ t("../services/Notifications"), function(t) {
   return {
    restrict: "E",
    template: n,
    scope: {
     onUpdate: "&?",
     onSelect: "&?"
    },
    controller: [ "$scope", function(e) {
     e.service = t, e.dismiss = function(n, o, s) {
      i.debug(r, "dismiss()", o, s), n.stopPropagation(), t.dismiss(o), s && e.onSelect({
       entry: o,
       invoke: s
      });
     };
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Notifications": 93,
  "../views/notification-list.html": 148,
  "./Avatar": 45,
  "jslib/utils/Log": 187
 } ],
 70: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("jslib/utils/UtilsChrome"), r = t("../services/DefaultAvatar"), o = "h5PlayerImage";
  e.directive(o, [ t("../services/Server"), t("../services/Me"), function(t, e) {
   return {
    restrict: "E",
    template: "",
    scope: {
     cid: "@?",
     has: "@?",
     size: "@?",
     bind: "@?"
    },
    link: function(s, a) {
     s.me = e, s.size || (s.size = "small");
     var c = function(t) {
      a.css({
       backgroundImage: "url('" + t + "')"
      });
     }, u = function() {
      var a;
      s.has + "" == "true" && s.cid ? (a = t.uri() + "/api/v1/avatar/" + s.size + "/" + s.cid, 
      ("me" === s.cid || s.cid === e.profile.cid) && (a += "?buf=" + e.avatarBufferId)) : a = r.get(s.cid), 
      i.isChromePackagedApp() ? (n.trace(o, "load using csp " + a), i.cspLoadImage(a, function(t, e) {
       return t ? void n.warn(o, "cspLoadImage err " + t) : void c(e);
      })) : c(a);
     };
     void 0 !== s.bind && (n.trace(o, "bind has value, watching for changes"), s.$watch("bind", function(t, e) {
      n.trace(o, "bind changed", t), t !== e && u();
     })), u();
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/DefaultAvatar": 85,
  "../services/Me": 92,
  "../services/Server": 99,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsChrome": 191
 } ],
 71: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("jslib/utils/Log"), r = t("../views/player-info.html"), o = "h5PlayerInfo";
  e.directive(o, [ t("../services/Profile"), function(t) {
   return {
    restrict: "E",
    template: r,
    scope: {
     cid: "@"
    },
    controller: [ "$scope", function(e) {
     e.stats = [ {
      img: "res/h5client/ic_star-64.png",
      key: "rating_" + n.gtype,
      def: 0
     }, {
      img: "res/h5client/ic_ranking-64.png",
      key: "rank",
      def: "?"
     }, {
      img: "res/h5client/ic_controller-64.png",
      key: "games_count_" + n.gtype,
      def: 0
     } ], e.$watch("cid", function(n) {
      i.trace(o, "cid " + e.cid), n && 0 !== n.length && (e.data = t.get(e.cid));
     });
    } ]
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../services/Profile": 95,
  "../views/player-info.html": 149,
  "jslib/utils/Log": 187
 } ],
 72: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = t("../views/player-list.html"), r = t("jslib/utils/Log"), o = "h5PlayerList";
  e.directive(o, [ "$filter", function(t) {
   return {
    restrict: "E",
    template: i,
    scope: {
     entries: "=",
     buttons: "=?",
     selected: "=?",
     onClick: "&?",
     onClickButton: "&?",
     emptyMessage: "@?",
     showSelect: "@?",
     showStatus: "@?"
    },
    controller: [ "$scope", function(e) {
     r.trace(o, "init", e.entries), e.gtype = n.gtype, e.emptyMessage && 0 !== e.emptyMessage.length || (e.emptyMessage = t("lcze")("h5client_player_list_empty")), 
     e.buttons || (e.buttons = [ {
      img: "res/h5client/ic_chat-128.png",
      tag: "chat"
     } ]), e.stats = [ {
      img: "res/h5client/ic_star-64.png",
      key: "rating_" + n.gtype,
      def: 0
     } ], e.clickPlayer = function(t, n) {
      r.trace(o, "clickPlayer()", n), t.stopPropagation(), t.preventDefault(), e.onClick({
       player: n
      });
     }, e.clickButton = function(t, n, i) {
      t.stopPropagation(), t.preventDefault(), e.onClickButton({
       tag: i.tag,
       index: e.buttons.indexOf(i),
       player: n,
       pindex: e.entries.indexOf(n)
      });
     }, e.getSelectIcon = function(t) {
      return e.selected && e.selected[e.entries.indexOf(t)] === !0 ? "res/h5client/ic_circle_selected.png" : "res/h5client/ic_circle_select.png";
     };
    } ]
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "../views/player-list.html": 150,
  "jslib/utils/Log": 187
 } ],
 73: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/pref.html"), i = t("jslib/utils/Log"), r = "h5Pref";
  e.directive(r, [ t("../services/Prefs"), t("webapp/services/Lcze"), function(t, e) {
   return {
    restrict: "E",
    template: n,
    scope: {
     key: "@"
    },
    controller: [ "$scope", function(n) {
     var o = n.key, s = t.entries[o], a = s.values.map(function(t) {
      return "h5_pref_" + o + ":" + t;
     });
     n.values = e.getArray(a), n.index = s.values.indexOf(s.value), void 0 !== t.values[o] && (n.index = s.values.indexOf(t.values[o])), 
     n.title = "h5_pref_" + n.key + "_title", n.description = "h5_pref_" + n.key + "_description", 
     n.$watch("index", function(e, n) {
      if (e !== n) {
       var a = s.values[e];
       i.trace(r, o + " changed to: " + a), t.values[o] = a, t.save();
      }
     });
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/pref.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Prefs": 94,
  "../strings/pref.json": 119,
  "../views/pref.html": 151,
  "jslib/utils/Log": 187,
  "webapp/services/Lcze": 226
 } ],
 74: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = (t("jslib/utils/Log"), t("jslib/utils/Analytics")), i = "h5PrefsPopup";
  t("webapp/directives/CatchBack"), t("webapp/filters/Lcze"), t("./Header"), t("./Pref"), 
  e.directive(i, [ t("webapp/services/Back"), t("../services/Prefs"), function(e, n) {
   return {
    restrict: "E",
    template: t("../views/prefs-popup.html"),
    controller: [ "$scope", function(t) {
     t.Back = e, t.Prefs = n;
    } ]
   };
  } ]), e.run([ t("../services/Prefs"), function(t) {
   var e = function(t) {
    n.enable("false" !== t.analytics);
   };
   t.on("save", e), t.promise.then(e);
  } ]), e.config([ t("../services/Prefs") + "Provider", t("webapp/services/Lcze") + "Provider", function(e, n) {
   e.add({
    key: "game_sound",
    values: [ "true", "false" ]
   }), e.add({
    key: "analytics",
    values: [ "true", "false" ]
   }), n.json("en", t("../strings/pref-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Prefs": 94,
  "../strings/pref-popup.json": 118,
  "../views/prefs-popup.html": 152,
  "./Header": 60,
  "./Pref": 73,
  "jslib/utils/Analytics": 185,
  "jslib/utils/Log": 187,
  "webapp/directives/CatchBack": 210,
  "webapp/filters/Lcze": 215,
  "webapp/services/Back": 219,
  "webapp/services/Lcze": 226
 } ],
 75: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/profile.html"), r = "h5Profile";
  t("flat/directives/FlatBubble"), t("webapp/directives/CatchBack"), t("webapp/directives/IScroll"), 
  t("./Header"), t("./MessageThread"), t("./PlayerImage"), t("./ProfileFeed"), e.directive(r, [ "$filter", t("../services/Server"), t("../services/Profile"), t("../services/Thread"), t("../services/ThreadReader"), t("../services/Contacts"), function(t, e, o, s, a, c) {
   var u = "res/h5client/profile/ic_add-64.png", l = "res/h5client/profile/ic_remove_outline-64.png";
   return {
    restrict: "E",
    template: i,
    scope: {
     onHide: "&?",
     cid: "@",
     tab: "@"
    },
    controller: [ "$scope", function(t) {
     n.trace(r, "init"), t.data = {
      tab: t.tab ? t.tab : "home",
      tid: void 0
     }, t.$watch("cid", function(e) {
      e && 0 !== e.length && (n.trace(r, "watch cid " + e), t.profile = o.get(e), s.getPrivateTid(e, function(e, i) {
       n.trace(r, "pthread tid " + i), t.data.tid = i;
      }));
     }), t.$watch("data.tab", function(e) {
      switch (n.trace(e, "data.tab " + e), e) {
      case "home":
       a.watch(void 0);
       break;

      case "chat":
       a.watch(t.data.tid);
      }
     }), t.getContactIcon = function() {
      return t.profile && t.profile.isContact ? l : u;
     }, t.clickContact = function() {
      t.profile && (t.profile.isContact ? c.remove(t.cid).then(function() {
       o.update(t.cid);
      }) : c.add(t.cid).then(function() {
       o.update(t.cid);
      }));
     }, t.$on("$destroy", function() {});
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/Contacts": 84,
  "../services/Profile": 95,
  "../services/Server": 99,
  "../services/Thread": 102,
  "../services/ThreadReader": 103,
  "../views/profile.html": 154,
  "./Header": 60,
  "./MessageThread": 66,
  "./PlayerImage": 70,
  "./ProfileFeed": 76,
  "flat/directives/FlatBubble": 27,
  "jslib/utils/Log": 187,
  "webapp/directives/CatchBack": 210,
  "webapp/directives/IScroll": 213
 } ],
 76: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/profile-feed.html"), r = "h5ProfileFeed";
  e.directive(r, [ function() {
   return {
    restrict: "E",
    template: i,
    scope: {
     cid: "@"
    },
    controller: [ "$scope", "$parse", "h5Server", function(t, e, i) {
     t.feed = [], t.server = i.uri(), t.$watch("cid", function(e) {
      e && 0 !== e.length && (n.trace(r, "cid changed to " + e), i.post("/api/v1/profile/feed", {
       cid: e
      }).then(function(e) {
       n.trace(r, "got feed", e.data), t.feed = e.data, t.$emit("iscroll.refresh");
      }));
     }), t.gameStats = [ {
      img: "res/h5client/ic_star-64.png",
      expr: "rating"
     }, {
      img: "res/h5client/ic_info-64.png",
      expr: "chain | lczeChain"
     } ], t.parse = function(t, n) {
      return e(t)(n);
     }, t.filterCid = function(e) {
      return e.cid === t.cid ? !1 : !0;
     };
    } ]
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "../views/profile-feed.html": 153,
  "jslib/utils/Log": 187
 } ],
 77: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../views/quickmatch-view.html"), i = "h5QuickmatchView";
  t("flat/directives/FlatBubble"), t("./GoptInfo"), t("./GroomBanner"), e.directive(i, [ t("../services/GroomHandler"), "$filter", function(t, e) {
   return {
    restrict: "E",
    template: n,
    scope: {},
    controller: [ "$scope", function(n) {
     n.service = t, n.getButtonCancel = function() {
      return t.isLeaveAllowed() ? e("lcze")("button_cancel") : Math.floor((t.msCountdown - (new Date().getTime() - t.tsCountdownStart)) / 1e3) + "s";
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/quickmatch-view.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/GroomHandler": 88,
  "../strings/quickmatch-view.json": 120,
  "../views/quickmatch-view.html": 155,
  "./GoptInfo": 56,
  "./GroomBanner": 58,
  "flat/directives/FlatBubble": 27,
  "webapp/services/Lcze": 226
 } ],
 78: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/reconnect-popup.html"), r = "h5ReconnectPopup";
  t("webapp/filters/Lcze"), t("../directives/Header"), e.directive(r, [ t("../services/GroomHandler"), t("webapp/services/Back"), function(t, e) {
   return {
    restrict: "E",
    template: i,
    scope: {
     onCancel: "&"
    },
    controller: [ "$scope", function(i) {
     n.trace(r, "init"), i.service = t, i.clickCancel = function(t) {
      n.trace(r, "clickCancel()"), t.stopPropagation(), e.back();
     };
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/reconnect-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../directives/Header": 60,
  "../services/GroomHandler": 88,
  "../strings/reconnect-popup.json": 121,
  "../views/reconnect-popup.html": 156,
  "jslib/utils/Log": 187,
  "webapp/filters/Lcze": 215,
  "webapp/services/Back": 219,
  "webapp/services/Lcze": 226
 } ],
 79: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("jslib/utils/Log"), i = t("../views/room-filter-popup.html"), r = "h5RoomFilterPopup";
  t("flat/directives/FlatButton"), t("flat/directives/FlatBubble"), t("flat/directives/FlatSliderlist"), 
  t("webapp/filters/Lcze"), t("./Header"), e.directive(r, [ t("../services/RoomFilter"), t("webapp/services/Analytics"), function(t, e) {
   return {
    restrict: "E",
    template: i,
    scope: {
     onHide: "&"
    },
    controller: [ "$scope", function(i) {
     n.trace(r, "init"), i.service = t, i.opts = {}, i.add = function(e, n) {
      t.add(e, n);
     }, i.remove = function(e) {
      t.remove(e);
     }, e.sendAppView("room-filter-popup");
    } ]
   };
  } ]), e.config([ t("webapp/services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/room-filter-popup.json"));
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/RoomFilter": 97,
  "../strings/room-filter-popup.json": 122,
  "../views/room-filter-popup.html": 157,
  "./Header": 60,
  "flat/directives/FlatBubble": 27,
  "flat/directives/FlatButton": 28,
  "flat/directives/FlatSliderlist": 31,
  "jslib/utils/Log": 187,
  "webapp/filters/Lcze": 215,
  "webapp/services/Analytics": 218,
  "webapp/services/Lcze": 226
 } ],
 80: [ function(t) {
  "use strict";
  var e = t("../../ngmodule"), n = t("../../config"), i = "h5TutorialPopup";
  t("./ExampleTutorial"), e.directive(i, [ "$compile", "$controller", t("webapp/services/Back"), function(t, e, i) {
   return {
    restrict: "E",
    scope: {},
    compile: function() {
     return function(r, o) {
      r.Back = i;
      var s = [ n.gtype ], a = n.tutorialTemplates.find(s);
      if (!a) throw new Error("no template found for " + JSON.stringify(s));
      a.html && (o.html(a.html), t(o.contents())(r)), a.controller && e(a.controller, {
       $scope: r
      });
     };
    }
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "./ExampleTutorial": 50,
  "webapp/services/Back": 219
 } ],
 81: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = e.exports = "lczeChain";
  n.filter(i, [ "$filter", function(t) {
   return function(e) {
    if (!e || 0 === e.length) return "";
    var n = "";
    if (e.length <= 1) n = t("lcze")("opt_chain:" + e[0]); else for (var i = "opt_chain_" + e[0], r = 1; r < e.length; r++) n += (1 === r ? "" : ", ") + t("lcze")(i + ":" + e[r]), 
    i += "_" + e[r];
    return n;
   };
  } ]);
 }, {
  "../../ngmodule": 158
 } ],
 82: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = t("jslib/utils/UtilsLocation"), s = e.exports = "h5Autojoin", a = "room", c = "h5_autojoin_no_longer_exist";
  n.factory(s, [ "$rootScope", t("webapp/services/CompatStorage"), t("./Server"), t("./GroomHandler"), t("./Rooms"), function(t, e, n, u, l) {
   var h = !1, p = 0, f = o.gup(a), d = function() {
    r.trace(s, "check() " + f), v(), f && l.info(f).then(function(t) {
     return h = !0, t.data ? t.data.info.curr >= parseInt(t.data.opts.size, 10) ? void r.debug(s, "check() rid " + f + " is full") : void (u.rid || (r.debug(s, "check() do autojoin " + f), 
     u.join(f))) : (r.debug(s, "check() rid " + f + " does not exist"), void e.set(c, f));
    });
   }, v = t.$watch(function() {
    return n.ready;
   }, function(t) {
    t && d();
   });
   return {
    key: a,
    get: function() {
     return f;
    },
    has: function(n) {
     p++, e.get(c, function(e, i) {
      f && i !== f && t.$apply(function() {
       n(null, f, p);
      });
     });
    },
    makeInviteUrl: function() {
     var t = i.urlGame + "/joingame/" + u.rid;
     return "true" === o.gup("fb_canvas") && (t = o.addParameterTo(i.urlFbApp, this.key, encodeURIComponent(u.rid), !1)), 
     t;
    }
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "./GroomHandler": 88,
  "./Rooms": 98,
  "./Server": 99,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsLocation": 195,
  "webapp/services/CompatStorage": 220
 } ],
 83: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Connection";
  n.factory(r, [ "$rootScope", t("./Session"), t("./Server"), function(t, e, n) {
   var o = function() {
    this.active = !1, this.request = !1, this._cbWatchServer = void 0, this._debugConnectDelay = -1, 
    this._toCheckSession = void 0, this._tryCountSession = 0, this._onReady = function() {}.bind(this), 
    this._onClose = function() {
     this._startSessionCheck(!0);
    }.bind(this);
   };
   return o.prototype.COUNT_CONNECT_FAIL = 100, o.prototype.MS_DELAY_MIN = 100, o.prototype.MS_DELAY_MAX = 2e4, 
   o.prototype.start = function() {
    i.trace(r, "start()"), this._cbWatchServer || (this.active = !0, this._tryCountSession = 0, 
    n.on("ready", this._onReady), n.on("close", this._onClose), this._startSessionCheck(!0));
   }, o.prototype.stop = function(o) {
    if (i.trace(r, "stop()"), !t.$$phase) throw new Error("no digest running");
    return this.active = !1, this.request = !1, clearTimeout(this._toCheckSession), 
    n.off("ready", this._onReady), n.off("close", this._onClose), n.disconnect(), e.reset(), 
    o ? e.logout() : void 0;
   }, o.prototype.notify = function() {
    this._startSessionCheck(!0);
   }, o.prototype._startSessionCheck = function(t) {
    if (this.active) {
     this.request = !0;
     var o = this._getConnectDelay(this._tryCountSession), s = function() {
      this._tryCountSession = 0, this.request = !1;
     }.bind(this), a = function() {
      return this._tryCountSession++, this._tryCountSession > this.COUNT_CONNECT_FAIL ? void i.warn(r, "check session failed, too many retries") : void e.check(t).then(function(e) {
       return e ? void n.connect(function(e) {
        return e ? this._startSessionCheck(t) : void s();
       }.bind(this)) : void s();
      }.bind(this), function() {
       this._startSessionCheck(t);
      }.bind(this));
     }.bind(this);
     i.trace(r, "_startSessionCheck() " + t, o), o > 0 ? this._toCheckSession = setTimeout(a, o) : a();
    }
   }, o.prototype._getConnectDelay = function(t) {
    return -1 !== this._debugConnectDelay ? this._debugConnectDelay : (this.MS_DELAY_MAX - this.MS_DELAY_MIN) / this.COUNT_CONNECT_FAIL * t;
   }, o.prototype.debugSetDelay = function(t) {
    this._debugConnectDelay = t;
   }, new o();
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  "./Session": 100,
  "jslib/utils/Log": 187
 } ],
 84: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Contacts";
  n.factory(r, [ "$rootScope", t("./Server"), function(t, e) {
   function n() {
    this._initialized = !1, this.contacts = [], this.contactsOnline = [], this.countOnline = 0, 
    e.on("json", function(e) {
     if ("notify" === e.t) switch (e.a) {
     case "buddystatus":
      i.trace(r, "buddy status changed", e.cid, e.status), this.contacts.forEach(function(t) {
       t.cid === e.cid && (i.trace(r, "found & update contact status", e.status), t.status = e.status);
      }, this), this._updateSort(), this._updateOnline(), t.$apply();
     }
    }.bind(this)), e.on("disconnect", function() {
     this.reset();
    }.bind(this)), t.$on("h5client.session.active", function(t, e) {
     e && this.update();
    }.bind(this));
   }
   return n.prototype.reset = function() {
    i.trace(r, "reset()"), this._initialized = !1, this.contacts.splice(0, this.contacts.length);
   }, n.prototype.update = function() {
    return e.post("/api/v1/contact/getall", {
     online: 0
    }).then(function(t) {
     i.trace(r, "contacts update", t.data.contacts), this.contacts.splice(0, this.contacts.length), 
     this.contacts.push.apply(this.contacts, t.data.contacts), this._updateSort(), this._updateOnline(), 
     this._initialized = !0;
    }.bind(this), function() {
     i.warn(r, "error update");
    }.bind(this));
   }, n.prototype._updateSort = function() {
    this.contacts.sort(function(t, e) {
     var n = parseInt(t.status, 10) || 0, i = parseInt(e.status, 10) || 0;
     if (0 !== n && 0 !== i) {
      var r = n - i;
      return 0 !== r ? r : t.username > e.username;
     }
     return 0 !== n ? -1 : 0 !== i ? 1 : t.username > e.username ? 1 : 0;
    });
   }, n.prototype._updateOnline = function() {
    this.countOnline = 0, this.contactsOnline.splice(0, this.contactsOnline.length), 
    this.contacts.forEach(function(t) {
     "0" !== t.status && (this.countOnline++, this.contactsOnline.push(t));
    }, this);
   }, n.prototype.add = function(t, n) {
    return i.trace(r, "add contact", t), e.post("/api/v1/contact/add", {
     cid: t
    }).then(function() {
     this.update(), n && n();
    }.bind(this), function(t) {
     i.warn(r, "error adding contact " + t.status);
    }.bind(this));
   }, n.prototype.remove = function(t, n) {
    return i.trace(r, "remove contact", t), e.post("/api/v1/contact/remove", {
     cid: t
    }).then(function() {
     this.update(), n && n();
    }.bind(this), function(t) {
     i.warn(r, "error removing contact " + t.status);
    }.bind(this));
   }, new n();
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  "jslib/utils/Log": 187
 } ],
 85: [ function(t, e) {
  "use strict";
  var n = t("jslib/hash/HashRing"), i = new n(21);
  e.exports = {
   get: function(t) {
    return "res/h5client/avatar-default/small/default-" + i.index(t) + ".jpg";
   }
  };
 }, {
  "jslib/hash/HashRing": 174
 } ],
 86: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = e.exports = "h5Game";
  n.factory(i, [ function() {
   return {
    instance: void 0,
    pidsLocal: void 0,
    set: function(t, e) {
     this.instance = t, this.pidsLocal = e;
    },
    unset: function() {
     delete this.instance, delete this.pidsLocal;
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158
 } ],
 87: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = t("jslib/utils/Store"), s = t("jsgames/OptsParser2"), a = e.exports = "h5GameOpts", c = function() {
   this._chain = s.getDefaultChain(i.gtype), this._values = {}, o.get(this.PKEY, function(t, e) {
    r.trace(a, "loaded last values"), e && (this._values = JSON.parse(e));
   }.bind(this)), o.get(this.PKEY_CHAIN, function(t, e) {
    if (r.trace(a, "loaded last chain"), e) {
     var n = JSON.parse(e);
     s.validateChain(n, !1) && (this._chain = n);
    }
   }.bind(this));
  };
  c.prototype.PKEY = "h5_gopts_values_8_" + i.gtype, c.prototype.PKEY_CHAIN = "h5_gopts_chain_" + i.gtype, 
  c.prototype.get = function(t) {
   var e = t.join(":");
   return this._values[e] || (this._values[e] = JSON.stringify(s.getDefaults(t, [ s.TYPE_EXTRA_SP, s.TYPE_EXTRA_MP ]))), 
   JSON.parse(this._values[e]);
  }, c.prototype.save = function(t, e) {
   this._values[t.join(":")] = JSON.stringify(e), o.set(this.PKEY, JSON.stringify(this._values));
  }, c.prototype.getChain = function() {
   return this._chain;
  }, c.prototype.saveChain = function(t) {
   this._chain = t, o.set(this.PKEY_CHAIN, JSON.stringify(this._chain));
  }, n.factory(a, [ function() {
   return new c();
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "jsgames/OptsParser2": 163,
  "jslib/utils/Log": 187,
  "jslib/utils/Store": 188
 } ],
 88: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/event/EventEmitter"), r = t("jslib/utils/Log"), o = t("jsgames/Player"), s = t("jsgames/Registry"), a = e.exports = "h5GroomHandler";
  n.factory(a, [ "$rootScope", "$q", t("./Server"), t("./Game"), function(t, e, n, c) {
   function u() {
    this.request = void 0, this.rid = void 0, this.tid = void 0, this.rejoinStatus = this.REJOIN_SUCCESS, 
    this.data = {}, this.msCountdown = -1, this.tsCountdownStart = -1, this.firstGame = !0, 
    this.debugInstantBot = !1, this.game = void 0, this.mpHandler = void 0, this._joinDeferred = void 0, 
    this._toRejoin = void 0, this._launchScopes = [], n.on("ready", function() {
     this.rid;
    }.bind(this)), n.on("reconnect", function() {
     this.rid && this._rejoin(this.rid);
    }.bind(this)), n.on("close", function() {
     this.rid && this._rejoinStatus(this.REJOIN_CONLOST);
    }.bind(this)), n.on("json", function(e) {
     if ("gr" === e.t) switch (e.a) {
     case "recon":
      t.$apply(function() {
       clearTimeout(this._toRejoin), this._rejoinStatus(e.res);
      }.bind(this));
      break;

     case "join":
      r.trace(a, "join result " + e.res), t.$apply(function() {
       var t = e.res;
       this.request && (this.request.result = t), 0 === t ? (this.rid = e.rid, this.tid = e.tid, 
       this.data = e.data, this._joinDeferred.resolve(this.rid), r.trace(a, "joined rid " + this.rid + " tid " + this.tid, e.data)) : this._joinDeferred.reject(t), 
       this.emit("join", e.res, this.rid, e.data);
      }.bind(this));
      break;

     case "leave":
      r.trace(a, "leave res '" + e.res + "' rid '" + this.rid + "'"), delete this.rid, 
      this._reset(), this.emit("leave");
      break;

     case "pkt":
      r.debug(a, "pkt ", e.json), void 0 !== this.mpHandler && this.mpHandler.handle(e.json);
      break;

     case "update2":
      t.$apply(function() {
       this.data = e.data, this.emit("update", this.data);
      }.bind(this));
      break;

     case "start2":
      this.msCountdown = -1, this.tsCountdownStart = -1, this._start(e);
      break;

     case "cd":
      t.$apply(function() {
       this.msCountdown = e.ms, this.tsCountdownStart = new Date().getTime(), this.emit("cd", this.msCountdown, this.tsCountdownStart);
      }.bind(this));
      break;

     case "cdabort":
      t.$apply(function() {
       this.tsCountdownStart = -1, this.msCountdown = -1, this.emit("cdabort");
      }.bind(this));
     }
    }.bind(this));
   }
   u.prototype = Object.create(i.prototype), u.prototype.MS_GROOM_RETURN = 3e4, u.prototype.MS_RECON_REQUEST_TIMEOUT = 1e4, 
   u.prototype.REJOIN_WAITING = 2, u.prototype.REJOIN_FAILED = 1, u.prototype.REJOIN_SUCCESS = 0, 
   u.prototype.REJOIN_CONLOST = -1, u.prototype._reset = function() {
    this.rejoinStatus = this.REJOIN_SUCCESS, this.msCountdown = -1, this.data = {}, 
    this.firstGame = !0;
   }, u.prototype.addLaunchScope = function(t) {
    this._launchScopes.push(t);
   }, u.prototype.removeLaunchScope = function(t) {
    var e = this._launchScopes.indexOf(t);
    -1 !== e && this._launchScopes.splice(e, 1);
   }, u.prototype._getLaunchScope = function() {
    return 0 === this._launchScopes.length ? !1 : this._launchScopes[this._launchScopes.length - 1];
   }, u.prototype.create = function(t, i) {
    if (void 0 !== this.rid) throw new Error("already joined a room, must leave() before join() again");
    return this._reset(), this.request = {
     opts: t,
     result: -1
    }, n.send({
     t: "gr",
     a: "create2",
     opts: t,
     itn: i
    }), this._joinDeferred = e.defer(), this._joinDeferred;
   }, u.prototype.join = function(t) {
    if (void 0 !== this.rid) throw new Error("already joined a room, must leave() before join() again");
    return this._reset(), this.request = {
     rid: t,
     result: -1
    }, n.send({
     t: "gr",
     a: "join",
     rid: t
    }), this.emit("joinreq", t), this._joinDeferred = e.defer(), this._joinDeferred;
   }, u.prototype.leave = function() {
    r.trace(a, "send leave request"), clearTimeout(this._toRejoin), this._joinDeferred.reject("leave"), 
    delete this.rid, delete this.tid, delete this.request, n.send({
     t: "gr",
     a: "leave"
    }), this._reset();
   }, u.prototype.autoLeave = function(t) {
    var e = new Date().getTime(), n = function() {
     var t = this.MS_GROOM_RETURN - (new Date().getTime() - e);
     return 0 >= t ? 0 : t;
    }.bind(this), i = setInterval(function() {
     t && t(n());
    }, 1e3), r = setTimeout(function() {
     this.leave(), clearInterval(i), t && t(0);
    }.bind(this), this.MS_GROOM_RETURN);
    return {
     cancel: function() {
      clearTimeout(r), clearInterval(i);
     },
     remain: function() {
      return n();
     }
    };
   }, u.prototype._start = function(e) {
    r.debug(a, "_start, sid local " + e.sid);
    for (var n = [], i = 0; i < e.players.length; i++) {
     var u = e.players[i], l = new o(u.id, u.team, u.name);
     l.cid = u.cid, l.avatar = u.avatar, n.push(l);
    }
    if (void 0 !== this.mpHandler && this.mpHandler.destroy(), void 0 !== this.game && this.game.abort(), 
    this.firstGame = !1, this.game = s.createGame(n, e.opts, !0), this.mpHandler = s.createMPHandler(this, this.game, e.sid), 
    this.game.ready(), c.instance) throw new Error("Game already has an instance");
    t.$apply(function() {
     this.emit("beforestart", e.res, this.game, this.mpHandler), c.set(this.game, [ e.sid ], !0), 
     this.emit("afterstart", e.res);
    }.bind(this));
   }, u.prototype._rejoin = function(e) {
    r.debug(a, "try to rejoin last room '" + e + "'"), this._rejoinStatus(this.REJOIN_WAITING), 
    clearTimeout(this._toRejoin), this._toRejoin = setTimeout(function() {
     r.debug(a, "rejoin() failed"), t.$apply(function() {
      this._rejoinStatus(this.REJOIN_FAILED);
     }.bind(this));
    }.bind(this), this.MS_RECON_REQUEST_TIMEOUT), n.send({
     t: "gr",
     a: "join",
     rid: e
    });
   }, u.prototype._rejoinStatus = function(e) {
    if (r.trace(a, "_rejoinStatus() " + e), !t.$$phase) throw new Error("_rejoinStatus without digest");
    this.rejoinStatus = e, this.emit("rejoin", e);
   }, u.prototype.invite = function(t) {
    n.send({
     t: "gr",
     a: "invite",
     cids: t
    });
   }, u.prototype.sendPkt = function(t) {
    return void 0 === this.rid ? void r.error(a, "send pkt to gr, but currently not joined") : void n.send({
     t: "gr",
     a: "pkt",
     json: t
    });
   }, u.prototype.debugChangeRid = function(t) {
    this.rid = t;
   }, u.prototype.debugSetInstantBot = function() {
    this.debugInstantBot = !0;
   }, u.prototype.isQuickmatch = function() {
    return this.rid && this.data.opts && "quick" === this.data.opts["public"];
   }, u.prototype.isLeaveAllowed = function() {
    return -1 === this.msCountdown;
   };
   var l = new u();
   return l;
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Game": 86,
  "./Server": 99,
  "jsgames/Player": 164,
  "jsgames/Registry": 165,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 89: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Http";
  n.factory(r, [ "$q", "$rootScope", "$http", t("webapp/services/CompatStorage"), function(t, e, n, o) {
   var s = function() {
    this._uri = void 0, this._accessToken = -1;
   };
   return s.prototype.setUri = function(t) {
    this._uri = t, this._pkeyAccessToken = "h5_access_token_" + t;
   }, s.prototype._post = function(t, e, i, r) {
    if (!t) throw new Error("uri missing");
    if (e = e || {}, e.access_token) throw new Error("cannot override access_token");
    return e.access_token = r, n({
     method: "POST",
     url: this._uri + t,
     data: e,
     responseType: "json",
     timeout: i
    });
   }, s.prototype.post = function(t, e, n) {
    if (!t) throw new Error("uri missing");
    return -1 !== this._accessToken ? this._post(t, e, n, this._accessToken) : this._queue(this._post.bind(this, t, e, n));
   }, s.prototype._get = function(t, e, i, r) {
    if (!t) throw new Error("uri missing");
    return n({
     method: "GET",
     url: this._uri + t + "?access_token=" + r,
     data: e,
     responseType: "json",
     timeout: i
    });
   }, s.prototype.get = function(t, e, n) {
    if (!t) throw new Error("uri missing");
    return -1 !== this._accessToken ? this._get(t, e, n, this._accessToken) : this._queue(this._get.bind(this, t, e, n));
   }, s.prototype.setAccessToken = function(t) {
    this._accessToken = t, o.set(this._pkeyAccessToken, t);
   }, s.prototype.getAccessToken = function(t) {
    o.get(this._pkeyAccessToken, function(e, n) {
     i.trace(r, "got access_token", this._accessToken), t(e, n ? n : void 0);
    }.bind(this));
   }, s.prototype._queue = function(e) {
    var n = t.defer();
    return this._queued || (i.trace(r, "queue request, need to resolve access_token first"), 
    this._queued = [], this.getAccessToken(function(t, e) {
     this._accessToken = e, this._queued.forEach(function(t) {
      t.fn(e).then(t.deferred.resolve, t.deferred.reject, t.deferred.notify);
     }, this);
    }.bind(this))), this._queued.push({
     fn: e,
     deferred: n
    }), n.promise;
   }, new s();
  } ]);
 }, {
  "../../ngmodule": 158,
  "jslib/utils/Log": 187,
  "webapp/services/CompatStorage": 220
 } ],
 90: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = e.exports = "h5Inbox";
  n.factory(i, [ "$rootScope", t("./Server"), t("./ThreadReader"), function(t, e, n) {
   return {
    tid: void 0,
    reader: void 0,
    select: function(t) {
     this.tid = t, this.reader = n.get(t);
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  "./ThreadReader": 103
 } ],
 91: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("async"), r = t("jslib/utils/Log"), o = t("jslib/hash/SHA512"), s = t("jslib/utils/UUID"), a = t("jslib/event/EventEmitter"), c = e.exports = "h5LoginHandler", u = "login_guest_acc", l = "login_guest_pass";
  n.factory(c, [ "$q", t("./Server"), t("webapp/services/CompatStorage"), function(t, e, n) {
   function h() {}
   return h.prototype = Object.create(a.prototype), h.prototype.register = function(n, i, s, a) {
    return e.post("/api/v1/register/local", {
     acc: n,
     hash: o(i),
     email: s
    }).then(function(t) {
     return r.debug(c, "register result: " + t.status), a && a(t.status, t.data), t.data;
    }.bind(this), function() {
     return t.reject(!1);
    }.bind(this));
   }, h.prototype.login = function(t, n, i) {
    return e.post("/api/v1/auth/local", {
     user: t,
     pass: o(n),
     guest: i
    });
   }, h.prototype.loginGuest = function() {
    var e = t.defer();
    return i.auto({
     guestAcc: function(t) {
      n.get(u, t);
     },
     guestPass: function(t) {
      n.get(l, t);
     },
     register: [ "guestAcc", "guestPass", function(t, e) {
      var i = {
       acc: e.guestAcc,
       pass: e.guestPass
      };
      i.acc ? (r.trace(c, "use existing guest account", i.acc, i.pass), t(null, i)) : (i.acc = s.v4(), 
      i.pass = s.v4(), r.trace(c, "register new guest account", i.acc), this.register(i.acc, i.pass, "guest-email-" + s.v4(), function(e, o) {
       200 !== e || 0 !== o.res ? (r.error(c, "register error, status: " + e + ", result code: " + o.res), 
       t("error register account " + e)) : (r.debug(c, "new guest account registered"), 
       n.set(u, i.acc), n.set(l, i.pass), t(null, i));
      }.bind(this)));
     }.bind(this) ],
     login: [ "register", function(t, e) {
      this.login(e.register.acc, e.register.pass, !0).then(function(e) {
       t(null, {
        status: e.status,
        data: e.data
       });
      }.bind(this), function(e) {
       401 === parseInt(e.status, 10) && (r.warn(c, "login unauthorized, account invalid. reset"), 
       n.rem(u), n.rem(l)), t("login-error-" + e.status);
      }.bind(this));
     }.bind(this) ]
    }, function(t, n) {
     return t ? (r.warn(c, "error loginGuest " + t), void e.reject(t)) : void e.resolve({
      data: n.login.data
     });
    }), e.promise;
   }, h.prototype.deleteGuest = function() {
    n.rem(u), n.rem(l);
   }, new h();
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  async: 159,
  "jslib/event/EventEmitter": 172,
  "jslib/hash/SHA512": 176,
  "jslib/utils/Log": 187,
  "jslib/utils/UUID": 189,
  "webapp/services/CompatStorage": 220
 } ],
 92: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Me";
  n.factory(r, [ "$rootScope", t("webapp/services/CompatStorage"), t("./Server"), t("./Profile"), t("./Session"), t("./Notifications"), function(t, e, n, o, s, a) {
   var c = {
    avatarBufferId: 0,
    profile: o.get("me", !0),
    update: function() {
     return i.trace(r, "update()"), o.update("me").then(function(t) {
      return t.avatar || a.showAvatarNoti(), !0;
     });
    }
   };
   return c.incrAvatarBuffer = function() {
    c.avatarBufferId++, e.set("h5client.bufid.avatar", c.avatarBufferId);
   }, e.get("h5client.bufid.avatar", function(t, e) {
    i.trace(r, "restore bufid " + e), c.avatarBufferId = parseInt(e, 10) || 0;
   }), s.active && c.update(), t.$on("h5client.session.active", function(t, e) {
    e && c.update();
   }), c;
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Notifications": 93,
  "./Profile": 95,
  "./Server": 99,
  "./Session": 100,
  "jslib/utils/Log": 187,
  "webapp/services/CompatStorage": 220
 } ],
 93: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = e.exports = "h5Notifications", s = "message", a = "noti_dismiss";
  n.factory(o, [ "$rootScope", t("webapp/services/CompatStorage"), t("./Server"), t("./Session"), t("./Thread"), function(t, e, n, c, u) {
   function l() {
    this._initialized = !1, this._watching = {}, this.feed = [], this.count = 0, n.on("json", function(e) {
     if ("notify" === e.t) switch (e.a) {
     case "cotasessn":
      break;

     case "message":
      this._watching[e.tid] ? u.setRead(e.tid, e.mid) : this.update();
      break;

     case "groominv":
      var n = e.rid, s = e.profile;
      if (n || r.error(o, "roomId missing"), s || r.error(o, "profileInvite missing"), 
      e.opts.chain !== i.gtype) return;
      r.trace(o, "got groom invite", n), this._add("grinv_" + n, this.TYPE_GROOM_INV, new Date().getTime(), {
       profile: s,
       rid: n
      }), this._apply(), t.$apply();
     }
    }.bind(this)), t.$on("h5client.session.active", function(t, e) {
     e && this.update();
    }.bind(this));
   }
   return l.prototype.TYPE_EDIT_AVATAR = "editavatar", l.prototype.TYPE_GROOM_INV = "groominv", 
   l.prototype.dismiss = function(t) {
    switch (r.trace(o, "dismiss", t), t.type) {
    case s:
     u.setRead(t.data.tid, t.data.mid);
     break;

    case this.TYPE_GROOM_INV:
     break;

    case this.TYPE_EDIT_AVATAR:
     e.set(a, "true");
    }
    var n = this.feed.indexOf(t);
    -1 !== n && this.feed.splice(n, 1), this.count = this.feed.length;
   }, l.prototype.setWatchingTid = function(t, e) {
    r.trace(o, "setWatchingTid", t, e), e ? this._watching[t] = !0 : delete this._watching[t];
   }, l.prototype.update = function() {
    n.post("/api/v1/msg/unread", {}).then(function(t) {
     var e = t.data.inbox;
     r.trace(o, "feed update", e), e.forEach(function(t) {
      this._add("tid_" + t.tid, s, t.ts, t);
     }.bind(this)), this._apply();
    }.bind(this), function() {
     r.warn(o, "error get feed");
    }.bind(this));
   }, l.prototype._apply = function() {
    this.count = this.feed.length;
   }, l.prototype._add = function(t, e, n, i) {
    if (!t) throw new Error("id missing");
    r.trace(o, "_add() id " + t);
    for (var s = this.feed.length - 1; s >= 0; s--) {
     var a = this.feed[s];
     if (a.id === t) return a.type = e, a.ts = n, void (a.data = i);
    }
    this.feed.push({
     id: t,
     type: e,
     ts: n,
     data: i
    });
   }, l.prototype.showAvatarNoti = function() {
    e.get(a, function(t, e) {
     e + "" != "true" && (this._add(this.TYPE_EDIT_AVATAR, this.TYPE_EDIT_AVATAR, new Date().getTime(), {}), 
     this._apply());
    }.bind(this));
   }, new l();
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "./Server": 99,
  "./Session": 100,
  "./Thread": 102,
  "jslib/utils/Log": 187,
  "webapp/services/CompatStorage": 220
 } ],
 94: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = t("jslib/event/EventEmitter"), s = t("jslib/utils/Store"), a = t("q"), c = e.exports = "h5Prefs", u = function() {
   o.call(this);
   var t = a.defer();
   this.entries = {}, this.values = {}, this.promise = t.promise, s.get(this.PKEY, function(e, n) {
    var i;
    i = n ? JSON.parse(n) : {}, r.trace(c, "resolve values", i), this.values = i, t.resolve(this.values);
   }.bind(this));
  };
  u.prototype = Object.create(o.prototype), u.prototype.PKEY = "h5_prefs_" + i.gtype, 
  u.prototype.save = function() {
   s.set(this.PKEY, JSON.stringify(this.values)), this.emit("save", this.values);
  }, n.provider(c, [ function() {
   var t = new u();
   this.$get = [ function() {
    return t;
   } ], this.add = function(e) {
    if (!e.key) throw new Error("key invalid: " + JSON.stringify(e.key));
    if (!(e.values && e.values instanceof Array)) throw new Error("values invalid: " + JSON.stringify(e.values));
    if (e.values.forEach(function(t) {
     if ("string" != typeof t) throw new Error("pref values must be strings");
    }), void 0 !== e.value && "string" != typeof e.value) throw new Error("pref values can only be strings");
    t.entries[e.key] = {
     values: e.values,
     value: e.value || e.values[0],
     order: e.order || 0
    };
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187,
  "jslib/utils/Store": 188,
  q: 208
 } ],
 95: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = e.exports = "h5Profile";
  n.factory(o, [ "$q", t("./Server"), function(t, e) {
   var n = {};
   return {
    get: function(t, e) {
     r.trace(o, "get() " + t);
     var i = n[t];
     return i || (n[t] = i = {}, e || this.update(t)), i;
    },
    update: function(s) {
     var a = n[s];
     if (a) return t.all([ e.post("/api/v1/profile/get", {
      cid: s
     }), e.post("/api/v1/profile/rank", {
      cid: s,
      gtype: i.gtype
     }) ]).then(function(t) {
      angular.extend(a, t[0].data);
      var e = t[1].data.rank;
      return -1 !== e && (a.rank = e), r.trace(o, "update() result " + s, a), a;
     }, function() {
      return r.error(o, "profile request failed"), t.reject();
     });
    }
   };
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "./Server": 99,
  "jslib/utils/Log": 187
 } ],
 96: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Quickmatch";
  n.factory(r, [ "$rootScope", "$q", t("../services/Session"), t("../services/Server"), t("../services/RoomFilter"), t("../services/GroomHandler"), function(t, e, n, o, s, a) {
   var c = {
    request: null,
    find: function(t, e) {
     return this.request = {
      opts: e
     }, o.post("/api/v1/room/findatm", {
      opts: e
     }, t.promise).then(function(t) {
      return i.trace(r, "find() response", t.data), delete this.request, t.data;
     }.bind(this), function() {
      return delete this.request, [];
     }.bind(this));
    },
    join: function(t, e) {
     return this.find(t, e).then(function(t) {
      return i.trace(r, "find rooms", t), 0 !== t.length ? a.join(t[Math.floor(Math.random() * t.length)].rid) : a.create(e);
     }).then(function(t) {
      return i.trace(r, "join success", t), !0;
     }, function(t) {
      return i.trace(r, "join failed", t), a.create(e);
     });
    }
   };
   return c;
  } ]);
 }, {
  "../../ngmodule": 158,
  "../services/GroomHandler": 88,
  "../services/RoomFilter": 97,
  "../services/Server": 99,
  "../services/Session": 100,
  "jslib/utils/Log": 187
 } ],
 97: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("../../config"), r = t("jslib/utils/Log"), o = t("jsgames/OptsParser2"), s = t("webapp/filters/Lcze"), a = e.exports = "h5RoomFilter", c = "h5_room_filter2";
  n.factory(a, [ "$rootScope", "$q", "$filter", t("webapp/services/CompatStorage"), function(t, e, n, u) {
   var l = {
    map: {
     chain: i.gtype
    },
    active: [],
    available: [],
    array: [],
    save: function() {
     u.set(c + "-" + i.gtype, JSON.stringify(this.map));
    },
    restore: function() {
     u.get(c + "-" + i.gtype, function(t, e) {
      e && (this.map = JSON.parse(e)), this._update();
     }.bind(this));
    },
    _update: function() {
     Object.keys(this.map).forEach(function(t) {
      if ("chain" !== t) {
       var e = this.map[t], i = this._index(t), r = {
        key: t,
        value: e,
        string: n(s)("opt_" + t + ":" + e)
       };
       -1 === i ? this.active.push(r) : this.active.splice(i, 1, r);
      }
     }, this), this.active.slice(0).forEach(function(t) {
      var e = this._index(t.key);
      this.map[t.key] || -1 === e || this.active.splice(e, 1);
     }, this);
     var t = o.get(o.chain(this.map));
     this.active.forEach(function(e) {
      delete t[e.key];
     }, this), this.available = [], Object.keys(t).forEach(function(e) {
      var i = t[e], r = {
       strings: [],
       values: i,
       key: e
      };
      i.forEach(function(t) {
       r.strings.push(n(s)("opt_" + e + ":" + t));
      }, this), this.available.push(r);
     }, this), r.trace(a, "update()");
    },
    _index: function(t) {
     for (var e = 0; e < this.active.length; e++) if (this.active[e].key === t) return e;
     return -1;
    },
    add: function(t, e) {
     r.trace(a, "add()", t, e), this.map[t] = e, this._update(), this.save();
    },
    remove: function(t) {
     r.trace(a, "remove()", t), delete this.map[t], this._update(), this.save();
    }
   };
   return l.restore(), l;
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "jsgames/OptsParser2": 163,
  "jslib/utils/Log": 187,
  "webapp/filters/Lcze": 215,
  "webapp/services/CompatStorage": 220
 } ],
 98: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/event/CollectingQueue"), o = e.exports = "h5Rooms";
  n.factory(o, [ "$rootScope", "$q", t("./Session"), t("./Server"), t("./RoomFilter"), function(t, e, n, s, a) {
   var c = new r(1e3), u = !1;
   c.on("run", function() {
    u && l.scopes.length > 0 && (u = !1, t.$apply());
   }), t.$watch(function() {
    return s.ready && n.active;
   }, function() {
    l.setup(!0);
   });
   var l = {
    MS_REFRESH: 3e4,
    limit: 5,
    rooms: [],
    scopes: [],
    _ivRefresh: void 0,
    _toRefresh: void 0,
    _prCancel: void 0,
    refresh: function(t, n) {
     var r = this.limit, c = [], u = a.map;
     i.trace(o, "refresh() ", u, r), t ? (r = this.limit - this.rooms.length, this.rooms.forEach(function(t) {
      c.push(t.id);
     })) : this.rooms.splice(0, this.rooms.length), 0 !== r && (clearTimeout(this._toRefresh), 
     this._prCancel && (this._prCancel.resolve(), delete this._prCancel), this._toRefresh = setTimeout(function() {
      this._prCancel = e.defer(), s.post("/api/v1/room/find", {
       opts: u,
       count: r,
       skip: c,
       full: n
      }, this._prCancel.promise).then(function(t) {
       i.trace(o, "refresh() response", t.data), delete this._prCancel, t.data.forEach(function(t) {
        this.add(t.id, t);
       }, this), this.sub();
      }.bind(this), function() {
       return e.reject();
      });
     }.bind(this), 500));
    },
    info: function(t) {
     return s.post("/api/v1/room/info", {
      rid: t
     }).then(function(t) {
      return i.trace(o, "info() response", t), t;
     }.bind(this), function() {
      return e.reject();
     });
    },
    sub: function() {
     var t = [];
     this.rooms.forEach(function(e) {
      t.push(e.id);
     }), s.send({
      t: "rinfo",
      a: "sub",
      ids: t
     });
    },
    usub: function() {
     s.send({
      t: "rinfo",
      a: "sub",
      ids: []
     });
    },
    add: function(t, e) {
     for (var n = -1, i = 0; i < this.rooms.length; i++) this.rooms[i].id === t && (n = i);
     -1 !== n ? this.rooms[i] = e : this.rooms.push(e);
    },
    update: function(t, e) {
     for (var n = 0; n < this.rooms.length; n++) this.rooms[n].id === t && (this.rooms[n] = e, 
     u = !0);
    },
    remove: function(t) {
     for (var e = this.rooms.length; e--; ) this.rooms[e].id === t && (this.rooms.splice(e, 1), 
     u = !0);
    },
    listen: function(t) {
     this.scopes.push(t), this.setup(1 === this.scopes.length), t.$on("$destroy", function() {
      this.scopes.splice(this.scopes.indexOf(t), 1), this.setup();
     }.bind(this));
    },
    setup: function(t) {
     return i.trace(o, "setup() " + t), n.active && s.ready && 0 !== this.scopes.length ? void (void 0 === this._ivRefresh && (this._ivRefresh = setInterval(function() {
      this.refresh(!0);
     }.bind(this), this.MS_REFRESH), t && this.refresh())) : (clearInterval(this._ivRefresh), 
     delete this._ivRefresh, clearTimeout(this._toRefresh), delete this._toRefresh, void i.trace(o, "setup() disable service, server/session not ready or no listening scopes"));
    }
   };
   s.on("json", function(t) {
    "rinfo" === t.t && c.push(function() {
     h(t);
    });
   });
   var h = function(t) {
    switch (t.a) {
    case "upd":
     l.update(t.id, t.data);
     break;

    case "rem":
     l.remove(t.id);
    }
   };
   return l;
  } ]);
 }, {
  "../../ngmodule": 158,
  "./RoomFilter": 97,
  "./Server": 99,
  "./Session": 100,
  "jslib/event/CollectingQueue": 171,
  "jslib/utils/Log": 187
 } ],
 99: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/utils/UtilsLocation"), o = t("jslib/event/EventEmitter"), s = t("./SocketShimIO"), a = t("../../config"), c = e.exports = "h5Server";
  n.factory(c, [ "$q", "$rootScope", t("./Http"), t("webapp/services/DebugConsole"), function(t, e, n, u) {
   function l(t) {
    o.call(this), this.setMaxListeners(100), this.active = !1, this.ready = !1, this._connected = !1, 
    this._toRecon = void 0, this._reconKey = void 0, this._accessToken = void 0, this._uri = t, 
    this._http = n, this._http.setUri(this._uri), this._onjson = function(t) {
     "ping" !== t.t && (i.trace(c, "json inc", t), this.emit("json", t));
    }.bind(this), this._onopen = function() {
     i.trace(c, "_onopen"), this._ivPing = setInterval(function() {
      this.send({
       t: "ping",
       ts: new Date().getTime()
      });
     }.bind(this), h), this.send({
      t: "helo"
     }), this.emit("open");
    }.bind(this), this._onclose = function() {
     i.trace(c, "_onclose, connected " + this._connected), this._clean(), e.$apply(function() {
      this.emit("close");
     }.bind(this));
    }.bind(this), u.on("h5.server.close", function() {
     server.debugClose();
    });
   }
   var h = 2e3;
   l.prototype = Object.create(o.prototype), l.prototype._clean = function() {
    this._connected = !1, this.ready = !1, void 0 !== this._ivPing && (clearTimeout(this._ivPing), 
    delete this._ivPing), void 0 !== this._socket && (delete this._socket.onopen, delete this._socket.onjson, 
    delete this._socket.onclose, this._socket.close(), delete this._socket);
   }, l.prototype.connect = function(t) {
    return i.trace(c, "connect()"), this.active = !0, this._connected === !0 ? t(null) : void this._requestKeyConnect(function(n, r, o, s) {
     return n ? t(n, s) : (i.trace(c, "connect() success, server now ready"), e.$apply(function() {
      this.ready = !0, this.emit("ready", r, o), 0 === s && this.emit("reconnect", r, o);
     }.bind(this)), void t(null));
    }.bind(this));
   }, l.prototype.disconnect = function() {
    i.trace(c, "disconnect()");
    var t = this.active;
    this.active = !1, delete this._reconKey, this._clean(), t && this.emit("disconnect");
   }, l.prototype._requestKeyConnect = function(t) {
    this.post("/api/v1/auth/wsattach", {}).then(function(e) {
     if (!this.active) return i.trace(c, "_requestKeyConnect() but not active"), void t("not active");
     var n = e.data, r = n.key, o = n.ip;
     this._connectSocket(o, function() {
      var e = setTimeout(function() {
       this.off("json", n), t("timeout attach");
      }.bind(this), 1e4), n = function(r) {
       "attach" === r.t && (i.trace(c, "websocket attach response"), this._reconKey = r.recon, 
       this.off("json", n), clearTimeout(e), t(null, r.cid, r.sid, r.reconRes));
      }.bind(this);
      this.on("json", n), this.send({
       t: "attach",
       key: r,
       recon: this._reconKey
      });
     }.bind(this));
    }.bind(this), function() {
     i.error(c, "cannot connect, server unavailable"), t("server unavailable");
    }.bind(this));
   }, l.prototype._connectSocket = function(t, e) {
    if (this._connected = !0, void 0 !== this._socket) throw new Error("_connectSocket(), already having _socket. called connect() multiple times?");
    i.trace(c, "connect websocket to " + this._uri), this._socket = new s(this._uri.length > 0 ? this._uri : void 0), 
    this._socket.onjson = this._onjson, this._socket.onopen = this._onopen, this._socket.onclose = this._onclose;
    var n = setTimeout(function() {
     this.off("json", r), e("timeout");
    }.bind(this), 1e4), r = function(t) {
     "helo" === t.t && (i.trace(c, "_connectSocket() helo received"), this.emit("helo", t.svc), 
     this.off("json", r), clearTimeout(n), e(null));
    }.bind(this);
    this.on("json", r);
   }, l.prototype.send = function(t) {
    return this._socket ? 1 !== this._socket.getReadyState() ? void i.warn(c, "socket readyState !== 1, is " + this._socket.getReadyState()) : ("ping" !== t.t && i.trace(c, "send()", t), 
    void this._socket.send(t)) : void i.warn(c, "socket not yet connected", t);
   }, l.prototype.post = function(t, e, n) {
    return this._http.post(t, e, n);
   }, l.prototype.get = function(t, e, n) {
    return this._http.get(t, e, n);
   }, l.prototype.isActive = function() {
    return this.active;
   }, l.prototype.uri = function() {
    return this._uri;
   }, l.prototype.setUri = function(t) {
    this._uri = t, this._http.setUri(this._uri), i.debug(c, "updated http uri " + this._uri);
   }, l.prototype.setAccessToken = function(t) {
    this._accessToken = t;
   }, l.prototype.getAccessToken = function() {
    return this._accessToken;
   }, l.prototype.debugClose = function() {
    i.trace(c, "debug close"), this._onclose();
   };
   var p, f = r.gup("uri");
   return p = f ? f : "http:" === document.location.protocol || "https:" === document.location.protocol ? "" : a.urlGame, 
   new l(p);
  } ]);
 }, {
  "../../config": 40,
  "../../ngmodule": 158,
  "./Http": 89,
  "./SocketShimIO": 101,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsLocation": 195,
  "webapp/services/DebugConsole": 221
 } ],
 100: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Session";
  n.factory(r, [ "$q", "$rootScope", "$http", t("./Server"), function(t, e, n, o) {
   var s = function() {
    this.reset();
   };
   return s.prototype.reset = function() {
    i.trace(r, "reset()"), this.active = !1, this.status = -1;
   }, s.prototype.check = function(e) {
    return i.trace(r, "check()"), o.post("/api/v2/auth/test", {}).then(function(t) {
     this.status = t.status;
     var n = t.data;
     return i.trace(r, "check() success", n), e || n.guest + "" != "true" ? n.authenticated + "" == "true" ? (this.set(!0), 
     !0) : (this.set(!1), !1) : (i.trace(r, "check() session active, but do not allow guest"), 
     this.set(!1), !1);
    }.bind(this), function(e) {
     return i.trace(r, "check() error, " + e.status), this.status = e.status, this.set(!1), 
     t.reject();
    }.bind(this));
   }, s.prototype.set = function(t) {
    this.active = t, e.$emit("h5client.session.active", this.active);
   }, s.prototype.logout = function() {
    return o.post("/api/v2/auth/logout").then(function() {
     i.debug(r, "logout() success"), this.reset();
    }.bind(this), function() {
     return t.reject();
    }.bind(this));
   }, new s();
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  "jslib/utils/Log": 187
 } ],
 101: [ function(t, e) {
  "use strict";
  function n(t) {
   r.trace(o, "create uri " + t), this._socket = new i(t, {
    reconnection: !1,
    multiplex: !1,
    timeout: 1e4
   }), this._onopen = function() {
    r.trace(o, "onopen"), void 0 !== this.onopen && this.onopen();
   }.bind(this), this._onmessage = function(t) {
    if (void 0 !== this.onjson) {
     var e;
     try {
      e = JSON.parse(t);
     } catch (n) {
      throw new Error("error parse json: '" + t + "'");
     }
     this.onjson(e);
    }
   }.bind(this), this._onclose = function(t) {
    r.trace(o, "onclose", t), void 0 !== this.onclose && this.onclose(t);
   }.bind(this), this._onerror = function(t) {
    r.warn(o, "onerror", t), void 0 !== this.onerror && this.onerror(t);
   }.bind(this), this._ontimeout = function(t) {
    r.warn(o, "ontimeout", t);
   }.bind(this), this._onconnecttimeout = function(t) {
    r.warn(o, "onconnecttimeout", t);
   }.bind(this), this._socket.on("connect", this._onopen), this._socket.on("error", this._onerror), 
   this._socket.on("disconnect", this._onclose), this._socket.on("message", this._onmessage), 
   this._socket.on("connect_timeout", this._onconnecttimeout);
  }
  var i = t("../vendor/socketio"), r = t("jslib/utils/Log"), o = "SocketShimIO";
  n.prototype.send = function(t) {
   this._socket.send(JSON.stringify(t));
  }, n.prototype.close = function() {
   r.trace(o, "close"), this._socket.close(), this._socket.off("connect", this._onopen), 
   this._socket.off("error", this._onerror), this._socket.off("disconnect", this._onclose), 
   this._socket.off("message", this._onmessage), this._socket.off("connect_timeout", this._onconnecttimeout);
  }, n.prototype.getReadyState = function() {
   return 1;
  }, e.exports = n;
 }, {
  "../vendor/socketio": 123,
  "jslib/utils/Log": 187
 } ],
 102: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "h5Thread";
  n.factory(r, [ "$rootScope", t("./Server"), t("webapp/services/Analytics"), function(t, e, n) {
   function o() {
    this._initialized = !1;
   }
   return o.prototype.init = function() {
    this._initialized || (this._initialized = !0);
   }, o.prototype.send = function(t, o) {
    i.trace(r, "send", t), e.post("/api/v1/msg/send", {
     tid: t,
     text: o
    }).then(function() {
     n.exec("send", "event", "message", "sent", "thread");
    });
   }, o.prototype.setRead = function(t, n) {
    i.trace(r, "setRead", t), e.post("/api/v1/msg/setread", {
     tid: t,
     mid: n,
     read: !0
    });
   }, o.prototype.getPrivateTid = function(t, n) {
    return i.trace(r, "getPrivateTid", t), e.post("/api/v1/msg/pthread", {
     cid: t
    }).then(function(t) {
     n(null, t.data.tid);
    });
   }, new o();
  } ]);
 }, {
  "../../ngmodule": 158,
  "./Server": 99,
  "jslib/utils/Log": 187,
  "webapp/services/Analytics": 218
 } ],
 103: [ function(t, e) {
  "use strict";
  var n = t("../../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = t("jslib/event/CollectingQueue"), s = e.exports = "h5ThreadReader";
  n.factory(s, [ "$rootScope", "h5Server", function(t, e) {
   var n, a = new o(300), c = [];
   a.on("run", function() {
    0 !== c.length && t.$apply();
   });
   var u = function(t) {
    r.call(this), this.tid = t, this.notify = 0, this.destroyed = !1, this.flag = !1, 
    this.scopes = [], this.ts = 0, this._onRun = function() {}.bind(this), this._onJson = function(t) {
     if ("thd" === t.t && t.tid === this.tid) switch (t.a) {
     case "sub":
      break;

     case "add":
      a.push(function() {
       this.add(t.init, t.data);
      }.bind(this));
     }
    }.bind(this), e.on("json", this._onJson), e.ready && this.init();
   };
   u.prototype = Object.create(r.prototype), u.prototype.LIMIT = 30, u.prototype.init = function() {
    i.trace(s, "init()"), this.entries = [], e.send({
     t: "thd",
     a: "sub",
     tid: this.tid
    });
   }, u.prototype.add = function(t, e) {
    t || n === this.tid || this.notify++, this.flag = !this.flag, e.flag = this.flag;
    for (var r = -1, o = this.entries.length - 1; o >= 0; o--) this.entries[o].mid === e.mid && (r = o);
    -1 === r ? this.entries.push(e) : this.entries.splice(r, 1, e), this.entries.length > this.LIMIT && this.entries.splice(0, 1), 
    this.ts = new Date().getTime(), this.emit("add", e), i.trace(s, "add()", e);
   }, u.prototype.destroy = function() {
    e.off("json", this._onJson), this.destroyed = !0;
   }, u.prototype.acknowledge = function() {
    this.notify = 0;
   }, t.$watch(function() {
    return e.ready;
   }, function(t) {
    t && Object.keys(l).forEach(function(t) {
     l[t].init();
    }, this);
   });
   var l = {};
   return {
    get: function(t) {
     if (!t) return void 0;
     var e = l[t];
     return e || (e = l[t] = new u(t)), e;
    },
    destroy: function() {
     Object.keys(l).forEach(function(t) {
      l[t].destroy();
     }, this);
    },
    watch: function(t) {
     n = t, Object.keys(l).forEach(function(e) {
      var n = l[e];
      n.tid === t && n.acknowledge();
     }, this);
    },
    attach: function(t) {
     -1 === c.indexOf(t) && (c.push(t), t.$on("$destroy", function() {
      this.detach(t);
     }.bind(this)));
    },
    detach: function(t) {
     var e = c.indexOf(t);
     -1 !== e && c.splice(e, 1);
    }
   };
  } ]);
 }, {
  "../../ngmodule": 158,
  "jslib/event/CollectingQueue": 171,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 104: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_contact_popup_title": "Friends",\n\n\n    "h5client_contact_popup_empty": "You did not add any friend yet.",\n    "h5client_contact_popup_bubble_invite": "Invite friends to your game.",\n    "h5client_contact_popup_bubble_invited": "Sent an invite to ",\n\n    "h5client_contact_popup_add_placeholder": "Add a friend by name...",\n    "h5client_contact_popup_button_add": "Add",\n\n    "h5client_contact_popup_add_result_searching": "Searching...",\n    "h5client_contact_popup_add_result_success": "Friend added.",\n    "h5client_contact_popup_add_result_not_found": "Player could not be found."\n}');
 }, {} ],
 105: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_create_room_popup_title": "New game",\n    "h5client_create_room_popup_title_join": "Join",\n    "h5client_create_room_popup_title_quick": "",\n    "h5_create_room_popup_button_wait": "Working...",\n    "h5_create_room_popup_quick_info_players": "players found",\n    "h5_create_room_popup_quick_info_waitsec": "s expected",\n\n    "h5_create_room_popup_button_create": "Create"\n}');
 }, {} ],
 106: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_editavatar_title": "Avatar",\n    "h5_editavatar_upload_button": "Change avatar",\n    "h5_editavatar_uploading": "Uploading..."\n}');
 }, {} ],
 107: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_game_leave_popup_title": "Leave",\n    "h5_game_leave_popup_button_confirm": "Alright",\n    "h5_game_leave_popup_button_cancel": "Return",\n\n    "h5_game_leave_popup_running": "Aborting a game will result in a loss."\n\n}');
 }, {} ],
 108: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_game_list_empty": "Create a game for others to join."\n}');
 }, {} ],
 109: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "opt_size:2": "2 Players",\n    "opt_size:3": "3 Players",\n    "opt_size:4": "4 Players",\n    "opt_size:5": "5 Players",\n    "opt_size:6": "6 Players",\n    "opt_opponent:boteasy": "Easy bot",\n    "opt_opponent:botmedium": "Medium bot",\n    "opt_opponent:bothard": "Hard bot",\n    "opt_opponent:local": "Local players",\n    "opt_rated:true": "Rated game",\n    "opt_rated:false": "Unrated game",\n    "opt_public:quick": "Quick",\n    "opt_public:true": "Public",\n    "opt_public:false": "Private",\n    "opt_name:string": "Name",\n\n    "opt_chain_example:sub1": "Sub 1",\n    "opt_chain_example:sub2": "Sub 2",\n    "opt_chain_example:sub3": "Sub 3",\n    "opt_chain_example_sub3:subsub1": "Subsub 1",\n    "opt_chain_example_sub3:subsub2": "Subsub 2"\n\n}');
 }, {} ],
 110: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_goptlist_public_quick": "A quick game with random opponents.",\n    "h5_goptlist_public_true": "Players can join or be invited.",\n    "h5_goptlist_public_false": "Players can only join by invitation."\n}');
 }, {} ],
 111: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_groom_banner_searching": "Searching...",\n    "h5_groom_banner_starting": "Starting in",\n    "h5_groom_banner_waiting": "Waiting...",\n    "h5_groom_banner_players": "players",\n    "h5_groom_banner_of": "of"\n}');
 }, {} ],
 112: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_groom_players": "Players",\n    "h5client_groom_info": "Game info",\n\n    "h5_groom_bubble_info": "Selected options",\n    "h5client_groom_invite": "Share this link with a friend, and he will automatically join your game. No registration required. Works on every device."\n\n}');
 }, {} ],
 113: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_lobby_button_play": "New game",\n    "h5client_lobby_bubble_games": "Available matches",\n    "h5client_lobby_bubble_friends": "Friends online",\n\n    "h5client_lobby_view_friends_empty": "No friends online right now."\n\n}');
 }, {} ],
 114: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_loginpopup_title": "Login",\n\n    "h5client_loginpopup_message_authenticating": "Authenticating...",\n    "h5client_loginpopup_message_log_in": "Logging in...",\n    "h5client_loginpopup_message_connecting": "Connecting...",\n    \n    "h5client_loginpopup_login_failed": "Invalid email or password.",\n\n    "h5client_loginpopup_signing_title": "Play with your friends:",\n\n    "h5client_loginpopup_placeholder_email": "Email",\n    "h5client_loginpopup_placeholder_password": "Password",\n    "h5client_loginpopup_placeholder_password_repeat": "Repeat password",\n\n    "h5client_loginpopup_link_register": "Register",\n    "h5client_loginpopup_link_recover": "Recover",\n    "h5client_loginpopup_link_guest": "Play as guest",\n\n    "h5client_loginpopup_button_login": "Login",\n    "h5client_loginpopup_button_register": "Register"\n}');
 }, {} ],
 115: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_menu_button_sp": "Singleplayer",\n    "h5_menu_button_mp": "Multiplayer",\n    "h5_menu_button_tut": "Tutorial",\n    "h5_menu_button_start": "Start",\n\n    "h5_menu_home_title_hello": "Hello!",\n    "h5_menu_home_title_howdy": "Howdy!",\n    "h5_menu_home_slogan_lets_play": "Now, let\'s play a game.",\n    "h5_menu_home_slogan_hows_things": "How\'s things over there?",\n\n    "h5_menu_sp_title_ready": "Ready?",\n    "h5_menu_sp_slogan_chose_flavour": "Chose your flavour."\n}');
 }, {} ],
 116: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_thread_empty": "No messages sent yet.",\n    "h5_thread_edit_placeholder": "Type a message...",\n    "h5_thread_button_send": "Send"\n}');
 }, {} ],
 117: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "name_popup_button_submit": "Submit",\n    "name_popup_title": "Change name",\n    "name_popup_result_title": "Name",\n    "name_popup_result_error": "An error occurred.",\n    "name_popup_result_taken": "This name is already taken.",\n    "name_popup_result_length": "Your name must be atleast 4 and a maximum of 14 characters long.",\n    "name_popup_result_invalid": "This name contains banned words or invalid characters."\n}');
 }, {} ],
 118: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_pref_popup_title": "Settings",\n\n    "h5_pref_game_sound_title": "Sound",\n    "h5_pref_game_sound_description": "Game sounds and alerts.",\n    "h5_pref_game_sound:true": "On",\n    "h5_pref_game_sound:false": "Off",\n\n    "h5_pref_analytics_title": "Analytics",\n    "h5_pref_analytics_description": "Send anonymous usage statistics.",\n    "h5_pref_analytics:true": "On",\n    "h5_pref_analytics:false": "Off"\n}');
 }, {} ],
 119: [ function(t, e) {
  e.exports = e.exports = JSON.parse("{\n\n}");
 }, {} ],
 120: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5_groom_bubble_info": "Selected options"\n}');
 }, {} ],
 121: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_reconnect_popup_title": "Connection",\n\n    "h5client_reconnect_popup_conlost": "Reconnecting to server...",\n    "h5client_reconnect_popup_waiting": "Looking up the game...",\n    "h5client_reconnect_popup_failed": "We could not rejoin. Our time has run out or the game is already over. Sorry about that!",\n    "h5client_reconnect_button_cancel": "Cancel"\n}');
 }, {} ],
 122: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "h5client_room_filter_popup_title": "Settings",\n    "h5client_room_filter_popup_active": "Active filters",\n    "h5client_room_filter_popup_available": "Available filters",\n    "h5client_room_filter_button_save": "Save"\n}');
 }, {} ],
 123: [ function(t, e, n) {
  (function(i) {
   !function(t) {
    if ("object" == typeof n && "undefined" != typeof e) e.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else {
     var r;
     "undefined" != typeof window ? r = window : "undefined" != typeof i ? r = i : "undefined" != typeof self && (r = self), 
     r.io = t();
    }
   }(function() {
    var e;
    return function n(e, i, r) {
     function o(a, c) {
      if (!i[a]) {
       if (!e[a]) {
        var u = "function" == typeof t && t;
        if (!c && u) return u(a, !0);
        if (s) return s(a, !0);
        throw new Error("Cannot find module '" + a + "'");
       }
       var l = i[a] = {
        exports: {}
       };
       e[a][0].call(l.exports, function(t) {
        var n = e[a][1][t];
        return o(n ? n : t);
       }, l, l.exports, n, e, i, r);
      }
      return i[a].exports;
     }
     for (var s = "function" == typeof t && t, a = 0; a < r.length; a++) o(r[a]);
     return o;
    }({
     1: [ function(t, e) {
      e.exports = t("./lib/");
     }, {
      "./lib/": 2
     } ],
     2: [ function(t, e, n) {
      function i(t, e) {
       "object" == typeof t && (e = t, t = void 0), e = e || {};
       var n, i = r(t), o = i.source, u = i.id;
       return e.forceNew || e["force new connection"] || !1 === e.multiplex ? (a("ignoring socket cache for %s", o), 
       n = s(o, e)) : (c[u] || (a("new io instance for %s", o), c[u] = s(o, e)), n = c[u]), 
       n.socket(i.path);
      }
      var r = t("./url"), o = t("socket.io-parser"), s = t("./manager"), a = t("debug")("socket.io-client");
      e.exports = n = i;
      var c = n.managers = {};
      n.protocol = o.protocol, n.connect = i, n.Manager = t("./manager"), n.Socket = t("./socket");
     }, {
      "./manager": 3,
      "./socket": 5,
      "./url": 6,
      debug: 10,
      "socket.io-parser": 46
     } ],
     3: [ function(t, e) {
      function n(t, e) {
       return this instanceof n ? (t && "object" == typeof t && (e = t, t = void 0), e = e || {}, 
       e.path = e.path || "/socket.io", this.nsps = {}, this.subs = [], this.opts = e, 
       this.reconnection(e.reconnection !== !1), this.reconnectionAttempts(e.reconnectionAttempts || 1 / 0), 
       this.reconnectionDelay(e.reconnectionDelay || 1e3), this.reconnectionDelayMax(e.reconnectionDelayMax || 5e3), 
       this.randomizationFactor(e.randomizationFactor || .5), this.backoff = new h({
        min: this.reconnectionDelay(),
        max: this.reconnectionDelayMax(),
        jitter: this.randomizationFactor()
       }), this.timeout(null == e.timeout ? 2e4 : e.timeout), this.readyState = "closed", 
       this.uri = t, this.connected = [], this.encoding = !1, this.packetBuffer = [], this.encoder = new s.Encoder(), 
       this.decoder = new s.Decoder(), this.autoConnect = e.autoConnect !== !1, void (this.autoConnect && this.open())) : new n(t, e);
      }
      var i = (t("./url"), t("engine.io-client")), r = t("./socket"), o = t("component-emitter"), s = t("socket.io-parser"), a = t("./on"), c = t("component-bind"), u = (t("object-component"), 
      t("debug")("socket.io-client:manager")), l = t("indexof"), h = t("backo2");
      e.exports = n, n.prototype.emitAll = function() {
       this.emit.apply(this, arguments);
       for (var t in this.nsps) this.nsps[t].emit.apply(this.nsps[t], arguments);
      }, n.prototype.updateSocketIds = function() {
       for (var t in this.nsps) this.nsps[t].id = this.engine.id;
      }, o(n.prototype), n.prototype.reconnection = function(t) {
       return arguments.length ? (this._reconnection = !!t, this) : this._reconnection;
      }, n.prototype.reconnectionAttempts = function(t) {
       return arguments.length ? (this._reconnectionAttempts = t, this) : this._reconnectionAttempts;
      }, n.prototype.reconnectionDelay = function(t) {
       return arguments.length ? (this._reconnectionDelay = t, this.backoff && this.backoff.setMin(t), 
       this) : this._reconnectionDelay;
      }, n.prototype.randomizationFactor = function(t) {
       return arguments.length ? (this._randomizationFactor = t, this.backoff && this.backoff.setJitter(t), 
       this) : this._randomizationFactor;
      }, n.prototype.reconnectionDelayMax = function(t) {
       return arguments.length ? (this._reconnectionDelayMax = t, this.backoff && this.backoff.setMax(t), 
       this) : this._reconnectionDelayMax;
      }, n.prototype.timeout = function(t) {
       return arguments.length ? (this._timeout = t, this) : this._timeout;
      }, n.prototype.maybeReconnectOnOpen = function() {
       !this.reconnecting && this._reconnection && 0 === this.backoff.attempts && this.reconnect();
      }, n.prototype.open = n.prototype.connect = function(t) {
       if (u("readyState %s", this.readyState), ~this.readyState.indexOf("open")) return this;
       u("opening %s", this.uri), this.engine = i(this.uri, this.opts);
       var e = this.engine, n = this;
       this.readyState = "opening", this.skipReconnect = !1;
       var r = a(e, "open", function() {
        n.onopen(), t && t();
       }), o = a(e, "error", function(e) {
        if (u("connect_error"), n.cleanup(), n.readyState = "closed", n.emitAll("connect_error", e), 
        t) {
         var i = new Error("Connection error");
         i.data = e, t(i);
        } else n.maybeReconnectOnOpen();
       });
       if (!1 !== this._timeout) {
        var s = this._timeout;
        u("connect attempt will timeout after %d", s);
        var c = setTimeout(function() {
         u("connect attempt timed out after %d", s), r.destroy(), e.close(), e.emit("error", "timeout"), 
         n.emitAll("connect_timeout", s);
        }, s);
        this.subs.push({
         destroy: function() {
          clearTimeout(c);
         }
        });
       }
       return this.subs.push(r), this.subs.push(o), this;
      }, n.prototype.onopen = function() {
       u("open"), this.cleanup(), this.readyState = "open", this.emit("open");
       var t = this.engine;
       this.subs.push(a(t, "data", c(this, "ondata"))), this.subs.push(a(this.decoder, "decoded", c(this, "ondecoded"))), 
       this.subs.push(a(t, "error", c(this, "onerror"))), this.subs.push(a(t, "close", c(this, "onclose")));
      }, n.prototype.ondata = function(t) {
       this.decoder.add(t);
      }, n.prototype.ondecoded = function(t) {
       this.emit("packet", t);
      }, n.prototype.onerror = function(t) {
       u("error", t), this.emitAll("error", t);
      }, n.prototype.socket = function(t) {
       var e = this.nsps[t];
       if (!e) {
        e = new r(this, t), this.nsps[t] = e;
        var n = this;
        e.on("connect", function() {
         e.id = n.engine.id, ~l(n.connected, e) || n.connected.push(e);
        });
       }
       return e;
      }, n.prototype.destroy = function(t) {
       var e = l(this.connected, t);
       ~e && this.connected.splice(e, 1), this.connected.length || this.close();
      }, n.prototype.packet = function(t) {
       u("writing packet %j", t);
       var e = this;
       e.encoding ? e.packetBuffer.push(t) : (e.encoding = !0, this.encoder.encode(t, function(t) {
        for (var n = 0; n < t.length; n++) e.engine.write(t[n]);
        e.encoding = !1, e.processPacketQueue();
       }));
      }, n.prototype.processPacketQueue = function() {
       if (this.packetBuffer.length > 0 && !this.encoding) {
        var t = this.packetBuffer.shift();
        this.packet(t);
       }
      }, n.prototype.cleanup = function() {
       for (var t; t = this.subs.shift(); ) t.destroy();
       this.packetBuffer = [], this.encoding = !1, this.decoder.destroy();
      }, n.prototype.close = n.prototype.disconnect = function() {
       this.skipReconnect = !0, this.backoff.reset(), this.readyState = "closed", this.engine && this.engine.close();
      }, n.prototype.onclose = function(t) {
       u("close"), this.cleanup(), this.backoff.reset(), this.readyState = "closed", this.emit("close", t), 
       this._reconnection && !this.skipReconnect && this.reconnect();
      }, n.prototype.reconnect = function() {
       if (this.reconnecting || this.skipReconnect) return this;
       var t = this;
       if (this.backoff.attempts >= this._reconnectionAttempts) u("reconnect failed"), 
       this.backoff.reset(), this.emitAll("reconnect_failed"), this.reconnecting = !1; else {
        var e = this.backoff.duration();
        u("will wait %dms before reconnect attempt", e), this.reconnecting = !0;
        var n = setTimeout(function() {
         t.skipReconnect || (u("attempting reconnect"), t.emitAll("reconnect_attempt", t.backoff.attempts), 
         t.emitAll("reconnecting", t.backoff.attempts), t.skipReconnect || t.open(function(e) {
          e ? (u("reconnect attempt error"), t.reconnecting = !1, t.reconnect(), t.emitAll("reconnect_error", e.data)) : (u("reconnect success"), 
          t.onreconnect());
         }));
        }, e);
        this.subs.push({
         destroy: function() {
          clearTimeout(n);
         }
        });
       }
      }, n.prototype.onreconnect = function() {
       var t = this.backoff.attempts;
       this.reconnecting = !1, this.backoff.reset(), this.updateSocketIds(), this.emitAll("reconnect", t);
      };
     }, {
      "./on": 4,
      "./socket": 5,
      "./url": 6,
      backo2: 7,
      "component-bind": 8,
      "component-emitter": 9,
      debug: 10,
      "engine.io-client": 11,
      indexof: 42,
      "object-component": 43,
      "socket.io-parser": 46
     } ],
     4: [ function(t, e) {
      function n(t, e, n) {
       return t.on(e, n), {
        destroy: function() {
         t.removeListener(e, n);
        }
       };
      }
      e.exports = n;
     }, {} ],
     5: [ function(t, e, n) {
      function i(t, e) {
       this.io = t, this.nsp = e, this.json = this, this.ids = 0, this.acks = {}, this.io.autoConnect && this.open(), 
       this.receiveBuffer = [], this.sendBuffer = [], this.connected = !1, this.disconnected = !0;
      }
      var r = t("socket.io-parser"), o = t("component-emitter"), s = t("to-array"), a = t("./on"), c = t("component-bind"), u = t("debug")("socket.io-client:socket"), l = t("has-binary");
      e.exports = n = i;
      var h = {
       connect: 1,
       connect_error: 1,
       connect_timeout: 1,
       disconnect: 1,
       error: 1,
       reconnect: 1,
       reconnect_attempt: 1,
       reconnect_failed: 1,
       reconnect_error: 1,
       reconnecting: 1
      }, p = o.prototype.emit;
      o(i.prototype), i.prototype.subEvents = function() {
       if (!this.subs) {
        var t = this.io;
        this.subs = [ a(t, "open", c(this, "onopen")), a(t, "packet", c(this, "onpacket")), a(t, "close", c(this, "onclose")) ];
       }
      }, i.prototype.open = i.prototype.connect = function() {
       return this.connected ? this : (this.subEvents(), this.io.open(), "open" == this.io.readyState && this.onopen(), 
       this);
      }, i.prototype.send = function() {
       var t = s(arguments);
       return t.unshift("message"), this.emit.apply(this, t), this;
      }, i.prototype.emit = function(t) {
       if (h.hasOwnProperty(t)) return p.apply(this, arguments), this;
       var e = s(arguments), n = r.EVENT;
       l(e) && (n = r.BINARY_EVENT);
       var i = {
        type: n,
        data: e
       };
       return "function" == typeof e[e.length - 1] && (u("emitting packet with ack id %d", this.ids), 
       this.acks[this.ids] = e.pop(), i.id = this.ids++), this.connected ? this.packet(i) : this.sendBuffer.push(i), 
       this;
      }, i.prototype.packet = function(t) {
       t.nsp = this.nsp, this.io.packet(t);
      }, i.prototype.onopen = function() {
       u("transport is open - connecting"), "/" != this.nsp && this.packet({
        type: r.CONNECT
       });
      }, i.prototype.onclose = function(t) {
       u("close (%s)", t), this.connected = !1, this.disconnected = !0, delete this.id, 
       this.emit("disconnect", t);
      }, i.prototype.onpacket = function(t) {
       if (t.nsp == this.nsp) switch (t.type) {
       case r.CONNECT:
        this.onconnect();
        break;

       case r.EVENT:
        this.onevent(t);
        break;

       case r.BINARY_EVENT:
        this.onevent(t);
        break;

       case r.ACK:
        this.onack(t);
        break;

       case r.BINARY_ACK:
        this.onack(t);
        break;

       case r.DISCONNECT:
        this.ondisconnect();
        break;

       case r.ERROR:
        this.emit("error", t.data);
       }
      }, i.prototype.onevent = function(t) {
       var e = t.data || [];
       u("emitting event %j", e), null != t.id && (u("attaching ack callback to event"), 
       e.push(this.ack(t.id))), this.connected ? p.apply(this, e) : this.receiveBuffer.push(e);
      }, i.prototype.ack = function(t) {
       var e = this, n = !1;
       return function() {
        if (!n) {
         n = !0;
         var i = s(arguments);
         u("sending ack %j", i);
         var o = l(i) ? r.BINARY_ACK : r.ACK;
         e.packet({
          type: o,
          id: t,
          data: i
         });
        }
       };
      }, i.prototype.onack = function(t) {
       u("calling ack %s with %j", t.id, t.data);
       var e = this.acks[t.id];
       e.apply(this, t.data), delete this.acks[t.id];
      }, i.prototype.onconnect = function() {
       this.connected = !0, this.disconnected = !1, this.emit("connect"), this.emitBuffered();
      }, i.prototype.emitBuffered = function() {
       var t;
       for (t = 0; t < this.receiveBuffer.length; t++) p.apply(this, this.receiveBuffer[t]);
       for (this.receiveBuffer = [], t = 0; t < this.sendBuffer.length; t++) this.packet(this.sendBuffer[t]);
       this.sendBuffer = [];
      }, i.prototype.ondisconnect = function() {
       u("server disconnect (%s)", this.nsp), this.destroy(), this.onclose("io server disconnect");
      }, i.prototype.destroy = function() {
       if (this.subs) {
        for (var t = 0; t < this.subs.length; t++) this.subs[t].destroy();
        this.subs = null;
       }
       this.io.destroy(this);
      }, i.prototype.close = i.prototype.disconnect = function() {
       return this.connected && (u("performing disconnect (%s)", this.nsp), this.packet({
        type: r.DISCONNECT
       })), this.destroy(), this.connected && this.onclose("io client disconnect"), this;
      };
     }, {
      "./on": 4,
      "component-bind": 8,
      "component-emitter": 9,
      debug: 10,
      "has-binary": 38,
      "socket.io-parser": 46,
      "to-array": 50
     } ],
     6: [ function(t, e) {
      (function(n) {
       function i(t, e) {
        var i = t, e = e || n.location;
        return null == t && (t = e.protocol + "//" + e.host), "string" == typeof t && ("/" == t.charAt(0) && (t = "/" == t.charAt(1) ? e.protocol + t : e.hostname + t), 
        /^(https?|wss?):\/\//.test(t) || (o("protocol-less url %s", t), t = "undefined" != typeof e ? e.protocol + "//" + t : "https://" + t), 
        o("parse %s", t), i = r(t)), i.port || (/^(http|ws)$/.test(i.protocol) ? i.port = "80" : /^(http|ws)s$/.test(i.protocol) && (i.port = "443")), 
        i.path = i.path || "/", i.id = i.protocol + "://" + i.host + ":" + i.port, i.href = i.protocol + "://" + i.host + (e && e.port == i.port ? "" : ":" + i.port), 
        i;
       }
       var r = t("parseuri"), o = t("debug")("socket.io-client:url");
       e.exports = i;
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      debug: 10,
      parseuri: 44
     } ],
     7: [ function(t, e) {
      function n(t) {
       t = t || {}, this.ms = t.min || 100, this.max = t.max || 1e4, this.factor = t.factor || 2, 
       this.jitter = t.jitter > 0 && t.jitter <= 1 ? t.jitter : 0, this.attempts = 0;
      }
      e.exports = n, n.prototype.duration = function() {
       var t = this.ms * Math.pow(this.factor, this.attempts++);
       if (this.jitter) {
        var e = Math.random(), n = Math.floor(e * this.jitter * t);
        t = 0 == (1 & Math.floor(10 * e)) ? t - n : t + n;
       }
       return 0 | Math.min(t, this.max);
      }, n.prototype.reset = function() {
       this.attempts = 0;
      }, n.prototype.setMin = function(t) {
       this.ms = t;
      }, n.prototype.setMax = function(t) {
       this.max = t;
      }, n.prototype.setJitter = function(t) {
       this.jitter = t;
      };
     }, {} ],
     8: [ function(t, e) {
      var n = [].slice;
      e.exports = function(t, e) {
       if ("string" == typeof e && (e = t[e]), "function" != typeof e) throw new Error("bind() requires a function");
       var i = n.call(arguments, 2);
       return function() {
        return e.apply(t, i.concat(n.call(arguments)));
       };
      };
     }, {} ],
     9: [ function(t, e) {
      function n(t) {
       return t ? i(t) : void 0;
      }
      function i(t) {
       for (var e in n.prototype) t[e] = n.prototype[e];
       return t;
      }
      e.exports = n, n.prototype.on = n.prototype.addEventListener = function(t, e) {
       return this._callbacks = this._callbacks || {}, (this._callbacks[t] = this._callbacks[t] || []).push(e), 
       this;
      }, n.prototype.once = function(t, e) {
       function n() {
        i.off(t, n), e.apply(this, arguments);
       }
       var i = this;
       return this._callbacks = this._callbacks || {}, n.fn = e, this.on(t, n), this;
      }, n.prototype.off = n.prototype.removeListener = n.prototype.removeAllListeners = n.prototype.removeEventListener = function(t, e) {
       if (this._callbacks = this._callbacks || {}, 0 == arguments.length) return this._callbacks = {}, 
       this;
       var n = this._callbacks[t];
       if (!n) return this;
       if (1 == arguments.length) return delete this._callbacks[t], this;
       for (var i, r = 0; r < n.length; r++) if (i = n[r], i === e || i.fn === e) {
        n.splice(r, 1);
        break;
       }
       return this;
      }, n.prototype.emit = function(t) {
       this._callbacks = this._callbacks || {};
       var e = [].slice.call(arguments, 1), n = this._callbacks[t];
       if (n) {
        n = n.slice(0);
        for (var i = 0, r = n.length; r > i; ++i) n[i].apply(this, e);
       }
       return this;
      }, n.prototype.listeners = function(t) {
       return this._callbacks = this._callbacks || {}, this._callbacks[t] || [];
      }, n.prototype.hasListeners = function(t) {
       return !!this.listeners(t).length;
      };
     }, {} ],
     10: [ function(t, e) {
      function n(t) {
       return n.enabled(t) ? function(e) {
        e = i(e);
        var r = new Date(), o = r - (n[t] || r);
        n[t] = r, e = t + " " + e + " +" + n.humanize(o), window.console && console.log && Function.prototype.apply.call(console.log, console, arguments);
       } : function() {};
      }
      function i(t) {
       return t instanceof Error ? t.stack || t.message : t;
      }
      e.exports = n, n.names = [], n.skips = [], n.enable = function(t) {
       try {
        localStorage.debug = t;
       } catch (e) {}
       for (var i = (t || "").split(/[\s,]+/), r = i.length, o = 0; r > o; o++) t = i[o].replace("*", ".*?"), 
       "-" === t[0] ? n.skips.push(new RegExp("^" + t.substr(1) + "$")) : n.names.push(new RegExp("^" + t + "$"));
      }, n.disable = function() {
       n.enable("");
      }, n.humanize = function(t) {
       var e = 1e3, n = 6e4, i = 60 * n;
       return t >= i ? (t / i).toFixed(1) + "h" : t >= n ? (t / n).toFixed(1) + "m" : t >= e ? (t / e | 0) + "s" : t + "ms";
      }, n.enabled = function(t) {
       for (var e = 0, i = n.skips.length; i > e; e++) if (n.skips[e].test(t)) return !1;
       for (var e = 0, i = n.names.length; i > e; e++) if (n.names[e].test(t)) return !0;
       return !1;
      };
      try {
       window.localStorage && n.enable(localStorage.debug);
      } catch (r) {}
     }, {} ],
     11: [ function(t, e) {
      e.exports = t("./lib/");
     }, {
      "./lib/": 12
     } ],
     12: [ function(t, e) {
      e.exports = t("./socket"), e.exports.parser = t("engine.io-parser");
     }, {
      "./socket": 13,
      "engine.io-parser": 25
     } ],
     13: [ function(t, e) {
      (function(n) {
       function i(t, e) {
        if (!(this instanceof i)) return new i(t, e);
        if (e = e || {}, t && "object" == typeof t && (e = t, t = null), t && (t = l(t), 
        e.host = t.host, e.secure = "https" == t.protocol || "wss" == t.protocol, e.port = t.port, 
        t.query && (e.query = t.query)), this.secure = null != e.secure ? e.secure : n.location && "https:" == location.protocol, 
        e.host) {
         var r = e.host.split(":");
         e.hostname = r.shift(), r.length ? e.port = r.pop() : e.port || (e.port = this.secure ? "443" : "80");
        }
        this.agent = e.agent || !1, this.hostname = e.hostname || (n.location ? location.hostname : "localhost"), 
        this.port = e.port || (n.location && location.port ? location.port : this.secure ? 443 : 80), 
        this.query = e.query || {}, "string" == typeof this.query && (this.query = p.decode(this.query)), 
        this.upgrade = !1 !== e.upgrade, this.path = (e.path || "/engine.io").replace(/\/$/, "") + "/", 
        this.forceJSONP = !!e.forceJSONP, this.jsonp = !1 !== e.jsonp, this.forceBase64 = !!e.forceBase64, 
        this.enablesXDR = !!e.enablesXDR, this.timestampParam = e.timestampParam || "t", 
        this.timestampRequests = e.timestampRequests, this.transports = e.transports || [ "polling", "websocket" ], 
        this.readyState = "", this.writeBuffer = [], this.callbackBuffer = [], this.policyPort = e.policyPort || 843, 
        this.rememberUpgrade = e.rememberUpgrade || !1, this.binaryType = null, this.onlyBinaryUpgrades = e.onlyBinaryUpgrades, 
        this.pfx = e.pfx || null, this.key = e.key || null, this.passphrase = e.passphrase || null, 
        this.cert = e.cert || null, this.ca = e.ca || null, this.ciphers = e.ciphers || null, 
        this.rejectUnauthorized = e.rejectUnauthorized || null, this.open();
       }
       function r(t) {
        var e = {};
        for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]);
        return e;
       }
       var o = t("./transports"), s = t("component-emitter"), a = t("debug")("engine.io-client:socket"), c = t("indexof"), u = t("engine.io-parser"), l = t("parseuri"), h = t("parsejson"), p = t("parseqs");
       e.exports = i, i.priorWebsocketSuccess = !1, s(i.prototype), i.protocol = u.protocol, 
       i.Socket = i, i.Transport = t("./transport"), i.transports = t("./transports"), 
       i.parser = t("engine.io-parser"), i.prototype.createTransport = function(t) {
        a('creating transport "%s"', t);
        var e = r(this.query);
        e.EIO = u.protocol, e.transport = t, this.id && (e.sid = this.id);
        var n = new o[t]({
         agent: this.agent,
         hostname: this.hostname,
         port: this.port,
         secure: this.secure,
         path: this.path,
         query: e,
         forceJSONP: this.forceJSONP,
         jsonp: this.jsonp,
         forceBase64: this.forceBase64,
         enablesXDR: this.enablesXDR,
         timestampRequests: this.timestampRequests,
         timestampParam: this.timestampParam,
         policyPort: this.policyPort,
         socket: this,
         pfx: this.pfx,
         key: this.key,
         passphrase: this.passphrase,
         cert: this.cert,
         ca: this.ca,
         ciphers: this.ciphers,
         rejectUnauthorized: this.rejectUnauthorized
        });
        return n;
       }, i.prototype.open = function() {
        var t;
        if (this.rememberUpgrade && i.priorWebsocketSuccess && -1 != this.transports.indexOf("websocket")) t = "websocket"; else {
         if (0 == this.transports.length) {
          var e = this;
          return void setTimeout(function() {
           e.emit("error", "No transports available");
          }, 0);
         }
         t = this.transports[0];
        }
        this.readyState = "opening";
        var t;
        try {
         t = this.createTransport(t);
        } catch (n) {
         return this.transports.shift(), void this.open();
        }
        t.open(), this.setTransport(t);
       }, i.prototype.setTransport = function(t) {
        a("setting transport %s", t.name);
        var e = this;
        this.transport && (a("clearing existing transport %s", this.transport.name), this.transport.removeAllListeners()), 
        this.transport = t, t.on("drain", function() {
         e.onDrain();
        }).on("packet", function(t) {
         e.onPacket(t);
        }).on("error", function(t) {
         e.onError(t);
        }).on("close", function() {
         e.onClose("transport close");
        });
       }, i.prototype.probe = function(t) {
        function e() {
         if (p.onlyBinaryUpgrades) {
          var e = !this.supportsBinary && p.transport.supportsBinary;
          h = h || e;
         }
         h || (a('probe transport "%s" opened', t), l.send([ {
          type: "ping",
          data: "probe"
         } ]), l.once("packet", function(e) {
          if (!h) if ("pong" == e.type && "probe" == e.data) {
           if (a('probe transport "%s" pong', t), p.upgrading = !0, p.emit("upgrading", l), 
           !l) return;
           i.priorWebsocketSuccess = "websocket" == l.name, a('pausing current transport "%s"', p.transport.name), 
           p.transport.pause(function() {
            h || "closed" != p.readyState && (a("changing transport and sending upgrade packet"), 
            u(), p.setTransport(l), l.send([ {
             type: "upgrade"
            } ]), p.emit("upgrade", l), l = null, p.upgrading = !1, p.flush());
           });
          } else {
           a('probe transport "%s" failed', t);
           var n = new Error("probe error");
           n.transport = l.name, p.emit("upgradeError", n);
          }
         }));
        }
        function n() {
         h || (h = !0, u(), l.close(), l = null);
        }
        function r(e) {
         var i = new Error("probe error: " + e);
         i.transport = l.name, n(), a('probe transport "%s" failed because of error: %s', t, e), 
         p.emit("upgradeError", i);
        }
        function o() {
         r("transport closed");
        }
        function s() {
         r("socket closed");
        }
        function c(t) {
         l && t.name != l.name && (a('"%s" works - aborting "%s"', t.name, l.name), n());
        }
        function u() {
         l.removeListener("open", e), l.removeListener("error", r), l.removeListener("close", o), 
         p.removeListener("close", s), p.removeListener("upgrading", c);
        }
        a('probing transport "%s"', t);
        var l = this.createTransport(t, {
         probe: 1
        }), h = !1, p = this;
        i.priorWebsocketSuccess = !1, l.once("open", e), l.once("error", r), l.once("close", o), 
        this.once("close", s), this.once("upgrading", c), l.open();
       }, i.prototype.onOpen = function() {
        if (a("socket open"), this.readyState = "open", i.priorWebsocketSuccess = "websocket" == this.transport.name, 
        this.emit("open"), this.flush(), "open" == this.readyState && this.upgrade && this.transport.pause) {
         a("starting upgrade probes");
         for (var t = 0, e = this.upgrades.length; e > t; t++) this.probe(this.upgrades[t]);
        }
       }, i.prototype.onPacket = function(t) {
        if ("opening" == this.readyState || "open" == this.readyState) switch (a('socket receive: type "%s", data "%s"', t.type, t.data), 
        this.emit("packet", t), this.emit("heartbeat"), t.type) {
        case "open":
         this.onHandshake(h(t.data));
         break;

        case "pong":
         this.setPing();
         break;

        case "error":
         var e = new Error("server error");
         e.code = t.data, this.emit("error", e);
         break;

        case "message":
         this.emit("data", t.data), this.emit("message", t.data);
        } else a('packet received with socket readyState "%s"', this.readyState);
       }, i.prototype.onHandshake = function(t) {
        this.emit("handshake", t), this.id = t.sid, this.transport.query.sid = t.sid, this.upgrades = this.filterUpgrades(t.upgrades), 
        this.pingInterval = t.pingInterval, this.pingTimeout = t.pingTimeout, this.onOpen(), 
        "closed" != this.readyState && (this.setPing(), this.removeListener("heartbeat", this.onHeartbeat), 
        this.on("heartbeat", this.onHeartbeat));
       }, i.prototype.onHeartbeat = function(t) {
        clearTimeout(this.pingTimeoutTimer);
        var e = this;
        e.pingTimeoutTimer = setTimeout(function() {
         "closed" != e.readyState && e.onClose("ping timeout");
        }, t || e.pingInterval + e.pingTimeout);
       }, i.prototype.setPing = function() {
        var t = this;
        clearTimeout(t.pingIntervalTimer), t.pingIntervalTimer = setTimeout(function() {
         a("writing ping packet - expecting pong within %sms", t.pingTimeout), t.ping(), 
         t.onHeartbeat(t.pingTimeout);
        }, t.pingInterval);
       }, i.prototype.ping = function() {
        this.sendPacket("ping");
       }, i.prototype.onDrain = function() {
        for (var t = 0; t < this.prevBufferLen; t++) this.callbackBuffer[t] && this.callbackBuffer[t]();
        this.writeBuffer.splice(0, this.prevBufferLen), this.callbackBuffer.splice(0, this.prevBufferLen), 
        this.prevBufferLen = 0, 0 == this.writeBuffer.length ? this.emit("drain") : this.flush();
       }, i.prototype.flush = function() {
        "closed" != this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length && (a("flushing %d packets in socket", this.writeBuffer.length), 
        this.transport.send(this.writeBuffer), this.prevBufferLen = this.writeBuffer.length, 
        this.emit("flush"));
       }, i.prototype.write = i.prototype.send = function(t, e) {
        return this.sendPacket("message", t, e), this;
       }, i.prototype.sendPacket = function(t, e, n) {
        if ("closing" != this.readyState && "closed" != this.readyState) {
         var i = {
          type: t,
          data: e
         };
         this.emit("packetCreate", i), this.writeBuffer.push(i), this.callbackBuffer.push(n), 
         this.flush();
        }
       }, i.prototype.close = function() {
        function t() {
         i.onClose("forced close"), a("socket closing - telling transport to close"), i.transport.close();
        }
        function e() {
         i.removeListener("upgrade", e), i.removeListener("upgradeError", e), t();
        }
        function n() {
         i.once("upgrade", e), i.once("upgradeError", e);
        }
        if ("opening" == this.readyState || "open" == this.readyState) {
         this.readyState = "closing";
         var i = this;
         this.writeBuffer.length ? this.once("drain", function() {
          this.upgrading ? n() : t();
         }) : this.upgrading ? n() : t();
        }
        return this;
       }, i.prototype.onError = function(t) {
        a("socket error %j", t), i.priorWebsocketSuccess = !1, this.emit("error", t), this.onClose("transport error", t);
       }, i.prototype.onClose = function(t, e) {
        if ("opening" == this.readyState || "open" == this.readyState || "closing" == this.readyState) {
         a('socket close with reason: "%s"', t);
         var n = this;
         clearTimeout(this.pingIntervalTimer), clearTimeout(this.pingTimeoutTimer), setTimeout(function() {
          n.writeBuffer = [], n.callbackBuffer = [], n.prevBufferLen = 0;
         }, 0), this.transport.removeAllListeners("close"), this.transport.close(), this.transport.removeAllListeners(), 
         this.readyState = "closed", this.id = null, this.emit("close", t, e);
        }
       }, i.prototype.filterUpgrades = function(t) {
        for (var e = [], n = 0, i = t.length; i > n; n++) ~c(this.transports, t[n]) && e.push(t[n]);
        return e;
       };
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./transport": 14,
      "./transports": 15,
      "component-emitter": 9,
      debug: 22,
      "engine.io-parser": 25,
      indexof: 42,
      parsejson: 34,
      parseqs: 35,
      parseuri: 36
     } ],
     14: [ function(t, e) {
      function n(t) {
       this.path = t.path, this.hostname = t.hostname, this.port = t.port, this.secure = t.secure, 
       this.query = t.query, this.timestampParam = t.timestampParam, this.timestampRequests = t.timestampRequests, 
       this.readyState = "", this.agent = t.agent || !1, this.socket = t.socket, this.enablesXDR = t.enablesXDR, 
       this.pfx = t.pfx, this.key = t.key, this.passphrase = t.passphrase, this.cert = t.cert, 
       this.ca = t.ca, this.ciphers = t.ciphers, this.rejectUnauthorized = t.rejectUnauthorized;
      }
      var i = t("engine.io-parser"), r = t("component-emitter");
      e.exports = n, r(n.prototype), n.timestamps = 0, n.prototype.onError = function(t, e) {
       var n = new Error(t);
       return n.type = "TransportError", n.description = e, this.emit("error", n), this;
      }, n.prototype.open = function() {
       return ("closed" == this.readyState || "" == this.readyState) && (this.readyState = "opening", 
       this.doOpen()), this;
      }, n.prototype.close = function() {
       return ("opening" == this.readyState || "open" == this.readyState) && (this.doClose(), 
       this.onClose()), this;
      }, n.prototype.send = function(t) {
       if ("open" != this.readyState) throw new Error("Transport not open");
       this.write(t);
      }, n.prototype.onOpen = function() {
       this.readyState = "open", this.writable = !0, this.emit("open");
      }, n.prototype.onData = function(t) {
       var e = i.decodePacket(t, this.socket.binaryType);
       this.onPacket(e);
      }, n.prototype.onPacket = function(t) {
       this.emit("packet", t);
      }, n.prototype.onClose = function() {
       this.readyState = "closed", this.emit("close");
      };
     }, {
      "component-emitter": 9,
      "engine.io-parser": 25
     } ],
     15: [ function(t, e, n) {
      (function(e) {
       function i(t) {
        var n, i = !1, a = !1, c = !1 !== t.jsonp;
        if (e.location) {
         var u = "https:" == location.protocol, l = location.port;
         l || (l = u ? 443 : 80), i = t.hostname != location.hostname || l != t.port, a = t.secure != u;
        }
        if (t.xdomain = i, t.xscheme = a, n = new r(t), "open" in n && !t.forceJSONP) return new o(t);
        if (!c) throw new Error("JSONP disabled");
        return new s(t);
       }
       var r = t("xmlhttprequest"), o = t("./polling-xhr"), s = t("./polling-jsonp"), a = t("./websocket");
       n.polling = i, n.websocket = a;
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./polling-jsonp": 16,
      "./polling-xhr": 17,
      "./websocket": 19,
      xmlhttprequest: 20
     } ],
     16: [ function(t, e) {
      (function(n) {
       function i() {}
       function r(t) {
        o.call(this, t), this.query = this.query || {}, a || (n.___eio || (n.___eio = []), 
        a = n.___eio), this.index = a.length;
        var e = this;
        a.push(function(t) {
         e.onData(t);
        }), this.query.j = this.index, n.document && n.addEventListener && n.addEventListener("beforeunload", function() {
         e.script && (e.script.onerror = i);
        }, !1);
       }
       var o = t("./polling"), s = t("component-inherit");
       e.exports = r;
       var a, c = /\n/g, u = /\\n/g;
       s(r, o), r.prototype.supportsBinary = !1, r.prototype.doClose = function() {
        this.script && (this.script.parentNode.removeChild(this.script), this.script = null), 
        this.form && (this.form.parentNode.removeChild(this.form), this.form = null, this.iframe = null), 
        o.prototype.doClose.call(this);
       }, r.prototype.doPoll = function() {
        var t = this, e = document.createElement("script");
        this.script && (this.script.parentNode.removeChild(this.script), this.script = null), 
        e.async = !0, e.src = this.uri(), e.onerror = function(e) {
         t.onError("jsonp poll error", e);
        };
        var n = document.getElementsByTagName("script")[0];
        n.parentNode.insertBefore(e, n), this.script = e;
        var i = "undefined" != typeof navigator && /gecko/i.test(navigator.userAgent);
        i && setTimeout(function() {
         var t = document.createElement("iframe");
         document.body.appendChild(t), document.body.removeChild(t);
        }, 100);
       }, r.prototype.doWrite = function(t, e) {
        function n() {
         i(), e();
        }
        function i() {
         if (r.iframe) try {
          r.form.removeChild(r.iframe);
         } catch (t) {
          r.onError("jsonp polling iframe removal error", t);
         }
         try {
          var e = '<iframe src="javascript:0" name="' + r.iframeId + '">';
          o = document.createElement(e);
         } catch (t) {
          o = document.createElement("iframe"), o.name = r.iframeId, o.src = "javascript:0";
         }
         o.id = r.iframeId, r.form.appendChild(o), r.iframe = o;
        }
        var r = this;
        if (!this.form) {
         var o, s = document.createElement("form"), a = document.createElement("textarea"), l = this.iframeId = "eio_iframe_" + this.index;
         s.className = "socketio", s.style.position = "absolute", s.style.top = "-1000px", 
         s.style.left = "-1000px", s.target = l, s.method = "POST", s.setAttribute("accept-charset", "utf-8"), 
         a.name = "d", s.appendChild(a), document.body.appendChild(s), this.form = s, this.area = a;
        }
        this.form.action = this.uri(), i(), t = t.replace(u, "\\\n"), this.area.value = t.replace(c, "\\n");
        try {
         this.form.submit();
        } catch (h) {}
        this.iframe.attachEvent ? this.iframe.onreadystatechange = function() {
         "complete" == r.iframe.readyState && n();
        } : this.iframe.onload = n;
       };
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./polling": 18,
      "component-inherit": 21
     } ],
     17: [ function(t, e) {
      (function(n) {
       function i() {}
       function r(t) {
        if (c.call(this, t), n.location) {
         var e = "https:" == location.protocol, i = location.port;
         i || (i = e ? 443 : 80), this.xd = t.hostname != n.location.hostname || i != t.port, 
         this.xs = t.secure != e;
        }
       }
       function o(t) {
        this.method = t.method || "GET", this.uri = t.uri, this.xd = !!t.xd, this.xs = !!t.xs, 
        this.async = !1 !== t.async, this.data = void 0 != t.data ? t.data : null, this.agent = t.agent, 
        this.isBinary = t.isBinary, this.supportsBinary = t.supportsBinary, this.enablesXDR = t.enablesXDR, 
        this.pfx = t.pfx, this.key = t.key, this.passphrase = t.passphrase, this.cert = t.cert, 
        this.ca = t.ca, this.ciphers = t.ciphers, this.rejectUnauthorized = t.rejectUnauthorized, 
        this.create();
       }
       function s() {
        for (var t in o.requests) o.requests.hasOwnProperty(t) && o.requests[t].abort();
       }
       var a = t("xmlhttprequest"), c = t("./polling"), u = t("component-emitter"), l = t("component-inherit"), h = t("debug")("engine.io-client:polling-xhr");
       e.exports = r, e.exports.Request = o, l(r, c), r.prototype.supportsBinary = !0, 
       r.prototype.request = function(t) {
        return t = t || {}, t.uri = this.uri(), t.xd = this.xd, t.xs = this.xs, t.agent = this.agent || !1, 
        t.supportsBinary = this.supportsBinary, t.enablesXDR = this.enablesXDR, t.pfx = this.pfx, 
        t.key = this.key, t.passphrase = this.passphrase, t.cert = this.cert, t.ca = this.ca, 
        t.ciphers = this.ciphers, t.rejectUnauthorized = this.rejectUnauthorized, new o(t);
       }, r.prototype.doWrite = function(t, e) {
        var n = "string" != typeof t && void 0 !== t, i = this.request({
         method: "POST",
         data: t,
         isBinary: n
        }), r = this;
        i.on("success", e), i.on("error", function(t) {
         r.onError("xhr post error", t);
        }), this.sendXhr = i;
       }, r.prototype.doPoll = function() {
        h("xhr poll");
        var t = this.request(), e = this;
        t.on("data", function(t) {
         e.onData(t);
        }), t.on("error", function(t) {
         e.onError("xhr poll error", t);
        }), this.pollXhr = t;
       }, u(o.prototype), o.prototype.create = function() {
        var t = {
         agent: this.agent,
         xdomain: this.xd,
         xscheme: this.xs,
         enablesXDR: this.enablesXDR
        };
        t.pfx = this.pfx, t.key = this.key, t.passphrase = this.passphrase, t.cert = this.cert, 
        t.ca = this.ca, t.ciphers = this.ciphers, t.rejectUnauthorized = this.rejectUnauthorized;
        var e = this.xhr = new a(t), i = this;
        try {
         if (h("xhr open %s: %s", this.method, this.uri), e.open(this.method, this.uri, this.async), 
         this.supportsBinary && (e.responseType = "arraybuffer"), "POST" == this.method) try {
          this.isBinary ? e.setRequestHeader("Content-type", "application/octet-stream") : e.setRequestHeader("Content-type", "text/plain;charset=UTF-8");
         } catch (r) {}
         "withCredentials" in e && (e.withCredentials = !0), this.hasXDR() ? (e.onload = function() {
          i.onLoad();
         }, e.onerror = function() {
          i.onError(e.responseText);
         }) : e.onreadystatechange = function() {
          4 == e.readyState && (200 == e.status || 1223 == e.status ? i.onLoad() : setTimeout(function() {
           i.onError(e.status);
          }, 0));
         }, h("xhr data %s", this.data), e.send(this.data);
        } catch (r) {
         return void setTimeout(function() {
          i.onError(r);
         }, 0);
        }
        n.document && (this.index = o.requestsCount++, o.requests[this.index] = this);
       }, o.prototype.onSuccess = function() {
        this.emit("success"), this.cleanup();
       }, o.prototype.onData = function(t) {
        this.emit("data", t), this.onSuccess();
       }, o.prototype.onError = function(t) {
        this.emit("error", t), this.cleanup(!0);
       }, o.prototype.cleanup = function(t) {
        if ("undefined" != typeof this.xhr && null !== this.xhr) {
         if (this.hasXDR() ? this.xhr.onload = this.xhr.onerror = i : this.xhr.onreadystatechange = i, 
         t) try {
          this.xhr.abort();
         } catch (e) {}
         n.document && delete o.requests[this.index], this.xhr = null;
        }
       }, o.prototype.onLoad = function() {
        var t;
        try {
         var e;
         try {
          e = this.xhr.getResponseHeader("Content-Type").split(";")[0];
         } catch (n) {}
         t = "application/octet-stream" === e ? this.xhr.response : this.supportsBinary ? "ok" : this.xhr.responseText;
        } catch (n) {
         this.onError(n);
        }
        null != t && this.onData(t);
       }, o.prototype.hasXDR = function() {
        return "undefined" != typeof n.XDomainRequest && !this.xs && this.enablesXDR;
       }, o.prototype.abort = function() {
        this.cleanup();
       }, n.document && (o.requestsCount = 0, o.requests = {}, n.attachEvent ? n.attachEvent("onunload", s) : n.addEventListener && n.addEventListener("beforeunload", s, !1));
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./polling": 18,
      "component-emitter": 9,
      "component-inherit": 21,
      debug: 22,
      xmlhttprequest: 20
     } ],
     18: [ function(t, e) {
      function n(t) {
       var e = t && t.forceBase64;
       (!c || e) && (this.supportsBinary = !1), i.call(this, t);
      }
      var i = t("../transport"), r = t("parseqs"), o = t("engine.io-parser"), s = t("component-inherit"), a = t("debug")("engine.io-client:polling");
      e.exports = n;
      var c = function() {
       var e = t("xmlhttprequest"), n = new e({
        xdomain: !1
       });
       return null != n.responseType;
      }();
      s(n, i), n.prototype.name = "polling", n.prototype.doOpen = function() {
       this.poll();
      }, n.prototype.pause = function(t) {
       function e() {
        a("paused"), n.readyState = "paused", t();
       }
       var n = this;
       if (this.readyState = "pausing", this.polling || !this.writable) {
        var i = 0;
        this.polling && (a("we are currently polling - waiting to pause"), i++, this.once("pollComplete", function() {
         a("pre-pause polling complete"), --i || e();
        })), this.writable || (a("we are currently writing - waiting to pause"), i++, this.once("drain", function() {
         a("pre-pause writing complete"), --i || e();
        }));
       } else e();
      }, n.prototype.poll = function() {
       a("polling"), this.polling = !0, this.doPoll(), this.emit("poll");
      }, n.prototype.onData = function(t) {
       var e = this;
       a("polling got data %s", t);
       var n = function(t) {
        return "opening" == e.readyState && e.onOpen(), "close" == t.type ? (e.onClose(), 
        !1) : void e.onPacket(t);
       };
       o.decodePayload(t, this.socket.binaryType, n), "closed" != this.readyState && (this.polling = !1, 
       this.emit("pollComplete"), "open" == this.readyState ? this.poll() : a('ignoring poll - transport state "%s"', this.readyState));
      }, n.prototype.doClose = function() {
       function t() {
        a("writing close packet"), e.write([ {
         type: "close"
        } ]);
       }
       var e = this;
       "open" == this.readyState ? (a("transport open - closing"), t()) : (a("transport not open - deferring close"), 
       this.once("open", t));
      }, n.prototype.write = function(t) {
       var e = this;
       this.writable = !1;
       var n = function() {
        e.writable = !0, e.emit("drain");
       }, e = this;
       o.encodePayload(t, this.supportsBinary, function(t) {
        e.doWrite(t, n);
       });
      }, n.prototype.uri = function() {
       var t = this.query || {}, e = this.secure ? "https" : "http", n = "";
       return !1 !== this.timestampRequests && (t[this.timestampParam] = +new Date() + "-" + i.timestamps++), 
       this.supportsBinary || t.sid || (t.b64 = 1), t = r.encode(t), this.port && ("https" == e && 443 != this.port || "http" == e && 80 != this.port) && (n = ":" + this.port), 
       t.length && (t = "?" + t), e + "://" + this.hostname + n + this.path + t;
      };
     }, {
      "../transport": 14,
      "component-inherit": 21,
      debug: 22,
      "engine.io-parser": 25,
      parseqs: 35,
      xmlhttprequest: 20
     } ],
     19: [ function(t, e) {
      function n(t) {
       var e = t && t.forceBase64;
       e && (this.supportsBinary = !1), i.call(this, t);
      }
      var i = t("../transport"), r = t("engine.io-parser"), o = t("parseqs"), s = t("component-inherit"), a = t("debug")("engine.io-client:websocket"), c = t("ws");
      e.exports = n, s(n, i), n.prototype.name = "websocket", n.prototype.supportsBinary = !0, 
      n.prototype.doOpen = function() {
       if (this.check()) {
        var t = this.uri(), e = void 0, n = {
         agent: this.agent
        };
        n.pfx = this.pfx, n.key = this.key, n.passphrase = this.passphrase, n.cert = this.cert, 
        n.ca = this.ca, n.ciphers = this.ciphers, n.rejectUnauthorized = this.rejectUnauthorized, 
        this.ws = new c(t, e, n), void 0 === this.ws.binaryType && (this.supportsBinary = !1), 
        this.ws.binaryType = "arraybuffer", this.addEventListeners();
       }
      }, n.prototype.addEventListeners = function() {
       var t = this;
       this.ws.onopen = function() {
        t.onOpen();
       }, this.ws.onclose = function() {
        t.onClose();
       }, this.ws.onmessage = function(e) {
        t.onData(e.data);
       }, this.ws.onerror = function(e) {
        t.onError("websocket error", e);
       };
      }, "undefined" != typeof navigator && /iPad|iPhone|iPod/i.test(navigator.userAgent) && (n.prototype.onData = function(t) {
       var e = this;
       setTimeout(function() {
        i.prototype.onData.call(e, t);
       }, 0);
      }), n.prototype.write = function(t) {
       function e() {
        n.writable = !0, n.emit("drain");
       }
       var n = this;
       this.writable = !1;
       for (var i = 0, o = t.length; o > i; i++) r.encodePacket(t[i], this.supportsBinary, function(t) {
        try {
         n.ws.send(t);
        } catch (e) {
         a("websocket closed before onclose event");
        }
       });
       setTimeout(e, 0);
      }, n.prototype.onClose = function() {
       i.prototype.onClose.call(this);
      }, n.prototype.doClose = function() {
       "undefined" != typeof this.ws && this.ws.close();
      }, n.prototype.uri = function() {
       var t = this.query || {}, e = this.secure ? "wss" : "ws", n = "";
       return this.port && ("wss" == e && 443 != this.port || "ws" == e && 80 != this.port) && (n = ":" + this.port), 
       this.timestampRequests && (t[this.timestampParam] = +new Date()), this.supportsBinary || (t.b64 = 1), 
       t = o.encode(t), t.length && (t = "?" + t), e + "://" + this.hostname + n + this.path + t;
      }, n.prototype.check = function() {
       return !(!c || "__initialize" in c && this.name === n.prototype.name);
      };
     }, {
      "../transport": 14,
      "component-inherit": 21,
      debug: 22,
      "engine.io-parser": 25,
      parseqs: 35,
      ws: 37
     } ],
     20: [ function(t, e) {
      var n = t("has-cors");
      e.exports = function(t) {
       var e = t.xdomain, i = t.xscheme, r = t.enablesXDR;
       try {
        if ("undefined" != typeof XMLHttpRequest && (!e || n)) return new XMLHttpRequest();
       } catch (o) {}
       try {
        if ("undefined" != typeof XDomainRequest && !i && r) return new XDomainRequest();
       } catch (o) {}
       if (!e) try {
        return new ActiveXObject("Microsoft.XMLHTTP");
       } catch (o) {}
      };
     }, {
      "has-cors": 40
     } ],
     21: [ function(t, e) {
      e.exports = function(t, e) {
       var n = function() {};
       n.prototype = e.prototype, t.prototype = new n(), t.prototype.constructor = t;
      };
     }, {} ],
     22: [ function(t, e, n) {
      function i() {
       return "WebkitAppearance" in document.documentElement.style || window.console && (console.firebug || console.exception && console.table) || navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31;
      }
      function r() {
       var t = arguments, e = this.useColors;
       if (t[0] = (e ? "%c" : "") + this.namespace + (e ? " %c" : " ") + t[0] + (e ? "%c " : " ") + "+" + n.humanize(this.diff), 
       !e) return t;
       var i = "color: " + this.color;
       t = [ t[0], i, "color: inherit" ].concat(Array.prototype.slice.call(t, 1));
       var r = 0, o = 0;
       return t[0].replace(/%[a-z%]/g, function(t) {
        "%" !== t && (r++, "%c" === t && (o = r));
       }), t.splice(o, 0, i), t;
      }
      function o() {
       return "object" == typeof console && "function" == typeof console.log && Function.prototype.apply.call(console.log, console, arguments);
      }
      function s(t) {
       try {
        null == t ? localStorage.removeItem("debug") : localStorage.debug = t;
       } catch (e) {}
      }
      function a() {
       var t;
       try {
        t = localStorage.debug;
       } catch (e) {}
       return t;
      }
      n = e.exports = t("./debug"), n.log = o, n.formatArgs = r, n.save = s, n.load = a, 
      n.useColors = i, n.colors = [ "lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson" ], 
      n.formatters.j = function(t) {
       return JSON.stringify(t);
      }, n.enable(a());
     }, {
      "./debug": 23
     } ],
     23: [ function(t, e, n) {
      function i() {
       return n.colors[l++ % n.colors.length];
      }
      function r(t) {
       function e() {}
       function r() {
        var t = r, e = +new Date(), o = e - (u || e);
        t.diff = o, t.prev = u, t.curr = e, u = e, null == t.useColors && (t.useColors = n.useColors()), 
        null == t.color && t.useColors && (t.color = i());
        var s = Array.prototype.slice.call(arguments);
        s[0] = n.coerce(s[0]), "string" != typeof s[0] && (s = [ "%o" ].concat(s));
        var a = 0;
        s[0] = s[0].replace(/%([a-z%])/g, function(e, i) {
         if ("%" === e) return e;
         a++;
         var r = n.formatters[i];
         if ("function" == typeof r) {
          var o = s[a];
          e = r.call(t, o), s.splice(a, 1), a--;
         }
         return e;
        }), "function" == typeof n.formatArgs && (s = n.formatArgs.apply(t, s));
        var c = r.log || n.log || console.log.bind(console);
        c.apply(t, s);
       }
       e.enabled = !1, r.enabled = !0;
       var o = n.enabled(t) ? r : e;
       return o.namespace = t, o;
      }
      function o(t) {
       n.save(t);
       for (var e = (t || "").split(/[\s,]+/), i = e.length, r = 0; i > r; r++) e[r] && (t = e[r].replace(/\*/g, ".*?"), 
       "-" === t[0] ? n.skips.push(new RegExp("^" + t.substr(1) + "$")) : n.names.push(new RegExp("^" + t + "$")));
      }
      function s() {
       n.enable("");
      }
      function a(t) {
       var e, i;
       for (e = 0, i = n.skips.length; i > e; e++) if (n.skips[e].test(t)) return !1;
       for (e = 0, i = n.names.length; i > e; e++) if (n.names[e].test(t)) return !0;
       return !1;
      }
      function c(t) {
       return t instanceof Error ? t.stack || t.message : t;
      }
      n = e.exports = r, n.coerce = c, n.disable = s, n.enable = o, n.enabled = a, n.humanize = t("ms"), 
      n.names = [], n.skips = [], n.formatters = {};
      var u, l = 0;
     }, {
      ms: 24
     } ],
     24: [ function(t, e) {
      function n(t) {
       var e = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(t);
       if (e) {
        var n = parseFloat(e[1]), i = (e[2] || "ms").toLowerCase();
        switch (i) {
        case "years":
        case "year":
        case "y":
         return n * l;

        case "days":
        case "day":
        case "d":
         return n * u;

        case "hours":
        case "hour":
        case "h":
         return n * c;

        case "minutes":
        case "minute":
        case "m":
         return n * a;

        case "seconds":
        case "second":
        case "s":
         return n * s;

        case "ms":
         return n;
        }
       }
      }
      function i(t) {
       return t >= u ? Math.round(t / u) + "d" : t >= c ? Math.round(t / c) + "h" : t >= a ? Math.round(t / a) + "m" : t >= s ? Math.round(t / s) + "s" : t + "ms";
      }
      function r(t) {
       return o(t, u, "day") || o(t, c, "hour") || o(t, a, "minute") || o(t, s, "second") || t + " ms";
      }
      function o(t, e, n) {
       return e > t ? void 0 : 1.5 * e > t ? Math.floor(t / e) + " " + n : Math.ceil(t / e) + " " + n + "s";
      }
      var s = 1e3, a = 60 * s, c = 60 * a, u = 24 * c, l = 365.25 * u;
      e.exports = function(t, e) {
       return e = e || {}, "string" == typeof t ? n(t) : e["long"] ? r(t) : i(t);
      };
     }, {} ],
     25: [ function(t, e, n) {
      (function(e) {
       function i(t, e) {
        var i = "b" + n.packets[t.type] + t.data.data;
        return e(i);
       }
       function r(t, e, i) {
        if (!e) return n.encodeBase64Packet(t, i);
        var r = t.data, o = new Uint8Array(r), s = new Uint8Array(1 + r.byteLength);
        s[0] = m[t.type];
        for (var a = 0; a < o.length; a++) s[a + 1] = o[a];
        return i(s.buffer);
       }
       function o(t, e, i) {
        if (!e) return n.encodeBase64Packet(t, i);
        var r = new FileReader();
        return r.onload = function() {
         t.data = r.result, n.encodePacket(t, e, !0, i);
        }, r.readAsArrayBuffer(t.data);
       }
       function s(t, e, i) {
        if (!e) return n.encodeBase64Packet(t, i);
        if (g) return o(t, e, i);
        var r = new Uint8Array(1);
        r[0] = m[t.type];
        var s = new w([ r.buffer, t.data ]);
        return i(s);
       }
       function a(t, e, n) {
        for (var i = new Array(t.length), r = p(t.length, n), o = function(t, n, r) {
         e(n, function(e, n) {
          i[t] = n, r(e, i);
         });
        }, s = 0; s < t.length; s++) o(s, t[s], r);
       }
       var c = t("./keys"), u = t("has-binary"), l = t("arraybuffer.slice"), h = t("base64-arraybuffer"), p = t("after"), f = t("utf8"), d = navigator.userAgent.match(/Android/i), v = /PhantomJS/i.test(navigator.userAgent), g = d || v;
       n.protocol = 3;
       var m = n.packets = {
        open: 0,
        close: 1,
        ping: 2,
        pong: 3,
        message: 4,
        upgrade: 5,
        noop: 6
       }, y = c(m), b = {
        type: "error",
        data: "parser error"
       }, w = t("blob");
       n.encodePacket = function(t, n, o, a) {
        "function" == typeof n && (a = n, n = !1), "function" == typeof o && (a = o, o = null);
        var c = void 0 === t.data ? void 0 : t.data.buffer || t.data;
        if (e.ArrayBuffer && c instanceof ArrayBuffer) return r(t, n, a);
        if (w && c instanceof e.Blob) return s(t, n, a);
        if (c && c.base64) return i(t, a);
        var u = m[t.type];
        return void 0 !== t.data && (u += o ? f.encode(String(t.data)) : String(t.data)), 
        a("" + u);
       }, n.encodeBase64Packet = function(t, i) {
        var r = "b" + n.packets[t.type];
        if (w && t.data instanceof w) {
         var o = new FileReader();
         return o.onload = function() {
          var t = o.result.split(",")[1];
          i(r + t);
         }, o.readAsDataURL(t.data);
        }
        var s;
        try {
         s = String.fromCharCode.apply(null, new Uint8Array(t.data));
        } catch (a) {
         for (var c = new Uint8Array(t.data), u = new Array(c.length), l = 0; l < c.length; l++) u[l] = c[l];
         s = String.fromCharCode.apply(null, u);
        }
        return r += e.btoa(s), i(r);
       }, n.decodePacket = function(t, e, i) {
        if ("string" == typeof t || void 0 === t) {
         if ("b" == t.charAt(0)) return n.decodeBase64Packet(t.substr(1), e);
         if (i) try {
          t = f.decode(t);
         } catch (r) {
          return b;
         }
         var o = t.charAt(0);
         return Number(o) == o && y[o] ? t.length > 1 ? {
          type: y[o],
          data: t.substring(1)
         } : {
          type: y[o]
         } : b;
        }
        var s = new Uint8Array(t), o = s[0], a = l(t, 1);
        return w && "blob" === e && (a = new w([ a ])), {
         type: y[o],
         data: a
        };
       }, n.decodeBase64Packet = function(t, n) {
        var i = y[t.charAt(0)];
        if (!e.ArrayBuffer) return {
         type: i,
         data: {
          base64: !0,
          data: t.substr(1)
         }
        };
        var r = h.decode(t.substr(1));
        return "blob" === n && w && (r = new w([ r ])), {
         type: i,
         data: r
        };
       }, n.encodePayload = function(t, e, i) {
        function r(t) {
         return t.length + ":" + t;
        }
        function o(t, i) {
         n.encodePacket(t, s ? e : !1, !0, function(t) {
          i(null, r(t));
         });
        }
        "function" == typeof e && (i = e, e = null);
        var s = u(t);
        return e && s ? w && !g ? n.encodePayloadAsBlob(t, i) : n.encodePayloadAsArrayBuffer(t, i) : t.length ? void a(t, o, function(t, e) {
         return i(e.join(""));
        }) : i("0:");
       }, n.decodePayload = function(t, e, i) {
        if ("string" != typeof t) return n.decodePayloadAsBinary(t, e, i);
        "function" == typeof e && (i = e, e = null);
        var r;
        if ("" == t) return i(b, 0, 1);
        for (var o, s, a = "", c = 0, u = t.length; u > c; c++) {
         var l = t.charAt(c);
         if (":" != l) a += l; else {
          if ("" == a || a != (o = Number(a))) return i(b, 0, 1);
          if (s = t.substr(c + 1, o), a != s.length) return i(b, 0, 1);
          if (s.length) {
           if (r = n.decodePacket(s, e, !0), b.type == r.type && b.data == r.data) return i(b, 0, 1);
           var h = i(r, c + o, u);
           if (!1 === h) return;
          }
          c += o, a = "";
         }
        }
        return "" != a ? i(b, 0, 1) : void 0;
       }, n.encodePayloadAsArrayBuffer = function(t, e) {
        function i(t, e) {
         n.encodePacket(t, !0, !0, function(t) {
          return e(null, t);
         });
        }
        return t.length ? void a(t, i, function(t, n) {
         var i = n.reduce(function(t, e) {
          var n;
          return n = "string" == typeof e ? e.length : e.byteLength, t + n.toString().length + n + 2;
         }, 0), r = new Uint8Array(i), o = 0;
         return n.forEach(function(t) {
          var e = "string" == typeof t, n = t;
          if (e) {
           for (var i = new Uint8Array(t.length), s = 0; s < t.length; s++) i[s] = t.charCodeAt(s);
           n = i.buffer;
          }
          r[o++] = e ? 0 : 1;
          for (var a = n.byteLength.toString(), s = 0; s < a.length; s++) r[o++] = parseInt(a[s]);
          r[o++] = 255;
          for (var i = new Uint8Array(n), s = 0; s < i.length; s++) r[o++] = i[s];
         }), e(r.buffer);
        }) : e(new ArrayBuffer(0));
       }, n.encodePayloadAsBlob = function(t, e) {
        function i(t, e) {
         n.encodePacket(t, !0, !0, function(t) {
          var n = new Uint8Array(1);
          if (n[0] = 1, "string" == typeof t) {
           for (var i = new Uint8Array(t.length), r = 0; r < t.length; r++) i[r] = t.charCodeAt(r);
           t = i.buffer, n[0] = 0;
          }
          for (var o = t instanceof ArrayBuffer ? t.byteLength : t.size, s = o.toString(), a = new Uint8Array(s.length + 1), r = 0; r < s.length; r++) a[r] = parseInt(s[r]);
          if (a[s.length] = 255, w) {
           var c = new w([ n.buffer, a.buffer, t ]);
           e(null, c);
          }
         });
        }
        a(t, i, function(t, n) {
         return e(new w(n));
        });
       }, n.decodePayloadAsBinary = function(t, e, i) {
        "function" == typeof e && (i = e, e = null);
        for (var r = t, o = [], s = !1; r.byteLength > 0; ) {
         for (var a = new Uint8Array(r), c = 0 === a[0], u = "", h = 1; 255 != a[h]; h++) {
          if (u.length > 310) {
           s = !0;
           break;
          }
          u += a[h];
         }
         if (s) return i(b, 0, 1);
         r = l(r, 2 + u.length), u = parseInt(u);
         var p = l(r, 0, u);
         if (c) try {
          p = String.fromCharCode.apply(null, new Uint8Array(p));
         } catch (f) {
          var d = new Uint8Array(p);
          p = "";
          for (var h = 0; h < d.length; h++) p += String.fromCharCode(d[h]);
         }
         o.push(p), r = l(r, u);
        }
        var v = o.length;
        o.forEach(function(t, r) {
         i(n.decodePacket(t, e, !0), r, v);
        });
       };
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./keys": 26,
      after: 27,
      "arraybuffer.slice": 28,
      "base64-arraybuffer": 29,
      blob: 30,
      "has-binary": 31,
      utf8: 33
     } ],
     26: [ function(t, e) {
      e.exports = Object.keys || function(t) {
       var e = [], n = Object.prototype.hasOwnProperty;
       for (var i in t) n.call(t, i) && e.push(i);
       return e;
      };
     }, {} ],
     27: [ function(t, e) {
      function n(t, e, n) {
       function r(t, i) {
        if (r.count <= 0) throw new Error("after called too many times");
        --r.count, t ? (o = !0, e(t), e = n) : 0 !== r.count || o || e(null, i);
       }
       var o = !1;
       return n = n || i, r.count = t, 0 === t ? e() : r;
      }
      function i() {}
      e.exports = n;
     }, {} ],
     28: [ function(t, e) {
      e.exports = function(t, e, n) {
       var i = t.byteLength;
       if (e = e || 0, n = n || i, t.slice) return t.slice(e, n);
       if (0 > e && (e += i), 0 > n && (n += i), n > i && (n = i), e >= i || e >= n || 0 === i) return new ArrayBuffer(0);
       for (var r = new Uint8Array(t), o = new Uint8Array(n - e), s = e, a = 0; n > s; s++, 
       a++) o[a] = r[s];
       return o.buffer;
      };
     }, {} ],
     29: [ function(t, e, n) {
      !function(t) {
       "use strict";
       n.encode = function(e) {
        var n, i = new Uint8Array(e), r = i.length, o = "";
        for (n = 0; r > n; n += 3) o += t[i[n] >> 2], o += t[(3 & i[n]) << 4 | i[n + 1] >> 4], 
        o += t[(15 & i[n + 1]) << 2 | i[n + 2] >> 6], o += t[63 & i[n + 2]];
        return r % 3 === 2 ? o = o.substring(0, o.length - 1) + "=" : r % 3 === 1 && (o = o.substring(0, o.length - 2) + "=="), 
        o;
       }, n.decode = function(e) {
        var n, i, r, o, s, a = .75 * e.length, c = e.length, u = 0;
        "=" === e[e.length - 1] && (a--, "=" === e[e.length - 2] && a--);
        var l = new ArrayBuffer(a), h = new Uint8Array(l);
        for (n = 0; c > n; n += 4) i = t.indexOf(e[n]), r = t.indexOf(e[n + 1]), o = t.indexOf(e[n + 2]), 
        s = t.indexOf(e[n + 3]), h[u++] = i << 2 | r >> 4, h[u++] = (15 & r) << 4 | o >> 2, 
        h[u++] = (3 & o) << 6 | 63 & s;
        return l;
       };
      }("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
     }, {} ],
     30: [ function(t, e) {
      (function(t) {
       function n(t, e) {
        e = e || {};
        for (var n = new i(), r = 0; r < t.length; r++) n.append(t[r]);
        return e.type ? n.getBlob(e.type) : n.getBlob();
       }
       var i = t.BlobBuilder || t.WebKitBlobBuilder || t.MSBlobBuilder || t.MozBlobBuilder, r = function() {
        try {
         var t = new Blob([ "hi" ]);
         return 2 == t.size;
        } catch (e) {
         return !1;
        }
       }(), o = i && i.prototype.append && i.prototype.getBlob;
       e.exports = function() {
        return r ? t.Blob : o ? n : void 0;
       }();
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {} ],
     31: [ function(t, e) {
      (function(n) {
       function i(t) {
        function e(t) {
         if (!t) return !1;
         if (n.Buffer && n.Buffer.isBuffer(t) || n.ArrayBuffer && t instanceof ArrayBuffer || n.Blob && t instanceof Blob || n.File && t instanceof File) return !0;
         if (r(t)) {
          for (var i = 0; i < t.length; i++) if (e(t[i])) return !0;
         } else if (t && "object" == typeof t) {
          t.toJSON && (t = t.toJSON());
          for (var o in t) if (t.hasOwnProperty(o) && e(t[o])) return !0;
         }
         return !1;
        }
        return e(t);
       }
       var r = t("isarray");
       e.exports = i;
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      isarray: 32
     } ],
     32: [ function(t, e) {
      e.exports = Array.isArray || function(t) {
       return "[object Array]" == Object.prototype.toString.call(t);
      };
     }, {} ],
     33: [ function(t, n, i) {
      (function(t) {
       !function(r) {
        function o(t) {
         for (var e, n, i = [], r = 0, o = t.length; o > r; ) e = t.charCodeAt(r++), e >= 55296 && 56319 >= e && o > r ? (n = t.charCodeAt(r++), 
         56320 == (64512 & n) ? i.push(((1023 & e) << 10) + (1023 & n) + 65536) : (i.push(e), 
         r--)) : i.push(e);
         return i;
        }
        function s(t) {
         for (var e, n = t.length, i = -1, r = ""; ++i < n; ) e = t[i], e > 65535 && (e -= 65536, 
         r += b(e >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), r += b(e);
         return r;
        }
        function a(t, e) {
         return b(t >> e & 63 | 128);
        }
        function c(t) {
         if (0 == (4294967168 & t)) return b(t);
         var e = "";
         return 0 == (4294965248 & t) ? e = b(t >> 6 & 31 | 192) : 0 == (4294901760 & t) ? (e = b(t >> 12 & 15 | 224), 
         e += a(t, 6)) : 0 == (4292870144 & t) && (e = b(t >> 18 & 7 | 240), e += a(t, 12), 
         e += a(t, 6)), e += b(63 & t | 128);
        }
        function u(t) {
         for (var e, n = o(t), i = n.length, r = -1, s = ""; ++r < i; ) e = n[r], s += c(e);
         return s;
        }
        function l() {
         if (y >= m) throw Error("Invalid byte index");
         var t = 255 & g[y];
         if (y++, 128 == (192 & t)) return 63 & t;
         throw Error("Invalid continuation byte");
        }
        function h() {
         var t, e, n, i, r;
         if (y > m) throw Error("Invalid byte index");
         if (y == m) return !1;
         if (t = 255 & g[y], y++, 0 == (128 & t)) return t;
         if (192 == (224 & t)) {
          var e = l();
          if (r = (31 & t) << 6 | e, r >= 128) return r;
          throw Error("Invalid continuation byte");
         }
         if (224 == (240 & t)) {
          if (e = l(), n = l(), r = (15 & t) << 12 | e << 6 | n, r >= 2048) return r;
          throw Error("Invalid continuation byte");
         }
         if (240 == (248 & t) && (e = l(), n = l(), i = l(), r = (15 & t) << 18 | e << 12 | n << 6 | i, 
         r >= 65536 && 1114111 >= r)) return r;
         throw Error("Invalid UTF-8 detected");
        }
        function p(t) {
         g = o(t), m = g.length, y = 0;
         for (var e, n = []; (e = h()) !== !1; ) n.push(e);
         return s(n);
        }
        var f = "object" == typeof i && i, d = "object" == typeof n && n && n.exports == f && n, v = "object" == typeof t && t;
        (v.global === v || v.window === v) && (r = v);
        var g, m, y, b = String.fromCharCode, w = {
         version: "2.0.0",
         encode: u,
         decode: p
        };
        if ("function" == typeof e && "object" == typeof e.amd && e.amd) e(function() {
         return w;
        }); else if (f && !f.nodeType) if (d) d.exports = w; else {
         var _ = {}, x = _.hasOwnProperty;
         for (var $ in w) x.call(w, $) && (f[$] = w[$]);
        } else r.utf8 = w;
       }(this);
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {} ],
     34: [ function(t, e) {
      (function(t) {
       var n = /^[\],:{}\s]*$/, i = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, r = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, o = /(?:^|:|,)(?:\s*\[)+/g, s = /^\s+/, a = /\s+$/;
       e.exports = function(e) {
        return "string" == typeof e && e ? (e = e.replace(s, "").replace(a, ""), t.JSON && JSON.parse ? JSON.parse(e) : n.test(e.replace(i, "@").replace(r, "]").replace(o, "")) ? new Function("return " + e)() : void 0) : null;
       };
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {} ],
     35: [ function(t, e, n) {
      n.encode = function(t) {
       var e = "";
       for (var n in t) t.hasOwnProperty(n) && (e.length && (e += "&"), e += encodeURIComponent(n) + "=" + encodeURIComponent(t[n]));
       return e;
      }, n.decode = function(t) {
       for (var e = {}, n = t.split("&"), i = 0, r = n.length; r > i; i++) {
        var o = n[i].split("=");
        e[decodeURIComponent(o[0])] = decodeURIComponent(o[1]);
       }
       return e;
      };
     }, {} ],
     36: [ function(t, e) {
      var n = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/, i = [ "source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ];
      e.exports = function(t) {
       var e = t, r = t.indexOf("["), o = t.indexOf("]");
       -1 != r && -1 != o && (t = t.substring(0, r) + t.substring(r, o).replace(/:/g, ";") + t.substring(o, t.length));
       for (var s = n.exec(t || ""), a = {}, c = 14; c--; ) a[i[c]] = s[c] || "";
       return -1 != r && -1 != o && (a.source = e, a.host = a.host.substring(1, a.host.length - 1).replace(/;/g, ":"), 
       a.authority = a.authority.replace("[", "").replace("]", "").replace(/;/g, ":"), 
       a.ipv6uri = !0), a;
      };
     }, {} ],
     37: [ function(t, e) {
      function n(t, e) {
       var n;
       return n = e ? new r(t, e) : new r(t);
      }
      var i = function() {
       return this;
      }(), r = i.WebSocket || i.MozWebSocket;
      e.exports = r ? n : null, r && (n.prototype = r.prototype);
     }, {} ],
     38: [ function(t, e) {
      (function(n) {
       function i(t) {
        function e(t) {
         if (!t) return !1;
         if (n.Buffer && n.Buffer.isBuffer(t) || n.ArrayBuffer && t instanceof ArrayBuffer || n.Blob && t instanceof Blob || n.File && t instanceof File) return !0;
         if (r(t)) {
          for (var i = 0; i < t.length; i++) if (e(t[i])) return !0;
         } else if (t && "object" == typeof t) {
          t.toJSON && (t = t.toJSON());
          for (var o in t) if (Object.prototype.hasOwnProperty.call(t, o) && e(t[o])) return !0;
         }
         return !1;
        }
        return e(t);
       }
       var r = t("isarray");
       e.exports = i;
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      isarray: 39
     } ],
     39: [ function(t, e) {
      e.exports = t(32);
     }, {} ],
     40: [ function(t, e) {
      var n = t("global");
      try {
       e.exports = "XMLHttpRequest" in n && "withCredentials" in new n.XMLHttpRequest();
      } catch (i) {
       e.exports = !1;
      }
     }, {
      global: 41
     } ],
     41: [ function(t, e) {
      e.exports = function() {
       return this;
      }();
     }, {} ],
     42: [ function(t, e) {
      var n = [].indexOf;
      e.exports = function(t, e) {
       if (n) return t.indexOf(e);
       for (var i = 0; i < t.length; ++i) if (t[i] === e) return i;
       return -1;
      };
     }, {} ],
     43: [ function(t, e, n) {
      var i = Object.prototype.hasOwnProperty;
      n.keys = Object.keys || function(t) {
       var e = [];
       for (var n in t) i.call(t, n) && e.push(n);
       return e;
      }, n.values = function(t) {
       var e = [];
       for (var n in t) i.call(t, n) && e.push(t[n]);
       return e;
      }, n.merge = function(t, e) {
       for (var n in e) i.call(e, n) && (t[n] = e[n]);
       return t;
      }, n.length = function(t) {
       return n.keys(t).length;
      }, n.isEmpty = function(t) {
       return 0 == n.length(t);
      };
     }, {} ],
     44: [ function(t, e) {
      var n = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/, i = [ "source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ];
      e.exports = function(t) {
       for (var e = n.exec(t || ""), r = {}, o = 14; o--; ) r[i[o]] = e[o] || "";
       return r;
      };
     }, {} ],
     45: [ function(t, e, n) {
      (function(e) {
       var i = t("isarray"), r = t("./is-buffer");
       n.deconstructPacket = function(t) {
        function e(t) {
         if (!t) return t;
         if (r(t)) {
          var o = {
           _placeholder: !0,
           num: n.length
          };
          return n.push(t), o;
         }
         if (i(t)) {
          for (var s = new Array(t.length), a = 0; a < t.length; a++) s[a] = e(t[a]);
          return s;
         }
         if ("object" == typeof t && !(t instanceof Date)) {
          var s = {};
          for (var c in t) s[c] = e(t[c]);
          return s;
         }
         return t;
        }
        var n = [], o = t.data, s = t;
        return s.data = e(o), s.attachments = n.length, {
         packet: s,
         buffers: n
        };
       }, n.reconstructPacket = function(t, e) {
        function n(t) {
         if (t && t._placeholder) {
          var r = e[t.num];
          return r;
         }
         if (i(t)) {
          for (var o = 0; o < t.length; o++) t[o] = n(t[o]);
          return t;
         }
         if (t && "object" == typeof t) {
          for (var s in t) t[s] = n(t[s]);
          return t;
         }
         return t;
        }
        return t.data = n(t.data), t.attachments = void 0, t;
       }, n.removeBlobs = function(t, n) {
        function o(t, c, u) {
         if (!t) return t;
         if (e.Blob && t instanceof Blob || e.File && t instanceof File) {
          s++;
          var l = new FileReader();
          l.onload = function() {
           u ? u[c] = this.result : a = this.result, --s || n(a);
          }, l.readAsArrayBuffer(t);
         } else if (i(t)) for (var h = 0; h < t.length; h++) o(t[h], h, t); else if (t && "object" == typeof t && !r(t)) for (var p in t) o(t[p], p, t);
        }
        var s = 0, a = t;
        o(a), s || n(a);
       };
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {
      "./is-buffer": 47,
      isarray: 48
     } ],
     46: [ function(t, e, n) {
      function i() {}
      function r(t) {
       var e = "", i = !1;
       return e += t.type, (n.BINARY_EVENT == t.type || n.BINARY_ACK == t.type) && (e += t.attachments, 
       e += "-"), t.nsp && "/" != t.nsp && (i = !0, e += t.nsp), null != t.id && (i && (e += ",", 
       i = !1), e += t.id), null != t.data && (i && (e += ","), e += h.stringify(t.data)), 
       l("encoded %j as %s", t, e), e;
      }
      function o(t, e) {
       function n(t) {
        var n = f.deconstructPacket(t), i = r(n.packet), o = n.buffers;
        o.unshift(i), e(o);
       }
       f.removeBlobs(t, n);
      }
      function s() {
       this.reconstructor = null;
      }
      function a(t) {
       var e = {}, i = 0;
       if (e.type = Number(t.charAt(0)), null == n.types[e.type]) return u();
       if (n.BINARY_EVENT == e.type || n.BINARY_ACK == e.type) {
        for (var r = ""; "-" != t.charAt(++i) && (r += t.charAt(i), i != t.length); ) ;
        if (r != Number(r) || "-" != t.charAt(i)) throw new Error("Illegal attachments");
        e.attachments = Number(r);
       }
       if ("/" == t.charAt(i + 1)) for (e.nsp = ""; ++i; ) {
        var o = t.charAt(i);
        if ("," == o) break;
        if (e.nsp += o, i == t.length) break;
       } else e.nsp = "/";
       var s = t.charAt(i + 1);
       if ("" !== s && Number(s) == s) {
        for (e.id = ""; ++i; ) {
         var o = t.charAt(i);
         if (null == o || Number(o) != o) {
          --i;
          break;
         }
         if (e.id += t.charAt(i), i == t.length) break;
        }
        e.id = Number(e.id);
       }
       if (t.charAt(++i)) try {
        e.data = h.parse(t.substr(i));
       } catch (a) {
        return u();
       }
       return l("decoded %s as %j", t, e), e;
      }
      function c(t) {
       this.reconPack = t, this.buffers = [];
      }
      function u() {
       return {
        type: n.ERROR,
        data: "parser error"
       };
      }
      var l = t("debug")("socket.io-parser"), h = t("json3"), p = (t("isarray"), t("component-emitter")), f = t("./binary"), d = t("./is-buffer");
      n.protocol = 4, n.types = [ "CONNECT", "DISCONNECT", "EVENT", "BINARY_EVENT", "ACK", "BINARY_ACK", "ERROR" ], 
      n.CONNECT = 0, n.DISCONNECT = 1, n.EVENT = 2, n.ACK = 3, n.ERROR = 4, n.BINARY_EVENT = 5, 
      n.BINARY_ACK = 6, n.Encoder = i, n.Decoder = s, i.prototype.encode = function(t, e) {
       if (l("encoding packet %j", t), n.BINARY_EVENT == t.type || n.BINARY_ACK == t.type) o(t, e); else {
        var i = r(t);
        e([ i ]);
       }
      }, p(s.prototype), s.prototype.add = function(t) {
       var e;
       if ("string" == typeof t) e = a(t), n.BINARY_EVENT == e.type || n.BINARY_ACK == e.type ? (this.reconstructor = new c(e), 
       0 === this.reconstructor.reconPack.attachments && this.emit("decoded", e)) : this.emit("decoded", e); else {
        if (!d(t) && !t.base64) throw new Error("Unknown type: " + t);
        if (!this.reconstructor) throw new Error("got binary data when not reconstructing a packet");
        e = this.reconstructor.takeBinaryData(t), e && (this.reconstructor = null, this.emit("decoded", e));
       }
      }, s.prototype.destroy = function() {
       this.reconstructor && this.reconstructor.finishedReconstruction();
      }, c.prototype.takeBinaryData = function(t) {
       if (this.buffers.push(t), this.buffers.length == this.reconPack.attachments) {
        var e = f.reconstructPacket(this.reconPack, this.buffers);
        return this.finishedReconstruction(), e;
       }
       return null;
      }, c.prototype.finishedReconstruction = function() {
       this.reconPack = null, this.buffers = [];
      };
     }, {
      "./binary": 45,
      "./is-buffer": 47,
      "component-emitter": 9,
      debug: 10,
      isarray: 48,
      json3: 49
     } ],
     47: [ function(t, e) {
      (function(t) {
       function n(e) {
        return t.Buffer && t.Buffer.isBuffer(e) || t.ArrayBuffer && e instanceof ArrayBuffer;
       }
       e.exports = n;
      }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
     }, {} ],
     48: [ function(t, e) {
      e.exports = t(32);
     }, {} ],
     49: [ function(t, n, i) {
      !function(t) {
       function n(t) {
        if (n[t] !== s) return n[t];
        var e;
        if ("bug-string-char-index" == t) e = "a" != "a"[0]; else if ("json" == t) e = n("json-stringify") && n("json-parse"); else {
         var i, r = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
         if ("json-stringify" == t) {
          var o = l.stringify, c = "function" == typeof o && h;
          if (c) {
           (i = function() {
            return 1;
           }).toJSON = i;
           try {
            c = "0" === o(0) && "0" === o(new Number()) && '""' == o(new String()) && o(a) === s && o(s) === s && o() === s && "1" === o(i) && "[1]" == o([ i ]) && "[null]" == o([ s ]) && "null" == o(null) && "[null,null,null]" == o([ s, a, null ]) && o({
             a: [ i, !0, !1, null, "\x00\b\n\f\r	" ]
            }) == r && "1" === o(null, i) && "[\n 1,\n 2\n]" == o([ 1, 2 ], null, 1) && '"-271821-04-20T00:00:00.000Z"' == o(new Date(-864e13)) && '"+275760-09-13T00:00:00.000Z"' == o(new Date(864e13)) && '"-000001-01-01T00:00:00.000Z"' == o(new Date(-621987552e5)) && '"1969-12-31T23:59:59.999Z"' == o(new Date(-1));
           } catch (u) {
            c = !1;
           }
          }
          e = c;
         }
         if ("json-parse" == t) {
          var p = l.parse;
          if ("function" == typeof p) try {
           if (0 === p("0") && !p(!1)) {
            i = p(r);
            var f = 5 == i.a.length && 1 === i.a[0];
            if (f) {
             try {
              f = !p('"	"');
             } catch (u) {}
             if (f) try {
              f = 1 !== p("01");
             } catch (u) {}
             if (f) try {
              f = 1 !== p("1.");
             } catch (u) {}
            }
           }
          } catch (u) {
           f = !1;
          }
          e = f;
         }
        }
        return n[t] = !!e;
       }
       var r, o, s, a = {}.toString, c = "function" == typeof e && e.amd, u = "object" == typeof JSON && JSON, l = "object" == typeof i && i && !i.nodeType && i;
       l && u ? (l.stringify = u.stringify, l.parse = u.parse) : l = t.JSON = u || {};
       var h = new Date(-0xc782b5b800cec);
       try {
        h = -109252 == h.getUTCFullYear() && 0 === h.getUTCMonth() && 1 === h.getUTCDate() && 10 == h.getUTCHours() && 37 == h.getUTCMinutes() && 6 == h.getUTCSeconds() && 708 == h.getUTCMilliseconds();
       } catch (p) {}
       if (!n("json")) {
        var f = "[object Function]", d = "[object Date]", v = "[object Number]", g = "[object String]", m = "[object Array]", y = "[object Boolean]", b = n("bug-string-char-index");
        if (!h) var w = Math.floor, _ = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ], x = function(t, e) {
         return _[e] + 365 * (t - 1970) + w((t - 1969 + (e = +(e > 1))) / 4) - w((t - 1901 + e) / 100) + w((t - 1601 + e) / 400);
        };
        (r = {}.hasOwnProperty) || (r = function(t) {
         var e, n = {};
         return (n.__proto__ = null, n.__proto__ = {
          toString: 1
         }, n).toString != a ? r = function(t) {
          var e = this.__proto__, n = t in (this.__proto__ = null, this);
          return this.__proto__ = e, n;
         } : (e = n.constructor, r = function(t) {
          var n = (this.constructor || e).prototype;
          return t in this && !(t in n && this[t] === n[t]);
         }), n = null, r.call(this, t);
        });
        var $ = {
         "boolean": 1,
         number: 1,
         string: 1,
         undefined: 1
        }, k = function(t, e) {
         var n = typeof t[e];
         return "object" == n ? !!t[e] : !$[n];
        };
        if (o = function(t, e) {
         var n, i, s, c = 0;
         (n = function() {
          this.valueOf = 0;
         }).prototype.valueOf = 0, i = new n();
         for (s in i) r.call(i, s) && c++;
         return n = i = null, c ? o = 2 == c ? function(t, e) {
          var n, i = {}, o = a.call(t) == f;
          for (n in t) o && "prototype" == n || r.call(i, n) || !(i[n] = 1) || !r.call(t, n) || e(n);
         } : function(t, e) {
          var n, i, o = a.call(t) == f;
          for (n in t) o && "prototype" == n || !r.call(t, n) || (i = "constructor" === n) || e(n);
          (i || r.call(t, n = "constructor")) && e(n);
         } : (i = [ "valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor" ], 
         o = function(t, e) {
          var n, o, s = a.call(t) == f, c = !s && "function" != typeof t.constructor && k(t, "hasOwnProperty") ? t.hasOwnProperty : r;
          for (n in t) s && "prototype" == n || !c.call(t, n) || e(n);
          for (o = i.length; n = i[--o]; c.call(t, n) && e(n)) ;
         }), o(t, e);
        }, !n("json-stringify")) {
         var S = {
          92: "\\\\",
          34: '\\"',
          8: "\\b",
          12: "\\f",
          10: "\\n",
          13: "\\r",
          9: "\\t"
         }, E = "000000", C = function(t, e) {
          return (E + (e || 0)).slice(-t);
         }, T = "\\u00", A = function(t) {
          var e, n = '"', i = 0, r = t.length, o = r > 10 && b;
          for (o && (e = t.split("")); r > i; i++) {
           var s = t.charCodeAt(i);
           switch (s) {
           case 8:
           case 9:
           case 10:
           case 12:
           case 13:
           case 34:
           case 92:
            n += S[s];
            break;

           default:
            if (32 > s) {
             n += T + C(2, s.toString(16));
             break;
            }
            n += o ? e[i] : b ? t.charAt(i) : t[i];
           }
          }
          return n + '"';
         }, j = function(t, e, n, i, c, u, l) {
          var h, p, f, b, _, $, k, S, E, T, P, L, O, M, N, R;
          try {
           h = e[t];
          } catch (H) {}
          if ("object" == typeof h && h) if (p = a.call(h), p != d || r.call(h, "toJSON")) "function" == typeof h.toJSON && (p != v && p != g && p != m || r.call(h, "toJSON")) && (h = h.toJSON(t)); else if (h > -1 / 0 && 1 / 0 > h) {
           if (x) {
            for (_ = w(h / 864e5), f = w(_ / 365.2425) + 1970 - 1; x(f + 1, 0) <= _; f++) ;
            for (b = w((_ - x(f, 0)) / 30.42); x(f, b + 1) <= _; b++) ;
            _ = 1 + _ - x(f, b), $ = (h % 864e5 + 864e5) % 864e5, k = w($ / 36e5) % 24, S = w($ / 6e4) % 60, 
            E = w($ / 1e3) % 60, T = $ % 1e3;
           } else f = h.getUTCFullYear(), b = h.getUTCMonth(), _ = h.getUTCDate(), k = h.getUTCHours(), 
           S = h.getUTCMinutes(), E = h.getUTCSeconds(), T = h.getUTCMilliseconds();
           h = (0 >= f || f >= 1e4 ? (0 > f ? "-" : "+") + C(6, 0 > f ? -f : f) : C(4, f)) + "-" + C(2, b + 1) + "-" + C(2, _) + "T" + C(2, k) + ":" + C(2, S) + ":" + C(2, E) + "." + C(3, T) + "Z";
          } else h = null;
          if (n && (h = n.call(e, t, h)), null === h) return "null";
          if (p = a.call(h), p == y) return "" + h;
          if (p == v) return h > -1 / 0 && 1 / 0 > h ? "" + h : "null";
          if (p == g) return A("" + h);
          if ("object" == typeof h) {
           for (M = l.length; M--; ) if (l[M] === h) throw TypeError();
           if (l.push(h), P = [], N = u, u += c, p == m) {
            for (O = 0, M = h.length; M > O; O++) L = j(O, h, n, i, c, u, l), P.push(L === s ? "null" : L);
            R = P.length ? c ? "[\n" + u + P.join(",\n" + u) + "\n" + N + "]" : "[" + P.join(",") + "]" : "[]";
           } else o(i || h, function(t) {
            var e = j(t, h, n, i, c, u, l);
            e !== s && P.push(A(t) + ":" + (c ? " " : "") + e);
           }), R = P.length ? c ? "{\n" + u + P.join(",\n" + u) + "\n" + N + "}" : "{" + P.join(",") + "}" : "{}";
           return l.pop(), R;
          }
         };
         l.stringify = function(t, e, n) {
          var i, r, o, s;
          if ("function" == typeof e || "object" == typeof e && e) if ((s = a.call(e)) == f) r = e; else if (s == m) {
           o = {};
           for (var c, u = 0, l = e.length; l > u; c = e[u++], s = a.call(c), (s == g || s == v) && (o[c] = 1)) ;
          }
          if (n) if ((s = a.call(n)) == v) {
           if ((n -= n % 1) > 0) for (i = "", n > 10 && (n = 10); i.length < n; i += " ") ;
          } else s == g && (i = n.length <= 10 ? n : n.slice(0, 10));
          return j("", (c = {}, c[""] = t, c), r, o, i, "", []);
         };
        }
        if (!n("json-parse")) {
         var P, L, O = String.fromCharCode, M = {
          92: "\\",
          34: '"',
          47: "/",
          98: "\b",
          116: "	",
          110: "\n",
          102: "\f",
          114: "\r"
         }, N = function() {
          throw P = L = null, SyntaxError();
         }, R = function() {
          for (var t, e, n, i, r, o = L, s = o.length; s > P; ) switch (r = o.charCodeAt(P)) {
          case 9:
          case 10:
          case 13:
          case 32:
           P++;
           break;

          case 123:
          case 125:
          case 91:
          case 93:
          case 58:
          case 44:
           return t = b ? o.charAt(P) : o[P], P++, t;

          case 34:
           for (t = "@", P++; s > P; ) if (r = o.charCodeAt(P), 32 > r) N(); else if (92 == r) switch (r = o.charCodeAt(++P)) {
           case 92:
           case 34:
           case 47:
           case 98:
           case 116:
           case 110:
           case 102:
           case 114:
            t += M[r], P++;
            break;

           case 117:
            for (e = ++P, n = P + 4; n > P; P++) r = o.charCodeAt(P), r >= 48 && 57 >= r || r >= 97 && 102 >= r || r >= 65 && 70 >= r || N();
            t += O("0x" + o.slice(e, P));
            break;

           default:
            N();
           } else {
            if (34 == r) break;
            for (r = o.charCodeAt(P), e = P; r >= 32 && 92 != r && 34 != r; ) r = o.charCodeAt(++P);
            t += o.slice(e, P);
           }
           if (34 == o.charCodeAt(P)) return P++, t;
           N();

          default:
           if (e = P, 45 == r && (i = !0, r = o.charCodeAt(++P)), r >= 48 && 57 >= r) {
            for (48 == r && (r = o.charCodeAt(P + 1), r >= 48 && 57 >= r) && N(), i = !1; s > P && (r = o.charCodeAt(P), 
            r >= 48 && 57 >= r); P++) ;
            if (46 == o.charCodeAt(P)) {
             for (n = ++P; s > n && (r = o.charCodeAt(n), r >= 48 && 57 >= r); n++) ;
             n == P && N(), P = n;
            }
            if (r = o.charCodeAt(P), 101 == r || 69 == r) {
             for (r = o.charCodeAt(++P), (43 == r || 45 == r) && P++, n = P; s > n && (r = o.charCodeAt(n), 
             r >= 48 && 57 >= r); n++) ;
             n == P && N(), P = n;
            }
            return +o.slice(e, P);
           }
           if (i && N(), "true" == o.slice(P, P + 4)) return P += 4, !0;
           if ("false" == o.slice(P, P + 5)) return P += 5, !1;
           if ("null" == o.slice(P, P + 4)) return P += 4, null;
           N();
          }
          return "$";
         }, H = function(t) {
          var e, n;
          if ("$" == t && N(), "string" == typeof t) {
           if ("@" == (b ? t.charAt(0) : t[0])) return t.slice(1);
           if ("[" == t) {
            for (e = []; t = R(), "]" != t; n || (n = !0)) n && ("," == t ? (t = R(), "]" == t && N()) : N()), 
            "," == t && N(), e.push(H(t));
            return e;
           }
           if ("{" == t) {
            for (e = {}; t = R(), "}" != t; n || (n = !0)) n && ("," == t ? (t = R(), "}" == t && N()) : N()), 
            ("," == t || "string" != typeof t || "@" != (b ? t.charAt(0) : t[0]) || ":" != R()) && N(), 
            e[t.slice(1)] = H(R());
            return e;
           }
           N();
          }
          return t;
         }, D = function(t, e, n) {
          var i = B(t, e, n);
          i === s ? delete t[e] : t[e] = i;
         }, B = function(t, e, n) {
          var i, r = t[e];
          if ("object" == typeof r && r) if (a.call(r) == m) for (i = r.length; i--; ) D(r, i, n); else o(r, function(t) {
           D(r, t, n);
          });
          return n.call(t, e, r);
         };
         l.parse = function(t, e) {
          var n, i;
          return P = 0, L = "" + t, n = H(R()), "$" != R() && N(), P = L = null, e && a.call(e) == f ? B((i = {}, 
          i[""] = n, i), "", e) : n;
         };
        }
       }
       c && e(function() {
        return l;
       });
      }(this);
     }, {} ],
     50: [ function(t, e) {
      function n(t, e) {
       var n = [];
       e = e || 0;
       for (var i = e || 0; i < t.length; i++) n[i - e] = t[i];
       return n;
      }
      e.exports = n;
     }, {} ]
    }, {}, [ 1 ])(1);
   });
  }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
 }, {} ],
 124: [ function(t, e) {
  e.exports = '<h5-player-image\n	ng-if="::cid"\n	cid="{{ ::cid }}"\n	has="{{ has }}"\n	size="small">\n</h5-player-image>\n\n<div\n	class="url-image"\n	ng-if="::url"\n	ng-style="{ backgroundImage: \'url(\\\'\' + url + \'\\\')\' }">\n</div>\n\n<div\n	ng-if="status && status !== 0"\n	class="status"\n	ng-class="{ status0: status == 0, status1: status == 1 }">\n</div>\n';
 }, {} ],
 125: [ function(t, e) {
  e.exports = '<wa-popup\n	bind="{{ service.contacts }} {{ data.result }}"\n	content-class="h5-contact-popup"\n	catch-back="onHide()">\n\n	<h5-header\n		title="{{ ::title | lcze }}"\n		on-back="onHide()"\n		gradient="false">\n	</h5-header>\n\n	<flat-bubble\n		class="bubble-small section"\n		ng-if="data.result != -2"\n		ng-switch="data.result">\n		<span ng-switch-when="-1">{{ ::\'h5client_contact_popup_add_result_searching\' | lcze }}</span>\n		<span ng-switch-when="0">{{ ::\'h5client_contact_popup_add_result_success\' | lcze }}</span>\n		<span ng-switch-when="1">{{ ::\'h5client_contact_popup_add_result_not_found\' | lcze }}</span>\n	</flat-bubble>\n\n	<div\n		class="section add"\n		ng-if="showAdd == \'true\'"\n		><flat-edit\n			bind-value="data.name"\n			placeholder="{{ ::\'h5client_contact_popup_add_placeholder\' | lcze }}">\n		</flat-edit\n		><flat-button\n			class="button-add-friend quad"\n			img="res/h5client/ic_plus.png"\n			ng-click="clickAdd()">\n		</flat-button\n	></div>\n\n	<h5-player-list\n		class="section"\n		entries="service.contacts"\n		selected="data.selected"\n		buttons="getButtons()"\n		show-status="true"\n		on-click="clickPlayer(player)"\n		on-click-button="clickButton(tag, player)"\n		empty-message="{{ ::\'h5client_contact_popup_empty\' | lcze }}">\n	</h5-player-list>\n\n	<flat-bubble\n		class="bubble-small bubble-small-right-up section"\n		ng-if="groom.rid">\n		{{ data.msgInvite }}\n	</flat-bubble>\n</wa-popup>';
 }, {} ],
 126: [ function(t, e) {
  e.exports = '<wa-popup\n	class=""\n	bind="{{ busy }} {{ opts }} {{ ts }} {{ service.request }} {{ service.data.players.length }}"\n	catch-back="tryHide()"\n	content-class="h5-create-room-popup">\n\n	<h5-quickmatch-view\n		ng-if="service.isQuickmatch()">\n	</h5-quickmatch-view>\n	\n	<h5-header\n		title="{{ getTitle() | lcze }}"\n		on-back="tryHide();"\n		gradient="{{ getHeaderGradient() }}">\n	</h5-header>\n\n	<div\n		class="content"\n		ng-if="!service.rid">\n		<h5-goptlist\n			opts="opts"\n			groom="true"\n			on-refresh="refresh()">\n		</h5-goptlist>\n\n		<flat-button\n			class="button-submit"\n			value="{{ getButton() | lcze }}"\n			ng-disabled="busy"\n			ng-click="::submit()">\n		</flat-button>\n	</div>\n</wa-popup>';
 }, {} ],
 127: [ function(t, e) {
  e.exports = '<wa-popup\n	content-class="h5-edit-avatar-popup"\n	catch-back="onHide()">\n	\n	<h5-header\n		title="{{ \'h5_editavatar_title\' | lcze }}"\n		on-back="onHide()"\n		gradient="false">\n	</h5-header>\n\n	<div class="wrapper">\n		<div class="dummy"></div>\n\n		<h5-player-image\n			ng-if="::!url" \n			cid="{{ me.profile.cid }}"\n			has="{{ me.profile.avatar }}"\n			bind="{{ me.avatarBufferId }}"\n			size="medium">\n		</h5-player-image>\n	</div>\n\n	<div class="buttons" ng-switch="type">\n		<label\n			class="input-label"\n			ng-switch-when="default">\n			{{ \'h5_editavatar_upload_button\' | lcze }}\n			<input\n				class="file-input"\n				type="file"\n				ng-file-select\n				ng-file-change="upload($files, $event)"\n				accept="image/*"\n				ng-disabled="status !== \'select\'"></input>\n		</label>\n\n		<flat-button\n			ng-switch-when="cordova"\n			value="{{ \'h5_editavatar_upload_button\' | lcze }}"\n			ng-click="uploadCordova()">\n		</flat-button>\n\n		<flat-button\n			ng-switch-when="windows"\n			value="{{ \'h5_editavatar_upload_button\' | lcze }}"\n			ng-click="uploadWaWindows()">\n		</flat-button>\n\n		<div\n			ng-if="status == \'progress\'">\n			{{ \'h5_editavatar_uploading\' | lcze }}<span ng-if="percent"> {{ percent }}%</span>\n		</div>\n	</div>\n</wa-popup>';
 }, {} ],
 128: [ function(t, e) {
  e.exports = '<span h5-game-leave></span>\n\n<h1>example game</h1>\n\n<h1\n	ng-if="game.ended">\n	game over\n</h1>\n\n<flat-button\n	value="leave"\n	wa-back>\n</flat-button>\n\n<flat-button\n	value="make move"\n	ng-click="move()">\n</flat-button>\n\n<flat-button\n	value="make end move"\n	ng-click="moveEnd()">\n</flat-button>\n\n<h5-reconnect-popup\n	ng-if="::game.online"\n	class="h5-anim-opacity">\n</h5-reconnect-popup>\n\n<h5-game-leave-popup\n	class="h5-anim-opacity"\n	on-hide="back(confirmed)">\n</h5-game-leave-popup>\n';
 }, {} ],
 129: [ function(t, e) {
  e.exports = '<wa-popup\n	bind=""\n	content-class="h5-example-tutorial-popup">\n\n	<h5-header\n		title="tutorial"\n		on-back="Back.back()">		\n	</h5-header>\n\n	<span>\n		example tutorial\n	</span>\n</wa-popup>';
 }, {} ],
 130: [ function(t, e) {
  e.exports = '<span\n	catch-back="onBack()">\n</span>\n\n<wa-popup\n	ng-if="show"\n	class="h5-anim-opacity"\n	class=""\n	content-class="h5-game-leave-popup">\n\n	<h5-header\n		title="{{ ::\'h5_game_leave_popup_title\' | lcze }}"\n		on-back="Back.back()"\n		gradient="false">\n	</h5-header>\n\n	<div\n		class="message">\n		{{ ::\'h5_game_leave_popup_running\' | lcze }}\n	</div>\n\n	<div\n		class="buttons">\n		<div\n			class="wrapper">\n			<flat-button\n				class="cancel"\n				value="{{ ::\'h5_game_leave_popup_button_cancel\' | lcze }}"\n				ng-click="cancel($event)">\n			</flat-button>\n		</div>\n		<div\n			class="wrapper">\n			<flat-button\n				class="confirm"\n				value="{{ ::\'h5_game_leave_popup_button_confirm\' | lcze }}"\n				ng-click="confirm($event)">\n			</flat-button>\n		</div>\n	</div>\n</wa-popup>\n';
 }, {} ],
 131: [ function(t, e) {
  e.exports = '<div class="game-list">\n	<div\n		class="game"\n		ng-repeat="room in service.rooms track by room.id">\n		\n		<h5-avatar\n			cid="{{ room.owner.cid }}"\n			has="{{ room.owner.avatar }}">\n		</h5-avatar\n\n		><div class="info">\n			<div class="name">\n				{{ room.info.curr }}/{{ room.opts.size }} {{ room.info.name || \'Unnamed\' }}\n			</div>\n			<div class="more h5-font-dim">\n				<span\n					class="stat"\n					ng-repeat="stat in stats">\n					<img class="icon" ng-src="{{ ::stat.img }}">\n					<span>{{ parse(stat.key, room) }}</span>\n				</span>\n			</div>\n		</div>\n\n		<div\n			class="button-select"\n			ng-click="clickSelect($index)"\n			fake-active>\n		</div>\n	</div>\n\n	<div\n		class="empty"\n		ng-if="service.rooms.length === 0"\n		ng-click="clickEmpty($event)">\n\n		<h5-avatar\n			url="res/h5client/avatar-no-games-128.png">\n		</h5-avatar\n\n		><div\n			class="info">\n			{{ ::\'h5client_game_list_empty\' | lcze }}\n		</div>\n	</div>\n</div>';
 }, {} ],
 132: [ function(t, e) {
  e.exports = '<div class="justify">\n	<flat-outline\n		ng-repeat="item in items"\n		>\n		{{ ::item.string | lcze }}\n	</flat-outline>\n</div>';
 }, {} ],
 133: [ function(t, e) {
  e.exports = '<flat-bubble\n	ng-if="groom == \'true\'"\n	class="bubble-small"\n	ng-switch="values[ \'public\' ]">\n	<span ng-switch-when="quick">{{ ::\'h5_goptlist_public_quick\' | lcze }}</span>\n	<span ng-switch-when="true">{{ ::\'h5_goptlist_public_true\' | lcze }}</span>\n	<span ng-switch-when="false">{{ ::\'h5_goptlist_public_false\' | lcze }}</span>\n</flat-bubble>\n\n<h5-gopt\n	ng-if="groom == \'true\'"\n	ng-repeat="opt in optsMp track by opt.key"\n	type="switch"\n	key="{{ opt.key }}"\n	values="opt.values"\n	value="values[ opt.key ]"\n	on-refresh="refresh()">\n</h5-gopt>\n\n<h5-gopt\n	ng-if="sp == \'true\'"\n	ng-repeat="opt in optsSp track by opt.key"\n	type="{{ opt.type }}"\n	key="{{ opt.key }}"\n	values="opt.values"\n	value="values[ opt.key ]"\n	on-refresh="refresh()">\n</h5-gopt>\n\n<h5-gopt\n	ng-repeat="opt in optsChain track by opt.key"\n	type="{{ opt.type }}"\n	key="{{ opt.key }}"\n	values="opt.values"\n	value="values[ opt.key ]"\n	on-refresh="refresh()">\n</h5-gopt>\n\n<h5-gopt\n	ng-repeat="opt in optsExtra track by opt.key"\n	type="{{ opt.type }}"\n	key="{{ opt.key }}"\n	values="opt.values"\n	value="values[ opt.key ]"\n	on-refresh="refresh()">\n</h5-gopt>\n';
 }, {} ],
 134: [ function(t, e) {
  e.exports = '<flat-slider\n	ng-if="::type === \'selector\'"\n	values="::strings"\n	index="data.index"\n	emit-iscroll="true"\n	on-toggle="refresh()">\n</flat-slider>\n\n<!--\n<flat-edit\n	ng-if="::type === \'string\'"\n	value="{{ ::data.value }}"\n	bind-value="data.value"\n	placeholder="{{ strings[ 0 ] }}">\n</flat-edit>\n-->\n\n<flat-switch\n	ng-if="::type === \'switch\'"\n	values="::strings"\n	index="data.index">\n</flat-switch>\n';
 }, {} ],
 135: [ function(t, e) {
  e.exports = '<div class="avatars">\n	<div\n		class="empty"\n		ng-repeat-start="item in service.data.opts.size | h5GroomBannerFilter"\n		ng-if="!service.data.players[ $index ]"\n		ng-style="{ left: getLeft($index), right: getRight($index) }"\n		ng-class="{ even: $even }">\n		<div class="img"></div>\n	</div>\n\n	<h5-player-image\n		ng-repeat-end\n		ng-if="service.data.players[ $index ]"\n		cid="{{ service.data.players[ $index ].cid }}"\n		has="{{ service.data.players[ $index ].avatar }}"\n		size="medium"\n		ng-style="{ left: getLeft($index), right: getRight($index) }">\n	</h5-player-image>\n\n	<div class="gradient"></div>\n</div>\n\n<div class="info">\n	<div\n		class="status h5-fsize-large"\n		ng-if="service.isLeaveAllowed()">\n		{{ getStringWait() | lcze }}\n	</div>\n	<div\n		class="status h5-fsize-large"\n		ng-if="!service.isLeaveAllowed()">\n		{{ ::\'h5_groom_banner_starting\' | lcze }} {{ startSecs }}...\n	</div>\n\n	<div class="icons h5-fsize-small">\n		<div\n			class="icon"\n			ng-if="service.isQuickmatch()"\n			ng-repeat="icon in iconsQuick">\n			<img ng-src="{{ ::icon.src }}">\n			<span>{{ icon.get() }}</span>\n		</div>\n		<div\n			class="icon"\n			ng-if="!service.isQuickmatch()"\n			ng-repeat="icon in icons">\n			<img ng-src="{{ ::icon.src }}">\n			<span>{{ icon.get() }}</span>\n		</div>\n	</div>\n</div>';
 }, {} ],
 136: [ function(t, e) {
  e.exports = '<span catch-back="::service.leave()"></span>\n\n<h5-groom-banner></h5-groom-banner>\n\n<flat-bubble\n	class="bubble-small section">\n	{{ ::\'h5client_groom_info\' | lcze }}\n</flat-bubble>\n\n<h5-gopt-info\n	opts="service.data.opts"\n	hide-public="true">\n</h5-gopt-info>\n\n<div\n	class="section invite">\n	<flat-edit\n		class="edit-link"\n		fixed-readonly="true"\n		bind-value="data.urlInvite">\n	</flat-edit>\n	<div class="buttons">\n		<flat-button\n			class="button-invite quad icon-default"\n			img="res/h5client/ic_contact-128.png"\n			ng-click="::clickInvite()">\n		</flat-button\n		><flat-button\n			class="button-share quad blue icon-default"\n			img="res/h5client/menu/ic_facebook-128.png"\n			ng-click="::clickShare()">\n		</flat-button>\n	</div>\n</div>\n\n<div\n	class="section invite-hint h5-font-dim">\n	{{ ::\'h5client_groom_invite\' | lcze }}\n</div>\n\n<flat-bubble\n	class="bubble-small section"\n	buttons="::[ { img: \'res/h5client/ic_plus.png\' } ]"\n	click-bubble="::togglePopup({ name: \'contacts\' })"\n	click-button="::togglePopup({ name: \'contacts\' })">\n	{{ ::\'h5client_groom_players\' | lcze }}\n</flat-bubble>\n\n<h5-player-list\n	class="section"\n	entries="service.data.players"\n	on-click="::togglePopup({ name: \'profile\', intent: { cid: player.cid } });"\n	buttons="[]">\n</h5-player-list>\n';
 }, {} ],
 137: [ function(t, e) {
  e.exports = '<div\n	class="icon"\n	ng-style="{ backgroundImage: \'url(\\\'\' + img + \'\\\')\' }"\n	ng-class="{ active: bind && bind === tag }"\n	ng-click="onClick()"\n	fake-active>\n</div>\n\n<div\n	class="notify"\n	ng-if="notify === \'true\'">!\n</div>\n';
 }, {} ],
 138: [ function(t, e) {
  e.exports = '<div\n	ng-if="gradient !== \'false\'"\n	class="gradient">\n</div>\n\n<div\n	class="back"\n	ng-click="::_onBack($event)"\n	fake-active>\n</div>\n\n<div\n	ng-if="::title"\n	class="title">\n	{{ title }}\n</div>\n\n<!--\n<div\n	class="tabs">\n	<h5-header-icon\n		ng-repeat="tab in tabs"\n		notify="{{ tab.notify }}"\n		img="{{ ::tab.img }}"\n		active="{{ tab.tag === activeTab }}"\n		ng-click="::_onTab(tab.tag, $index)">\n	</h5-header-icon>\n</div>\n\n<div\n	class="icons">\n	<h5-header-icon\n		ng-repeat="icon in icons"\n		notify="{{ icon.notify }}"\n		img="{{ ::icon.img }}"\n		ng-click="::onIcon({ tag: icon.tag, index: $index })">\n	</h5-header-icon>\n</div>\n-->\n\n<h5-header-section\n	name="tabs"\n	class="tabs">\n</h5-header-section>\n\n<h5-header-section\n	name="icons"\n	class="icons">\n</h5-header-section>\n';
 }, {} ],
 139: [ function(t, e) {
  e.exports = '<h5-menu\n	class="h5-anim-opacity"\n	ng-if="page === \'menu\' && !Game.instance"\n	on-click-mp="setPage(\'lobby\')">\n</h5-menu>\n\n<h5-lobby\n	class="h5-anim-opacity"\n	ng-if="page === \'lobby\' && !Game.instance"\n	catch-back="setPage(\'menu\'); Connection.stop();">\n</h5-lobby>\n\n<h5-game\n	class="h5-anim-opacity"\n	ng-if="Game.instance">\n</h5-game>\n';
 }, {} ],
 140: [ function(t, e) {
  e.exports = '<div\n	class="banner"\n	ng-click="::togglePopup({ name: \'avatar\' })"\n	fake-active>\n	\n	<h5-player-image\n		cid="{{ me.profile.cid }}"\n		has="{{ me.profile.avatar }}"\n		bind="{{ me.profile.cid + \' \' + me.avatarBufferId }}"\n		size="medium">\n	</h5-player-image>\n	\n	<div\n		class="gradient">\n	</div>\n\n	<h5-player-info\n		cid="me">\n	</h5-player-info>\n</div>\n\n<flat-button\n	value="{{ ::\'h5client_lobby_button_play\' | lcze }}"\n	class="button-create-room"\n	ng-click="::togglePopup({ name: \'create\' })">\n</flat-button>\n\n<flat-bubble\n	class="bubble-small"\n	buttons="::[ { img: \'res/h5client/ic_refresh.png\' }, { img: \'res/h5client/ic_settings-64.png\' } ]"\n	click-button="::bubbleButtonGames(opts)">\n	{{ ::\'h5client_lobby_bubble_games\' | lcze }}\n</flat-bubble>\n\n<div class="games">\n	<h5-game-list\n		on-click-empty="::togglePopup({ name: \'create\' })">\n	</h5-game-list>\n</div>\n\n<flat-bubble\n	class="bubble-small bubble-friends"\n	buttons="::[ { img: \'res/h5client/ic_plus.png\' } ]"\n	click-bubble="::togglePopup({ name: \'contacts\' });"\n	click-button="::bubbleButtonFriends(opts)">\n	{{ ::\'h5client_lobby_bubble_friends\' | lcze }}\n</flat-bubble>\n\n<div class="friends">\n	<h5-player-list\n		entries="contacts.contactsOnline"\n		empty-message="{{ ::\'h5client_lobby_view_friends_empty\' | lcze }}"\n		on-click="::togglePopup({ name: \'profile\', intent: { cid: player.cid } });"\n		on-click-button="::togglePopup({ name: \'profile\', intent: { cid: player.cid, message: index === 0 } });">\n	</h5-player-list>\n</div>\n';
 }, {} ],
 141: [ function(t, e) {
  e.exports = '<span h5-gamelauncher></span>\n\n<div\n	class="view h5-anim-translate"\n	ng-if="!showLobbyGroom()"\n	ng-class="{ selected: data.tab == \'home\' }"\n	iscroll\n	iscroll-scrollbars="false"\n	iscroll-delay="300"\n	bind="{{ groom.rid }} {{ rooms.rooms.length }} {{ contacts.contacts.length }} {{ data.tab == \'home\' }}">\n	<h5-lobby-view\n		toggle-popup="togglePopup(name, intent)">\n	</h5-lobby-view>\n</div>\n\n<div\n	class="view h5-anim-translate"\n	ng-if="showLobbyGroom()"\n	ng-class="{ selected: data.tab == \'home\' }"\n	iscroll\n	iscroll-scrollbars="false"\n	bind="{{ groom.data.players.length }} {{ data.tab == \'home\' }} ]">\n	<h5-groom-view\n		toggle-popup="::togglePopup(name, intent)">\n	</h5-groom-view>\n</div>\n\n<div\n	class="view view-right h5-anim-translate"\n	ng-class="{ selected: data.tab == \'chat\' }">\n\n	<h5-message-thread\n		tid="{{ getTid() }}"\n		on-click-player="::togglePopup(\'profile\', { cid: cid })"\n		bind="{{ data.tab == \'chat\' }}">\n	</h5-message-thread>\n</div>\n\n<h5-header\n	on-back="::onBack()">\n\n	<h5-header-icon\n		type="tabs"\n		bind="data.tab"\n		img="res/h5client/ic_group-128.png"\n		tag="home">\n	</h5-header-icon>\n\n	<h5-header-icon\n		class="chat"\n		type="tabs"\n		bind="data.tab"\n		img="res/h5client/ic_chat-128.png"\n		notify="{{ getNotifyTid() }}"\n		tag="chat">\n	</h5-header-icon>\n\n	<h5-header-icon\n		class="icon-noti"\n		type="icons"\n		img="res/h5client/ic_bell-128.png"\n		tag="noti"\n		notify="{{ notifications.count > 0 }}"\n		ng-click="::togglePopup(\'noti\')">\n	</h5-header-icon>\n</h5-header>\n\n<h5-notification-dropdown\n	class="h5-anim-opacity"\n	ng-if="session.active && popups.noti"\n	on-click-message="::togglePopup(\'profile\', { cid: cid, message: true })"\n	on-click-groom="::groom.join(rid)"\n	on-click-avatar="::togglePopup(\'avatar\')"\n	on-hide="::hidePopup(\'noti\')">\n</h5-notification-dropdown>\n\n<h5-contact-popup\n	class="h5-anim-opacity"\n	ng-if="session.active && popups.contacts"\n	show-add="true"\n	on-click-player="::togglePopup(\'profile\', { cid: cid })"\n	on-click-chat="::togglePopup(\'profile\', { cid: cid, message: true })"\n	on-hide="::hidePopup(\'contacts\')">\n</h5-contact-popup>\n\n<h5-room-filter-popup\n	class="h5-anim-opacity"\n	ng-if="session.active && popups.roomfilter"\n	on-hide="hidePopup(\'roomfilter\'); rooms.refresh();">\n</h5-room-filter-popup>\n\n<h5-create-room-popup\n	class="h5-anim-opacity"\n	ng-if="server.ready && popups.create"\n	on-hide="hidePopup(\'create\')">\n</h5-create-room-popup>\n\n<!-- shown while joining room, or failed -->\n<h5-join-room-popup\n	class="h5-anim-opacity"\n	ng-if="server.ready && (!popups.create && groom.request && groom.request.result !== 0)"\n	on-hide="hidePopup(\'join\')">\n</h5-join-room-popup>\n\n<h5-profile\n	class="h5-anim-opacity"\n	ng-if="popups.profile"\n	cid="{{ data.profile.cid }}"\n	tab="{{ data.profile.tab }}"\n	on-hide="hidePopup(\'profile\')">\n</h5-profile>\n\n<h5-name-popup\n	class="h5-anim-opacity"\n	ng-if="session.active && me.profile.username === \'Unnamed\'">\n</h5-name-popup>\n\n<h5-edit-avatar-popup\n	class="h5-anim-opacity"\n	ng-if="session.active && popups.avatar"\n	on-hide="togglePopup(\'avatar\')">\n</h5-edit-avatar-popup>\n\n<h5-login-popup\n	class="h5-anim-opacity"\n	ng-if="!session.active || !server.ready">\n</h5-login-popup>\n';
 }, {} ],
 142: [ function(t, e) {
  e.exports = '<wa-popup\n	content-class="h5-login-popup"\n	bind="{{ Connection.request }} {{ data.state }} {{ data.register.message }} {{ data.login.failed }} {{ data.login.request }}"\n	>\n	<h5-header\n		title="{{ ::\'h5client_loginpopup_title\' | lcze }}"\n		on-back="::back()"\n		gradient="false">\n	</h5-header>\n\n	<!-- wait until connection established -->\n	<div\n		class="server-message"\n		ng-if="Connection.request"\n		ng-switch="Session.active"\n		>\n		<span\n			ng-switch-when="false">\n			{{ ::\'h5client_loginpopup_message_connecting\' | lcze }}\n		</span>\n\n		<span\n			ng-switch-when="true">\n			{{ ::\'h5client_loginpopup_message_authenticating\' | lcze }}\n		</span>\n	</div>\n\n	<!-- ready for user inpt -->\n	<div\n		class="buttons"\n		ng-if="!Connection.request">\n\n		<div\n			class="state-login"\n			ng-if="data.state == \'login\'"\n			>\n			<flat-bubble ng-if="data.login.failed">\n				{{ ::\'h5client_loginpopup_login_failed\' | lcze }}\n			</flat-bubble>\n\n			<flat-bubble ng-if="data.login.request">\n				{{ ::\'h5client_loginpopup_message_log_in\' | lcze }}\n			</flat-bubble>\n\n			<flat-edit\n				class="edit edit-acc"\n				bind-value="data.login.acc"\n				placeholder="{{ ::\'h5client_loginpopup_placeholder_email\' | lcze }}">\n			</flat-edit>\n\n			<flat-edit\n				class="edit edit-pass"\n				bind-value="data.login.pass"\n				placeholder="{{ ::\'h5client_loginpopup_placeholder_password\' | lcze }}"\n				password="true">\n			</flat-edit>\n\n			<div class="row-account-actions">\n				<span\n					class="link link-register"\n					ng-click="setState(\'register\')"\n					fake-active>\n					{{ ::\'h5client_loginpopup_link_register\' | lcze }}\n				</span\n				><span\n					class="link link-recover"\n					ng-click="clickRecover()"\n					fake-active>\n					{{ ::\'h5client_loginpopup_link_recover\' | lcze }}\n				</span\n				><span\n					class="link link-guest"\n					ng-click="clickLoginGuest()"\n					fake-active>\n					{{ ::\'h5client_loginpopup_link_guest\' | lcze }}\n				</span>\n			</div>\n\n			<flat-button\n				ng-click="clickLogin()"\n				class="button button-login"\n				value="{{ ::\'h5client_loginpopup_button_login\' | lcze }}">\n			</flat-button>\n\n			<div class="row-signin-title">\n				{{ ::\'h5client_loginpopup_signing_title\' | lcze }}\n			</div>\n\n			<div class="row-signin-buttons">\n				<div class="cell">\n					<flat-button\n						class="button-facebook blue"\n						ng-click="signInFacebook()"\n						img="res/h5client/menu/ic_facebook-128.png">\n					</flat-button>\n				</div>\n				<div class="cell">\n					<flat-button\n						class="button-google red"\n						ng-click="signInGoogle()"\n						img="res/h5client/menu/ic_gplus-128.png">\n					</flat-button>\n				</div>\n			</div>\n		</div>\n\n		<div\n			class="state-register"\n			ng-if="data.state == \'register\'"\n			catch-back="setState(\'login\')"\n			>\n			<flat-edit\n				class="edit edit-acc"\n				bind-value="data.register.acc"\n				placeholder="{{ ::\'h5client_loginpopup_placeholder_email\' | lcze }}">\n			</flat-edit>\n\n			<flat-edit\n				class="edit edit-pass1"\n				bind-value="data.register.pass1"\n				placeholder="{{ ::\'h5client_loginpopup_placeholder_password\' | lcze }}"\n				password="true">\n			</flat-edit>\n\n			<flat-edit\n				class="edit edit-pass2"\n				bind-value="data.register.pass2"\n				placeholder="{{ ::\'h5client_loginpopup_placeholder_password_repeat\' | lcze }}"\n				password="true">\n			</flat-edit>\n\n			<flat-button\n				ng-click="clickRegister()"\n				class="button button-register"\n				value="{{ ::\'h5client_loginpopup_button_register\' | lcze }}">\n			</flat-button>\n\n			<div ng-if="data.register.message" class="message">\n				{{ data.register.message }}\n			</div>\n		</div>\n	</div>\n</wa-popup>';
 }, {} ],
 143: [ function(t, e) {
  e.exports = '<div class="table">\n	<div class="row">\n		<div class="cell">\n			<div class="content" ng-transclude></div>\n		</div>\n	</div>\n</div>\n';
 }, {} ],
 144: [ function(t, e) {
  e.exports = '<h5-menu-page\n	class="page-home"\n	ng-if="state == \'home\'"\n	iscroll\n	bind="{{ refresh }}">\n\n	<div\n		class="slogan">\n		<div>\n			{{ ::info.strings.home.title | lcze }}\n		</div>\n		<div class="small">\n			{{ ::info.strings.home.slogan | lcze }}\n		</div>\n	</div>\n\n	<div\n		class="buttons">\n\n		<flat-button\n			class="button-sp"\n			ng-click="::setState(\'sp\')"\n			value="{{ ::\'h5_menu_button_sp\' | lcze }}">\n		</flat-button>\n\n		<flat-button\n			class="button-multiplayer"\n			ng-click="::onClickMp($event)"\n			value="{{ ::\'h5_menu_button_mp\' | lcze }}">\n		</flat-button>\n\n		<flat-button\n			class="button-tutorial"\n			ng-click="popups.tutorial = true;"\n			value="{{ ::\'h5_menu_button_tut\' | lcze }}">\n		</flat-button>\n\n		<div class="home-more">\n			<flat-button\n				class="secondary"\n				ng-click="::openLink(info.urlGame)"\n				img="res/h5client/menu/ic_world-128.png">\n			</flat-button\n			><flat-button\n				class="secondary"\n				ng-click="::openLink(info.urlGplus)"\n				img="res/h5client/menu/ic_gplus-128.png">\n			</flat-button\n			><flat-button\n				class="secondary"\n				ng-click="::openLink(info.urlFb)"\n				img="res/h5client/menu/ic_facebook-128.png">\n			</flat-button\n			><flat-button\n				class="secondary settings"\n				img="res/h5client/ic_settings-64.png"\n				ng-click="popups.prefs = true;">\n			</flat-button>\n		</div>\n	</div>\n</h5-menu-page>\n\n<h5-menu-page\n	ng-if="state === \'sp\'"\n	class="page-sp"\n	catch-back="::setState(\'home\')"\n	iscroll\n	bind="{{ refresh }}">\n	<div class="slogan">\n		<div>{{ ::info.strings.sp.title | lcze }}</div>\n		<div class="small">\n			{{ ::info.strings.sp.slogan | lcze }}\n		</div>\n	</div>\n\n	<div class="buttons">\n		<div class="sp-top">\n			<flat-button\n				class="quad secondary button-return menu-back"\n				ng-click="::setState(\'home\', $event)"\n				img="res/h5client/ic_back-128.png">\n			</flat-button>\n			<flat-button\n				class="button-start"\n				ng-click="::clickStart($event)"\n				value="{{ ::\'h5_menu_button_start\' | lcze }}">\n			</flat-button>\n		</div>\n\n		<h5-goptlist\n			opts="opts"\n			sp="true"\n			on-refresh="::refreshScroll()">\n		</h5-goptlist>\n	</div>\n</h5-menu-page>\n\n<div class="terms" ng-click="::openLink(info.urlTerms)">\n	<div class="text">terms &amp; privacy</div>\n</div>\n\n<div class="copyright" ng-click="::openLink(info.urlDev)">\n	<div class="text">&copy; {{ ::info.urlDev }}</div>\n</div>\n\n<h5-prefs-popup\n	class="h5-anim-opacity"\n	ng-if="popups.prefs"\n	catch-back="popups.prefs = false;">\n</h5-prefs-popup>\n\n<h5-tutorial-popup\n	class="h5-anim-opacity"\n	ng-if="popups.tutorial"\n	catch-back="popups.tutorial = false;">\n</h5-tutorial-popup>\n';
 }, {} ],
 145: [ function(t, e) {
  e.exports = '<div\n	class="wrapper"\n	ng-if="reader"\n	iscroll\n	iscroll-autoscroll="true"\n	bind="{{ reader.entries.length }} {{ bind }}">\n	<div\n		class="scroller">\n		<div\n			ng-repeat="entry in reader.entries track by entry.mid"\n			class="message"\n			ng-class="{ flag: entry.flag }">\n\n			<h5-avatar\n				class="left"\n				cid="{{ ::entry.cid }}"\n				has="{{ ::entry.avatar }}" class="left"\n				ng-click="::clickPlayer($event, entry.cid)">\n			</h5-avatar>\n\n			<div class="content">\n				<div class="info h5-font-dim">\n					{{ ::entry.username }}, {{ entry.ts | timeago }}\n				</div>\n				<div class="text">\n					{{ ::entry.message }}\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n\n<div class="inputs">\n	<flat-edit\n		class="edit-message"\n		bind-value="edit.value"\n		enter-submit="::send()"\n		placeholder="{{ ::\'h5_thread_edit_placeholder\' | lcze }}">\n	</flat-edit>\n	<flat-button\n		class="button-send"\n		value="{{ ::\'h5_thread_button_send\' | lcze }}"\n		ng-click="::send($event)">\n	</flat-button>\n</div>\n';
 }, {} ],
 146: [ function(t, e) {
  e.exports = '<wa-popup bind="{{ message }}">\n	<h5-header\n		title="{{ \'name_popup_title\' | lcze }}"\n		on-back="back()"\n		gradient="false">\n	</h5-header>\n\n	<flat-edit\n		class="edit"\n		bind-value="data.value">\n	</flat-edit>\n\n	<div class="hint">\n		4 - 14 characters, A - Z, a - z, 0 - 9\n	</div>\n\n	<div class="message" ng-if="message">{{ message | lcze }}</div>\n\n	<flat-button\n		class="button-submit"\n		value="{{ \'name_popup_button_submit\' | lcze }}" ng-click="clickSubmit()">\n	</flat-button>\n</wa-popup>';
 }, {} ],
 147: [ function(t, e) {
  e.exports = '<div\n	class="h5-notification-dropdown"\n	catch-back="::hide()">\n\n	<div\n		class="catcher"\n		ng-click="::hide()">\n	</div>\n	\n	<div\n		class="list"\n		ng-click="::onClick($event)">\n\n		<h5-notification-list\n			on-update="::onUpdate()"\n			on-select="::onSelect(entry, invoke)">\n		</h5-notification-list>\n\n		<div\n			class="header">\n			<div\n				class="title"\n				ng-click="clickManage()">\n				Manage account\n			</div>\n\n			<div\n				class="buttons">\n				<div\n					class="button"\n					ng-repeat="button in ::buttons"\n					ng-style="::{ backgroundImage: \'url(\\\'\' + button.img + \'\\\')\' }"\n					ng-click="::onClickButton(button.tag)"\n					fake-active>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>';
 }, {} ],
 148: [ function(t, e) {
  e.exports = '<div\n	class="row"\n	ng-repeat="entry in service.feed track by entry.id | orderBy:ts:true | limitTo:10"\n	ng-switch="entry.type"\n	ng-click="dismiss($event, entry, true)"\n	>\n\n	<h5-avatar\n		ng-switch-when="editavatar"\n		url="res/h5client/avatar-no-games-128.png">\n	</h5-avatar>\n\n	<h5-avatar\n		ng-switch-when="groominv"\n		cid="{{ ::entry.profile.cid }}"\n		has="{{ ::entry.profile.avatar }}"\n		url="res/h5client/avatar-no-games-128.png">\n	</h5-avatar>\n\n	<h5-avatar\n		ng-switch-when="message"\n		cid="{{ ::entry.data.cid }}"\n		has="{{ ::entry.data.avatar }}"\n		url="res/h5client/ic_chat-128.png">\n	</h5-avatar>\n\n	<div\n		class="info">\n		<div\n			class="title">\n			<span ng-switch-when="editavatar">Avatar</span>\n			<span ng-switch-when="groominv" class="invite">{{ ::entry.data.profile.username }}, {{ entry.ts | timeago }}</span>\n			<span ng-switch-when="message">{{ ::entry.data.username }}, {{ entry.ts | timeago }}</span>\n		</div>\n\n		<div class="content">\n			<span ng-switch-when="groominv">Invited you to a game.</span>\n			<span ng-switch-when="editavatar">Upload a profile picture.</span>\n			<span ng-switch-when="message">\n				{{ entry.data.message | limitTo:30 }}\n				<span ng-if="entry.data.message.length > 30">\n					...\n				</span>\n			</span>\n		</div>\n	</div>\n</div>\n\n<div\n	class="row empty"\n	ng-if="service.feed.length == 0">\n	No notifications.\n</div>\n';
 }, {} ],
 149: [ function(t, e) {
  e.exports = '<div class="name">\n	{{ data.username || \'Greetings!\'}}\n</div>\n<div class="stats">\n	<div\n		class="stat"\n		ng-repeat="stat in ::stats">\n		<div\n			class="img"\n			ng-style="::{ backgroundImage: \'url(\\\'\' + stat.img + \'\\\')\' }">\n		</div>\n		<div\n			class="value">\n			{{ data[ stat.key ] || stat.def }}\n		</div>\n	</div>\n</div>\n';
 }, {} ],
 150: [ function(t, e) {
  e.exports = '<div\n	class="player anim-fade-lobby"\n	ng-repeat="player in entries"\n	ng-click="clickPlayer($event, player)">\n	\n	<h5-avatar\n		ng-if="!showStatus"\n		cid="{{ ::player.cid }}"\n		has="{{ ::player.avatar }}">\n	</h5-avatar\n	\n	><h5-avatar\n		ng-if="showStatus"\n		cid="{{ ::player.cid }}"\n		has="{{ ::player.avatar }}"\n		status="{{ player.status }}">\n	</h5-avatar\n\n	><div class="info">\n		<div class="name">\n			{{ ::player.username }}\n		</div>\n		<div class="more">\n			<div\n				class="stat"\n				ng-repeat="stat in stats">\n				<div\n					class="img"\n					ng-style="{ backgroundImage: \'url(\\\'\' + stat.img + \'\\\')\' }">\n				</div>\n				<div\n					class="value">\n					{{ player[ stat.key ] || stat.def }}\n				</div>\n			</div>\n		</div>\n	</div>\n\n	<div\n		class="button"\n		ng-repeat="button in buttons"\n		ng-style="{ backgroundImage: \'url(\' + button.img + \')\' }"\n		ng-click="clickButton($event, player, button)">\n	</div>\n</div>\n\n<div\n	class="empty"\n	ng-if="entries.length === 0">\n\n	<h5-avatar\n		url="res/h5client/avatar-no-friends-128.png">\n	</h5-avatar\n\n	><div\n		class="info">\n		{{ ::emptyMessage }}\n	</div>\n</div>\n';
 }, {} ],
 151: [ function(t, e) {
  e.exports = '<div\n	class="title">\n	{{ ::title | lcze }}\n</div>\n<div\n	class="description">\n	{{ ::description | lcze }}\n</div>\n\n<flat-switch\n	values="values"\n	index="index">\n</flat-switch>';
 }, {} ],
 152: [ function(t, e) {
  e.exports = '<wa-popup\n	content-class="h5-prefs-popup-content"\n	bind=""\n	>\n	<h5-header\n		title="{{ ::\'h5_pref_popup_title\' | lcze }}"\n		on-back="::Back.back()"\n		gradient="false">\n	</h5-header>\n\n	<h5-pref\n		ng-repeat="(key, value) in Prefs.entries"\n		key="{{ ::key }}">\n	</h5-pref>\n	\n</wa-popup>';
 }, {} ],
 153: [ function(t, e) {
  e.exports = '<div\n	class="row"\n	ng-repeat="entry in feed"\n	ng-switch="entry.type"\n	ng-class="{ game: entry.type === \'game\', name: entry.type === \'name\' }">\n\n	<div\n		ng-switch-when="game"\n		class="avatars">\n		<h5-avatar\n			ng-repeat="player in entry.profiles | filter:filterCid"\n			ng-style="{ zIndex: entry.profiles.length - $index }"\n			cid="{{ ::player.cid }}"\n			has="{{ ::player.avatar }}">\n		</h5-avatar>\n	</div>\n\n	<div\n		ng-switch-when="namechange"\n		class="avatars">\n		<h5-avatar\n			url="res/h5client/avatar-no-friends-128.png">\n		</h5-avatar>\n	</div>\n\n	<div\n		class="info">\n\n		<div\n			class="timeago">\n			{{ entry.ts | timeagoshort }}\n		</div>\n\n		<div class="title">\n			<div\n				ng-switch-when="game">\n				Played a game with \n				<span ng-repeat="profile in entry.profiles | filter:filterCid"\n					><span ng-if="$index > 0 && !$last">, </span\n					><span ng-if="$last && $index > 0">and </span\n				>{{ profile.username }}</span\n				><span>.</span>\n			</div>\n			<div\n				ng-switch-when="namechange">\n				Changed his name to {{ entry.data.nameNew }}.\n			</div>\n		</div>\n\n		<div\n			class="stats"\n			ng-switch-when="game">\n			<div\n				class="stat"\n				ng-repeat="stat in gameStats">\n				<img\n					class="image"\n					ng-src="{{ ::stat.img }}">\n				<span\n					class="value">\n					{{ parse(stat.expr, entry.data) }}\n				</span>\n			</div>\n		</div>\n\n		<div\n			class="stats"\n			ng-switch-when="namechange">\n			Previously known as {{ entry.data.nameOld }}.\n		</div>\n\n	</div>\n</div>\n\n<div\n	class="row empty"\n	ng-if="feed.length == 0">\n\n	<div\n		class="avatars">\n		<h5-avatar\n			url="res/h5client/avatar-no-friends-128.png">\n		</h5-avatar>\n	</div>\n\n	<div class="title">\n		{{ \'h5client_profle_feed_empty\' | lcze }}\n	</div>\n\n</div>\n';
 }, {} ],
 154: [ function(t, e) {
  e.exports = '<div\n	class="h5-profile"\n	center\n	catch-back="onHide()">\n\n	<div\n		class="shade">\n	</div>\n\n	<div\n		class="content"\n		center="{{ profile.cid }}">\n\n		<div\n			class="view h5-anim-opacity"\n			ng-if="data.tab === \'home\'"\n			iscroll\n			iscroll-scrollbars="false"\n			iscroll-watch="[ ]">\n			<div class="content">\n				<div\n					class="banner">\n					\n					<h5-player-image\n						cid="{{ profile.cid }}"\n						has="{{ profile.avatar }}"\n						bind="{{ profile.cid }}"\n						size="medium">\n					</h5-player-image>\n					\n					<div class="gradient"></div>\n\n					<h5-player-info cid="{{ profile.cid }}"></h5-player-info>\n				</div>\n\n				<flat-bubble\n					class="bubble-small">\n					<span ng-if="profile.status === \'0\'">\n						Last seen {{ profile.ts_last | timeago }}.\n					</span>\n					<span ng-if="profile.status !== \'0\'">\n						Active right now.\n					</span>\n				</flat-bubble>\n\n				<h5-profile-feed\n					cid="{{ profile.cid }}">\n				</h5-profile-feed>\n			</div>\n		</div>\n\n		<div\n			class="view h5-anim-opacity"\n			ng-if="data.tab == \'chat\'">\n\n			<h5-message-thread\n				tid="{{ data.tid }}">\n			</h5-message-thread>\n		</div>\n\n		<div class="gradient-top"></div>\n\n		<h5-header\n			on-back="onHide()"\n			gradient="false">\n\n			<h5-header-icon\n				type="tabs"\n				bind="data.tab"\n				img="res/h5client/ic_group-128.png"\n				tag="home">\n			</h5-header-icon>\n\n			<h5-header-icon\n				type="tabs"\n				bind="data.tab"\n				img="res/h5client/ic_chat-128.png"\n				notify="{{ getNotifyTid() }}"\n				tag="chat">\n			</h5-header-icon>\n\n			<h5-header-icon\n				type="icons"\n				img="{{ getContactIcon() }}"\n				tag="contact"\n				ng-click="::clickContact()">\n			</h5-header-icon>\n\n		</h5-header>\n	</div>\n</div>';
 }, {} ],
 155: [ function(t, e) {
  e.exports = '<h5-groom-banner></h5-groom-banner>\n\n<flat-bubble\n	class="bubble-small">\n	{{ ::\'h5_groom_bubble_info\' | lcze }}\n</flat-bubble>\n\n<h5-gopt-info\n	opts="service.data.opts"\n	hide-public="true">\n</h5-gopt-info>\n';
 }, {} ],
 156: [ function(t, e) {
  e.exports = '<wa-popup\n	class="h5-anim-opacity"\n	bind="{{ service.rejoinStatus }}"\n	content-class="h5-reconnect-popup"\n	ng-if="service.rejoinStatus !== 0 && service.game">\n\n	<h5-header\n		title="{{ ::\'h5client_reconnect_popup_title\' | lcze }}"\n		on-back="onHide()"\n		gradient="false">\n	</h5-header>\n\n	<div\n		class="message section"\n		ng-switch="service.rejoinStatus">\n		<span ng-switch-when="1">{{ ::\'h5client_reconnect_popup_failed\' | lcze }}</span>\n		<span ng-switch-when="2">{{ ::\'h5client_reconnect_popup_waiting\' | lcze }}</span>\n		<span ng-switch-default>{{ ::\'h5client_reconnect_popup_conlost\' | lcze }}</span>\n	</div>\n\n	<flat-button\n		class="section button-cancel"\n		value="{{ ::\'h5client_reconnect_button_cancel\' | lcze }}"\n		ng-click="clickCancel($event)">\n	</flat-button>\n</wa-popup>';
 }, {} ],
 157: [ function(t, e) {
  e.exports = '<wa-popup\n	bind="{{ service.map }}"\n	catch-back="onHide()">\n	<div\n		class="h5-room-filter-popup">\n\n		<h5-header\n			title="{{ ::\'h5client_room_filter_popup_title\' | lcze }}"\n			on-back="onHide()"\n			gradient="false">\n		</h5-header>\n\n		<div class="content">\n			<flat-bubble\n				class="bubble-small"\n				ng-if="service.active.length > 0">\n				{{ ::\'h5client_room_filter_popup_active\' | lcze }}\n			</flat-bubble>\n\n			<div\n				ng-repeat="opt in service.active"\n				class="filter-active-row">\n				{{ opt.string }}\n\n				<div\n					ng-click="remove(opt.key)"\n					fake-active\n					class="button">\n				</div>\n			</div>\n\n			<flat-bubble\n				class="bubble-small">\n				{{ ::\'h5client_room_filter_popup_available\' | lcze }}\n			</flat-bubble>\n\n			<flat-sliderlist\n				ng-repeat="opt in service.available"\n				values="::opt.strings"\n				select="add(opt.key, opt.values[ index ])">\n			</flat-sliderlist>\n\n			<flat-button\n				value="{{ ::\'h5client_room_filter_button_save\' | lcze }}"\n				ng-click="onHide()">\n			</flat-button>\n		</div>\n	</div>\n</wa-popup>';
 }, {} ],
 158: [ function(t, e) {
  "use strict";
  var n = t("angular/angular");
  t("angular/animate"), t("angular/angular-file-upload"), t("angular/angular-touch");
  var i = "h5client";
  t("webapp/ngmodule"), t("flat/ngmodule");
  var r = n.module(i, [ "ngAnimate", "ngTouch", "angularFileUpload", "webapp", "flat" ]);
  e.exports = r;
 }, {
  "angular/angular": 22,
  "angular/angular-file-upload": 20,
  "angular/angular-touch": 21,
  "angular/animate": 23,
  "flat/ngmodule": 33,
  "webapp/ngmodule": 217
 } ],
 159: [ function(t, e) {
  (function(t) {
   !function() {
    function n(t) {
     var e = !1;
     return function() {
      if (e) throw new Error("Callback was already called.");
      e = !0, t.apply(i, arguments);
     };
    }
    var i, r, o = {};
    i = this, null != i && (r = i.async), o.noConflict = function() {
     return i.async = r, o;
    };
    var s = Object.prototype.toString, a = Array.isArray || function(t) {
     return "[object Array]" === s.call(t);
    }, c = function(t, e) {
     if (t.forEach) return t.forEach(e);
     for (var n = 0; n < t.length; n += 1) e(t[n], n, t);
    }, u = function(t, e) {
     if (t.map) return t.map(e);
     var n = [];
     return c(t, function(t, i, r) {
      n.push(e(t, i, r));
     }), n;
    }, l = function(t, e, n) {
     return t.reduce ? t.reduce(e, n) : (c(t, function(t, i, r) {
      n = e(n, t, i, r);
     }), n);
    }, h = function(t) {
     if (Object.keys) return Object.keys(t);
     var e = [];
     for (var n in t) t.hasOwnProperty(n) && e.push(n);
     return e;
    };
    "undefined" != typeof t && t.nextTick ? (o.nextTick = t.nextTick, o.setImmediate = "undefined" != typeof setImmediate ? function(t) {
     setImmediate(t);
    } : o.nextTick) : "function" == typeof setImmediate ? (o.nextTick = function(t) {
     setImmediate(t);
    }, o.setImmediate = o.nextTick) : (o.nextTick = function(t) {
     setTimeout(t, 0);
    }, o.setImmediate = o.nextTick), o.each = function(t, e, i) {
     function r(e) {
      e ? (i(e), i = function() {}) : (o += 1, o >= t.length && i());
     }
     if (i = i || function() {}, !t.length) return i();
     var o = 0;
     c(t, function(t) {
      e(t, n(r));
     });
    }, o.forEach = o.each, o.eachSeries = function(t, e, n) {
     if (n = n || function() {}, !t.length) return n();
     var i = 0, r = function() {
      e(t[i], function(e) {
       e ? (n(e), n = function() {}) : (i += 1, i >= t.length ? n() : r());
      });
     };
     r();
    }, o.forEachSeries = o.eachSeries, o.eachLimit = function(t, e, n, i) {
     var r = p(e);
     r.apply(null, [ t, n, i ]);
    }, o.forEachLimit = o.eachLimit;
    var p = function(t) {
     return function(e, n, i) {
      if (i = i || function() {}, !e.length || 0 >= t) return i();
      var r = 0, o = 0, s = 0;
      !function a() {
       if (r >= e.length) return i();
       for (;t > s && o < e.length; ) o += 1, s += 1, n(e[o - 1], function(t) {
        t ? (i(t), i = function() {}) : (r += 1, s -= 1, r >= e.length ? i() : a());
       });
      }();
     };
    }, f = function(t) {
     return function() {
      var e = Array.prototype.slice.call(arguments);
      return t.apply(null, [ o.each ].concat(e));
     };
    }, d = function(t, e) {
     return function() {
      var n = Array.prototype.slice.call(arguments);
      return e.apply(null, [ p(t) ].concat(n));
     };
    }, v = function(t) {
     return function() {
      var e = Array.prototype.slice.call(arguments);
      return t.apply(null, [ o.eachSeries ].concat(e));
     };
    }, g = function(t, e, n, i) {
     if (e = u(e, function(t, e) {
      return {
       index: e,
       value: t
      };
     }), i) {
      var r = [];
      t(e, function(t, e) {
       n(t.value, function(n, i) {
        r[t.index] = i, e(n);
       });
      }, function(t) {
       i(t, r);
      });
     } else t(e, function(t, e) {
      n(t.value, function(t) {
       e(t);
      });
     });
    };
    o.map = f(g), o.mapSeries = v(g), o.mapLimit = function(t, e, n, i) {
     return m(e)(t, n, i);
    };
    var m = function(t) {
     return d(t, g);
    };
    o.reduce = function(t, e, n, i) {
     o.eachSeries(t, function(t, i) {
      n(e, t, function(t, n) {
       e = n, i(t);
      });
     }, function(t) {
      i(t, e);
     });
    }, o.inject = o.reduce, o.foldl = o.reduce, o.reduceRight = function(t, e, n, i) {
     var r = u(t, function(t) {
      return t;
     }).reverse();
     o.reduce(r, e, n, i);
    }, o.foldr = o.reduceRight;
    var y = function(t, e, n, i) {
     var r = [];
     e = u(e, function(t, e) {
      return {
       index: e,
       value: t
      };
     }), t(e, function(t, e) {
      n(t.value, function(n) {
       n && r.push(t), e();
      });
     }, function() {
      i(u(r.sort(function(t, e) {
       return t.index - e.index;
      }), function(t) {
       return t.value;
      }));
     });
    };
    o.filter = f(y), o.filterSeries = v(y), o.select = o.filter, o.selectSeries = o.filterSeries;
    var b = function(t, e, n, i) {
     var r = [];
     e = u(e, function(t, e) {
      return {
       index: e,
       value: t
      };
     }), t(e, function(t, e) {
      n(t.value, function(n) {
       n || r.push(t), e();
      });
     }, function() {
      i(u(r.sort(function(t, e) {
       return t.index - e.index;
      }), function(t) {
       return t.value;
      }));
     });
    };
    o.reject = f(b), o.rejectSeries = v(b);
    var w = function(t, e, n, i) {
     t(e, function(t, e) {
      n(t, function(n) {
       n ? (i(t), i = function() {}) : e();
      });
     }, function() {
      i();
     });
    };
    o.detect = f(w), o.detectSeries = v(w), o.some = function(t, e, n) {
     o.each(t, function(t, i) {
      e(t, function(t) {
       t && (n(!0), n = function() {}), i();
      });
     }, function() {
      n(!1);
     });
    }, o.any = o.some, o.every = function(t, e, n) {
     o.each(t, function(t, i) {
      e(t, function(t) {
       t || (n(!1), n = function() {}), i();
      });
     }, function() {
      n(!0);
     });
    }, o.all = o.every, o.sortBy = function(t, e, n) {
     o.map(t, function(t, n) {
      e(t, function(e, i) {
       e ? n(e) : n(null, {
        value: t,
        criteria: i
       });
      });
     }, function(t, e) {
      if (t) return n(t);
      var i = function(t, e) {
       var n = t.criteria, i = e.criteria;
       return i > n ? -1 : n > i ? 1 : 0;
      };
      n(null, u(e.sort(i), function(t) {
       return t.value;
      }));
     });
    }, o.auto = function(t, e) {
     e = e || function() {};
     var n = h(t), i = n.length;
     if (!i) return e();
     var r = {}, s = [], u = function(t) {
      s.unshift(t);
     }, p = function(t) {
      for (var e = 0; e < s.length; e += 1) if (s[e] === t) return void s.splice(e, 1);
     }, f = function() {
      i--, c(s.slice(0), function(t) {
       t();
      });
     };
     u(function() {
      if (!i) {
       var t = e;
       e = function() {}, t(null, r);
      }
     }), c(n, function(n) {
      var i = a(t[n]) ? t[n] : [ t[n] ], s = function(t) {
       var i = Array.prototype.slice.call(arguments, 1);
       if (i.length <= 1 && (i = i[0]), t) {
        var s = {};
        c(h(r), function(t) {
         s[t] = r[t];
        }), s[n] = i, e(t, s), e = function() {};
       } else r[n] = i, o.setImmediate(f);
      }, d = i.slice(0, Math.abs(i.length - 1)) || [], v = function() {
       return l(d, function(t, e) {
        return t && r.hasOwnProperty(e);
       }, !0) && !r.hasOwnProperty(n);
      };
      if (v()) i[i.length - 1](s, r); else {
       var g = function() {
        v() && (p(g), i[i.length - 1](s, r));
       };
       u(g);
      }
     });
    }, o.retry = function(t, e, n) {
     var i = 5, r = [];
     "function" == typeof t && (n = e, e = t, t = i), t = parseInt(t, 10) || i;
     var s = function(i, s) {
      for (var a = function(t, e) {
       return function(n) {
        t(function(t, i) {
         n(!t || e, {
          err: t,
          result: i
         });
        }, s);
       };
      }; t; ) r.push(a(e, !(t -= 1)));
      o.series(r, function(t, e) {
       e = e[e.length - 1], (i || n)(e.err, e.result);
      });
     };
     return n ? s() : s;
    }, o.waterfall = function(t, e) {
     if (e = e || function() {}, !a(t)) {
      var n = new Error("First argument to waterfall must be an array of functions");
      return e(n);
     }
     if (!t.length) return e();
     var i = function(t) {
      return function(n) {
       if (n) e.apply(null, arguments), e = function() {}; else {
        var r = Array.prototype.slice.call(arguments, 1), s = t.next();
        r.push(s ? i(s) : e), o.setImmediate(function() {
         t.apply(null, r);
        });
       }
      };
     };
     i(o.iterator(t))();
    };
    var _ = function(t, e, n) {
     if (n = n || function() {}, a(e)) t.map(e, function(t, e) {
      t && t(function(t) {
       var n = Array.prototype.slice.call(arguments, 1);
       n.length <= 1 && (n = n[0]), e.call(null, t, n);
      });
     }, n); else {
      var i = {};
      t.each(h(e), function(t, n) {
       e[t](function(e) {
        var r = Array.prototype.slice.call(arguments, 1);
        r.length <= 1 && (r = r[0]), i[t] = r, n(e);
       });
      }, function(t) {
       n(t, i);
      });
     }
    };
    o.parallel = function(t, e) {
     _({
      map: o.map,
      each: o.each
     }, t, e);
    }, o.parallelLimit = function(t, e, n) {
     _({
      map: m(e),
      each: p(e)
     }, t, n);
    }, o.series = function(t, e) {
     if (e = e || function() {}, a(t)) o.mapSeries(t, function(t, e) {
      t && t(function(t) {
       var n = Array.prototype.slice.call(arguments, 1);
       n.length <= 1 && (n = n[0]), e.call(null, t, n);
      });
     }, e); else {
      var n = {};
      o.eachSeries(h(t), function(e, i) {
       t[e](function(t) {
        var r = Array.prototype.slice.call(arguments, 1);
        r.length <= 1 && (r = r[0]), n[e] = r, i(t);
       });
      }, function(t) {
       e(t, n);
      });
     }
    }, o.iterator = function(t) {
     var e = function(n) {
      var i = function() {
       return t.length && t[n].apply(null, arguments), i.next();
      };
      return i.next = function() {
       return n < t.length - 1 ? e(n + 1) : null;
      }, i;
     };
     return e(0);
    }, o.apply = function(t) {
     var e = Array.prototype.slice.call(arguments, 1);
     return function() {
      return t.apply(null, e.concat(Array.prototype.slice.call(arguments)));
     };
    };
    var x = function(t, e, n, i) {
     var r = [];
     t(e, function(t, e) {
      n(t, function(t, n) {
       r = r.concat(n || []), e(t);
      });
     }, function(t) {
      i(t, r);
     });
    };
    o.concat = f(x), o.concatSeries = v(x), o.whilst = function(t, e, n) {
     t() ? e(function(i) {
      return i ? n(i) : void o.whilst(t, e, n);
     }) : n();
    }, o.doWhilst = function(t, e, n) {
     t(function(i) {
      if (i) return n(i);
      var r = Array.prototype.slice.call(arguments, 1);
      e.apply(null, r) ? o.doWhilst(t, e, n) : n();
     });
    }, o.until = function(t, e, n) {
     t() ? n() : e(function(i) {
      return i ? n(i) : void o.until(t, e, n);
     });
    }, o.doUntil = function(t, e, n) {
     t(function(i) {
      if (i) return n(i);
      var r = Array.prototype.slice.call(arguments, 1);
      e.apply(null, r) ? n() : o.doUntil(t, e, n);
     });
    }, o.queue = function(t, e) {
     function i(t, e, n, i) {
      return t.started || (t.started = !0), a(e) || (e = [ e ]), 0 == e.length ? o.setImmediate(function() {
       t.drain && t.drain();
      }) : void c(e, function(e) {
       var r = {
        data: e,
        callback: "function" == typeof i ? i : null
       };
       n ? t.tasks.unshift(r) : t.tasks.push(r), t.saturated && t.tasks.length === t.concurrency && t.saturated(), 
       o.setImmediate(t.process);
      });
     }
     void 0 === e && (e = 1);
     var r = 0, s = {
      tasks: [],
      concurrency: e,
      saturated: null,
      empty: null,
      drain: null,
      started: !1,
      paused: !1,
      push: function(t, e) {
       i(s, t, !1, e);
      },
      kill: function() {
       s.drain = null, s.tasks = [];
      },
      unshift: function(t, e) {
       i(s, t, !0, e);
      },
      process: function() {
       if (!s.paused && r < s.concurrency && s.tasks.length) {
        var e = s.tasks.shift();
        s.empty && 0 === s.tasks.length && s.empty(), r += 1;
        var i = function() {
         r -= 1, e.callback && e.callback.apply(e, arguments), s.drain && s.tasks.length + r === 0 && s.drain(), 
         s.process();
        }, o = n(i);
        t(e.data, o);
       }
      },
      length: function() {
       return s.tasks.length;
      },
      running: function() {
       return r;
      },
      idle: function() {
       return s.tasks.length + r === 0;
      },
      pause: function() {
       s.paused !== !0 && (s.paused = !0, s.process());
      },
      resume: function() {
       s.paused !== !1 && (s.paused = !1, s.process());
      }
     };
     return s;
    }, o.priorityQueue = function(t, e) {
     function n(t, e) {
      return t.priority - e.priority;
     }
     function i(t, e, n) {
      for (var i = -1, r = t.length - 1; r > i; ) {
       var o = i + (r - i + 1 >>> 1);
       n(e, t[o]) >= 0 ? i = o : r = o - 1;
      }
      return i;
     }
     function r(t, e, r, s) {
      return t.started || (t.started = !0), a(e) || (e = [ e ]), 0 == e.length ? o.setImmediate(function() {
       t.drain && t.drain();
      }) : void c(e, function(e) {
       var a = {
        data: e,
        priority: r,
        callback: "function" == typeof s ? s : null
       };
       t.tasks.splice(i(t.tasks, a, n) + 1, 0, a), t.saturated && t.tasks.length === t.concurrency && t.saturated(), 
       o.setImmediate(t.process);
      });
     }
     var s = o.queue(t, e);
     return s.push = function(t, e, n) {
      r(s, t, e, n);
     }, delete s.unshift, s;
    }, o.cargo = function(t, e) {
     var n = !1, i = [], r = {
      tasks: i,
      payload: e,
      saturated: null,
      empty: null,
      drain: null,
      drained: !0,
      push: function(t, n) {
       a(t) || (t = [ t ]), c(t, function(t) {
        i.push({
         data: t,
         callback: "function" == typeof n ? n : null
        }), r.drained = !1, r.saturated && i.length === e && r.saturated();
       }), o.setImmediate(r.process);
      },
      process: function s() {
       if (!n) {
        if (0 === i.length) return r.drain && !r.drained && r.drain(), void (r.drained = !0);
        var o = "number" == typeof e ? i.splice(0, e) : i.splice(0, i.length), a = u(o, function(t) {
         return t.data;
        });
        r.empty && r.empty(), n = !0, t(a, function() {
         n = !1;
         var t = arguments;
         c(o, function(e) {
          e.callback && e.callback.apply(null, t);
         }), s();
        });
       }
      },
      length: function() {
       return i.length;
      },
      running: function() {
       return n;
      }
     };
     return r;
    };
    var $ = function(t) {
     return function(e) {
      var n = Array.prototype.slice.call(arguments, 1);
      e.apply(null, n.concat([ function(e) {
       var n = Array.prototype.slice.call(arguments, 1);
       "undefined" != typeof console && (e ? console.error && console.error(e) : console[t] && c(n, function(e) {
        console[t](e);
       }));
      } ]));
     };
    };
    o.log = $("log"), o.dir = $("dir"), o.memoize = function(t, e) {
     var n = {}, i = {};
     e = e || function(t) {
      return t;
     };
     var r = function() {
      var r = Array.prototype.slice.call(arguments), s = r.pop(), a = e.apply(null, r);
      a in n ? o.nextTick(function() {
       s.apply(null, n[a]);
      }) : a in i ? i[a].push(s) : (i[a] = [ s ], t.apply(null, r.concat([ function() {
       n[a] = arguments;
       var t = i[a];
       delete i[a];
       for (var e = 0, r = t.length; r > e; e++) t[e].apply(null, arguments);
      } ])));
     };
     return r.memo = n, r.unmemoized = t, r;
    }, o.unmemoize = function(t) {
     return function() {
      return (t.unmemoized || t).apply(null, arguments);
     };
    }, o.times = function(t, e, n) {
     for (var i = [], r = 0; t > r; r++) i.push(r);
     return o.map(i, e, n);
    }, o.timesSeries = function(t, e, n) {
     for (var i = [], r = 0; t > r; r++) i.push(r);
     return o.mapSeries(i, e, n);
    }, o.seq = function() {
     var t = arguments;
     return function() {
      var e = this, n = Array.prototype.slice.call(arguments), i = n.pop();
      o.reduce(t, n, function(t, n, i) {
       n.apply(e, t.concat([ function() {
        var t = arguments[0], e = Array.prototype.slice.call(arguments, 1);
        i(t, e);
       } ]));
      }, function(t, n) {
       i.apply(e, [ t ].concat(n));
      });
     };
    }, o.compose = function() {
     return o.seq.apply(null, Array.prototype.reverse.call(arguments));
    };
    var k = function(t, e) {
     var n = function() {
      var n = this, i = Array.prototype.slice.call(arguments), r = i.pop();
      return t(e, function(t, e) {
       t.apply(n, i.concat([ e ]));
      }, r);
     };
     if (arguments.length > 2) {
      var i = Array.prototype.slice.call(arguments, 2);
      return n.apply(this, i);
     }
     return n;
    };
    o.applyEach = f(k), o.applyEachSeries = v(k), o.forever = function(t, e) {
     function n(i) {
      if (i) {
       if (e) return e(i);
       throw i;
      }
      t(n);
     }
     n();
    }, "undefined" != typeof e && e.exports ? e.exports = o : "undefined" != typeof define && define.amd ? define([], function() {
     return o;
    }) : i.async = o;
   }();
  }).call(this, t("_process"));
 }, {
  _process: 1
 } ],
 160: [ function(t, e, n) {
  !function() {
   var t = {}, e = null, i = !0, r = !1;
   try {
    "undefined" != typeof AudioContext ? e = new AudioContext() : "undefined" != typeof webkitAudioContext ? e = new webkitAudioContext() : i = !1;
   } catch (o) {
    i = !1;
   }
   if (!i) if ("undefined" != typeof Audio) try {
    new Audio();
   } catch (o) {
    r = !0;
   } else r = !0;
   if (i) {
    var s = "undefined" == typeof e.createGain ? e.createGainNode() : e.createGain();
    s.gain.value = 1, s.connect(e.destination);
   }
   var a = function(t) {
    this._volume = 1, this._muted = !1, this.usingWebAudio = i, this.ctx = e, this.noAudio = r, 
    this._howls = [], this._codecs = t, this.iOSAutoEnable = !0;
   };
   a.prototype = {
    volume: function(t) {
     var e = this;
     if (t = parseFloat(t), t >= 0 && 1 >= t) {
      e._volume = t, i && (s.gain.value = t);
      for (var n in e._howls) if (e._howls.hasOwnProperty(n) && e._howls[n]._webAudio === !1) for (var r = 0; r < e._howls[n]._audioNode.length; r++) e._howls[n]._audioNode[r].volume = e._howls[n]._volume * e._volume;
      return e;
     }
     return i ? s.gain.value : e._volume;
    },
    mute: function() {
     return this._setMuted(!0), this;
    },
    unmute: function() {
     return this._setMuted(!1), this;
    },
    _setMuted: function(t) {
     var e = this;
     e._muted = t, i && (s.gain.value = t ? 0 : e._volume);
     for (var n in e._howls) if (e._howls.hasOwnProperty(n) && e._howls[n]._webAudio === !1) for (var r = 0; r < e._howls[n]._audioNode.length; r++) e._howls[n]._audioNode[r].muted = t;
    },
    codecs: function(t) {
     return this._codecs[t];
    },
    _enableiOSAudio: function() {
     var t = this;
     if (!e || !t._iOSEnabled && /iPhone|iPad|iPod/i.test(navigator.userAgent)) {
      t._iOSEnabled = !1;
      var n = function() {
       var i = e.createBuffer(1, 1, 22050), r = e.createBufferSource();
       r.buffer = i, r.connect(e.destination), "undefined" == typeof r.start ? r.noteOn(0) : r.start(0), 
       setTimeout(function() {
        (r.playbackState === r.PLAYING_STATE || r.playbackState === r.FINISHED_STATE) && (t._iOSEnabled = !0, 
        t.iOSAutoEnable = !1, window.removeEventListener("touchstart", n, !1));
       }, 0);
      };
      return window.addEventListener("touchstart", n, !1), t;
     }
    }
   };
   var c = null, u = {};
   r || (c = new Audio(), u = {
    mp3: !!c.canPlayType("audio/mpeg;").replace(/^no$/, ""),
    opus: !!c.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
    ogg: !!c.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
    wav: !!c.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
    aac: !!c.canPlayType("audio/aac;").replace(/^no$/, ""),
    m4a: !!(c.canPlayType("audio/x-m4a;") || c.canPlayType("audio/m4a;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""),
    mp4: !!(c.canPlayType("audio/x-mp4;") || c.canPlayType("audio/mp4;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""),
    weba: !!c.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, "")
   });
   var l = new a(u), h = function(t) {
    var n = this;
    n._autoplay = t.autoplay || !1, n._buffer = t.buffer || !1, n._duration = t.duration || 0, 
    n._format = t.format || null, n._loop = t.loop || !1, n._loaded = !1, n._sprite = t.sprite || {}, 
    n._src = t.src || "", n._pos3d = t.pos3d || [ 0, 0, -.5 ], n._volume = void 0 !== t.volume ? t.volume : 1, 
    n._urls = t.urls || [], n._rate = t.rate || 1, n._model = t.model || null, n._onload = [ t.onload || function() {} ], 
    n._onloaderror = [ t.onloaderror || function() {} ], n._onend = [ t.onend || function() {} ], 
    n._onpause = [ t.onpause || function() {} ], n._onplay = [ t.onplay || function() {} ], 
    n._onendTimer = [], n._webAudio = i && !n._buffer, n._audioNode = [], n._webAudio && n._setupAudioNode(), 
    "undefined" != typeof e && e && l.iOSAutoEnable && l._enableiOSAudio(), l._howls.push(n), 
    n.load();
   };
   if (h.prototype = {
    load: function() {
     var t = this, e = null;
     if (r) return void t.on("loaderror");
     for (var n = 0; n < t._urls.length; n++) {
      var i, o;
      if (t._format) i = t._format; else {
       if (o = t._urls[n], i = /^data:audio\/([^;,]+);/i.exec(o), i || (i = /\.([^.]+)$/.exec(o.split("?", 1)[0])), 
       !i) return void t.on("loaderror");
       i = i[1].toLowerCase();
      }
      if (u[i]) {
       e = t._urls[n];
       break;
      }
     }
     if (!e) return void t.on("loaderror");
     if (t._src = e, t._webAudio) p(t, e); else {
      var s = new Audio();
      s.addEventListener("error", function() {
       s.error && 4 === s.error.code && (a.noAudio = !0), t.on("loaderror", {
        type: s.error ? s.error.code : 0
       });
      }, !1), t._audioNode.push(s), s.src = e, s._pos = 0, s.preload = "auto", s.volume = l._muted ? 0 : t._volume * l.volume();
      var c = function() {
       t._duration = Math.ceil(10 * s.duration) / 10, 0 === Object.getOwnPropertyNames(t._sprite).length && (t._sprite = {
        _default: [ 0, 1e3 * t._duration ]
       }), t._loaded || (t._loaded = !0, t.on("load")), t._autoplay && t.play(), s.removeEventListener("canplaythrough", c, !1);
      };
      s.addEventListener("canplaythrough", c, !1), s.load();
     }
     return t;
    },
    urls: function(t) {
     var e = this;
     return t ? (e.stop(), e._urls = "string" == typeof t ? [ t ] : t, e._loaded = !1, 
     e.load(), e) : e._urls;
    },
    play: function(t, n) {
     var i = this;
     return "function" == typeof t && (n = t), t && "function" != typeof t || (t = "_default"), 
     i._loaded ? i._sprite[t] ? (i._inactiveNode(function(r) {
      r._sprite = t;
      var o = r._pos > 0 ? r._pos : i._sprite[t][0] / 1e3, s = 0;
      i._webAudio ? (s = i._sprite[t][1] / 1e3 - r._pos, r._pos > 0 && (o = i._sprite[t][0] / 1e3 + o)) : s = i._sprite[t][1] / 1e3 - (o - i._sprite[t][0] / 1e3);
      var a, c = !(!i._loop && !i._sprite[t][2]), u = "string" == typeof n ? n : Math.round(Date.now() * Math.random()) + "";
      if (function() {
       var e = {
        id: u,
        sprite: t,
        loop: c
       };
       a = setTimeout(function() {
        !i._webAudio && c && i.stop(e.id).play(t, e.id), i._webAudio && !c && (i._nodeById(e.id).paused = !0, 
        i._nodeById(e.id)._pos = 0, i._clearEndTimer(e.id)), i._webAudio || c || i.stop(e.id), 
        i.on("end", u);
       }, 1e3 * s), i._onendTimer.push({
        timer: a,
        id: e.id
       });
      }(), i._webAudio) {
       var h = i._sprite[t][0] / 1e3, p = i._sprite[t][1] / 1e3;
       r.id = u, r.paused = !1, v(i, [ c, h, p ], u), i._playStart = e.currentTime, r.gain.value = i._volume, 
       "undefined" == typeof r.bufferSource.start ? r.bufferSource.noteGrainOn(0, o, s) : r.bufferSource.start(0, o, s);
      } else {
       if (4 !== r.readyState && (r.readyState || !navigator.isCocoonJS)) return i._clearEndTimer(u), 
       function() {
        var e = i, o = t, s = n, a = r, c = function() {
         e.play(o, s), a.removeEventListener("canplaythrough", c, !1);
        };
        a.addEventListener("canplaythrough", c, !1);
       }(), i;
       r.readyState = 4, r.id = u, r.currentTime = o, r.muted = l._muted || r.muted, r.volume = i._volume * l.volume(), 
       setTimeout(function() {
        r.play();
       }, 0);
      }
      return i.on("play"), "function" == typeof n && n(u), i;
     }), i) : ("function" == typeof n && n(), i) : (i.on("load", function() {
      i.play(t, n);
     }), i);
    },
    pause: function(t) {
     var e = this;
     if (!e._loaded) return e.on("play", function() {
      e.pause(t);
     }), e;
     e._clearEndTimer(t);
     var n = t ? e._nodeById(t) : e._activeNode();
     if (n) if (n._pos = e.pos(null, t), e._webAudio) {
      if (!n.bufferSource || n.paused) return e;
      n.paused = !0, "undefined" == typeof n.bufferSource.stop ? n.bufferSource.noteOff(0) : n.bufferSource.stop(0);
     } else n.pause();
     return e.on("pause"), e;
    },
    stop: function(t) {
     var e = this;
     if (!e._loaded) return e.on("play", function() {
      e.stop(t);
     }), e;
     e._clearEndTimer(t);
     var n = t ? e._nodeById(t) : e._activeNode();
     if (n) if (n._pos = 0, e._webAudio) {
      if (!n.bufferSource || n.paused) return e;
      n.paused = !0, "undefined" == typeof n.bufferSource.stop ? n.bufferSource.noteOff(0) : n.bufferSource.stop(0);
     } else isNaN(n.duration) || (n.pause(), n.currentTime = 0);
     return e;
    },
    mute: function(t) {
     var e = this;
     if (!e._loaded) return e.on("play", function() {
      e.mute(t);
     }), e;
     var n = t ? e._nodeById(t) : e._activeNode();
     return n && (e._webAudio ? n.gain.value = 0 : n.muted = !0), e;
    },
    unmute: function(t) {
     var e = this;
     if (!e._loaded) return e.on("play", function() {
      e.unmute(t);
     }), e;
     var n = t ? e._nodeById(t) : e._activeNode();
     return n && (e._webAudio ? n.gain.value = e._volume : n.muted = !1), e;
    },
    volume: function(t, e) {
     var n = this;
     if (t = parseFloat(t), t >= 0 && 1 >= t) {
      if (n._volume = t, !n._loaded) return n.on("play", function() {
       n.volume(t, e);
      }), n;
      var i = e ? n._nodeById(e) : n._activeNode();
      return i && (n._webAudio ? i.gain.value = t : i.volume = t * l.volume()), n;
     }
     return n._volume;
    },
    loop: function(t) {
     var e = this;
     return "boolean" == typeof t ? (e._loop = t, e) : e._loop;
    },
    sprite: function(t) {
     var e = this;
     return "object" == typeof t ? (e._sprite = t, e) : e._sprite;
    },
    pos: function(t, n) {
     var i = this;
     if (!i._loaded) return i.on("load", function() {
      i.pos(t);
     }), "number" == typeof t ? i : i._pos || 0;
     t = parseFloat(t);
     var r = n ? i._nodeById(n) : i._activeNode();
     if (r) return t >= 0 ? (i.pause(n), r._pos = t, i.play(r._sprite, n), i) : i._webAudio ? r._pos + (e.currentTime - i._playStart) : r.currentTime;
     if (t >= 0) return i;
     for (var o = 0; o < i._audioNode.length; o++) if (i._audioNode[o].paused && 4 === i._audioNode[o].readyState) return i._webAudio ? i._audioNode[o]._pos : i._audioNode[o].currentTime;
    },
    pos3d: function(t, e, n, i) {
     var r = this;
     if (e = "undefined" != typeof e && e ? e : 0, n = "undefined" != typeof n && n ? n : -.5, 
     !r._loaded) return r.on("play", function() {
      r.pos3d(t, e, n, i);
     }), r;
     if (!(t >= 0 || 0 > t)) return r._pos3d;
     if (r._webAudio) {
      var o = i ? r._nodeById(i) : r._activeNode();
      o && (r._pos3d = [ t, e, n ], o.panner.setPosition(t, e, n), o.panner.panningModel = r._model || "HRTF");
     }
     return r;
    },
    fade: function(t, e, n, i, r) {
     var o = this, s = Math.abs(t - e), a = t > e ? "down" : "up", c = s / .01, u = n / c;
     if (!o._loaded) return o.on("load", function() {
      o.fade(t, e, n, i, r);
     }), o;
     o.volume(t, r);
     for (var l = 1; c >= l; l++) !function() {
      var t = o._volume + ("up" === a ? .01 : -.01) * l, n = Math.round(1e3 * t) / 1e3, s = e;
      setTimeout(function() {
       o.volume(n, r), n === s && i && i();
      }, u * l);
     }();
    },
    fadeIn: function(t, e, n) {
     return this.volume(0).play().fade(0, t, e, n);
    },
    fadeOut: function(t, e, n, i) {
     var r = this;
     return r.fade(r._volume, t, e, function() {
      n && n(), r.pause(i), r.on("end");
     }, i);
    },
    _nodeById: function(t) {
     for (var e = this, n = e._audioNode[0], i = 0; i < e._audioNode.length; i++) if (e._audioNode[i].id === t) {
      n = e._audioNode[i];
      break;
     }
     return n;
    },
    _activeNode: function() {
     for (var t = this, e = null, n = 0; n < t._audioNode.length; n++) if (!t._audioNode[n].paused) {
      e = t._audioNode[n];
      break;
     }
     return t._drainPool(), e;
    },
    _inactiveNode: function(t) {
     for (var e = this, n = null, i = 0; i < e._audioNode.length; i++) if (e._audioNode[i].paused && 4 === e._audioNode[i].readyState) {
      t(e._audioNode[i]), n = !0;
      break;
     }
     if (e._drainPool(), !n) {
      var r;
      if (e._webAudio) r = e._setupAudioNode(), t(r); else {
       e.load(), r = e._audioNode[e._audioNode.length - 1];
       var o = navigator.isCocoonJS ? "canplaythrough" : "loadedmetadata", s = function() {
        r.removeEventListener(o, s, !1), t(r);
       };
       r.addEventListener(o, s, !1);
      }
     }
    },
    _drainPool: function() {
     var t, e = this, n = 0;
     for (t = 0; t < e._audioNode.length; t++) e._audioNode[t].paused && n++;
     for (t = e._audioNode.length - 1; t >= 0 && !(5 >= n); t--) e._audioNode[t].paused && (e._webAudio && e._audioNode[t].disconnect(0), 
     n--, e._audioNode.splice(t, 1));
    },
    _clearEndTimer: function(t) {
     for (var e = this, n = 0, i = 0; i < e._onendTimer.length; i++) if (e._onendTimer[i].id === t) {
      n = i;
      break;
     }
     var r = e._onendTimer[n];
     r && (clearTimeout(r.timer), e._onendTimer.splice(n, 1));
    },
    _setupAudioNode: function() {
     var t = this, n = t._audioNode, i = t._audioNode.length;
     return n[i] = "undefined" == typeof e.createGain ? e.createGainNode() : e.createGain(), 
     n[i].gain.value = t._volume, n[i].paused = !0, n[i]._pos = 0, n[i].readyState = 4, 
     n[i].connect(s), n[i].panner = e.createPanner(), n[i].panner.panningModel = t._model || "equalpower", 
     n[i].panner.setPosition(t._pos3d[0], t._pos3d[1], t._pos3d[2]), n[i].panner.connect(n[i]), 
     n[i];
    },
    on: function(t, e) {
     var n = this, i = n["_on" + t];
     if ("function" == typeof e) i.push(e); else for (var r = 0; r < i.length; r++) e ? i[r].call(n, e) : i[r].call(n);
     return n;
    },
    off: function(t, e) {
     var n = this, i = n["_on" + t], r = e ? e.toString() : null;
     if (r) {
      for (var o = 0; o < i.length; o++) if (r === i[o].toString()) {
       i.splice(o, 1);
       break;
      }
     } else n["_on" + t] = [];
     return n;
    },
    unload: function() {
     for (var e = this, n = e._audioNode, i = 0; i < e._audioNode.length; i++) n[i].paused || (e.stop(n[i].id), 
     e.on("end", n[i].id)), e._webAudio ? n[i].disconnect(0) : n[i].src = "";
     for (i = 0; i < e._onendTimer.length; i++) clearTimeout(e._onendTimer[i].timer);
     var r = l._howls.indexOf(e);
     null !== r && r >= 0 && l._howls.splice(r, 1), delete t[e._src], e = null;
    }
   }, i) var p = function(e, n) {
    if (n in t) return e._duration = t[n].duration, void d(e);
    if (/^data:[^;]+;base64,/.test(n)) {
     for (var i = atob(n.split(",")[1]), r = new Uint8Array(i.length), o = 0; o < i.length; ++o) r[o] = i.charCodeAt(o);
     f(r.buffer, e, n);
    } else {
     var s = new XMLHttpRequest();
     s.open("GET", n, !0), s.responseType = "arraybuffer", s.onload = function() {
      f(s.response, e, n);
     }, s.onerror = function() {
      e._webAudio && (e._buffer = !0, e._webAudio = !1, e._audioNode = [], delete e._gainNode, 
      delete t[n], e.load());
     };
     try {
      s.send();
     } catch (a) {
      s.onerror();
     }
    }
   }, f = function(n, i, r) {
    e.decodeAudioData(n, function(e) {
     e && (t[r] = e, d(i, e));
    }, function() {
     i.on("loaderror");
    });
   }, d = function(t, e) {
    t._duration = e ? e.duration : t._duration, 0 === Object.getOwnPropertyNames(t._sprite).length && (t._sprite = {
     _default: [ 0, 1e3 * t._duration ]
    }), t._loaded || (t._loaded = !0, t.on("load")), t._autoplay && t.play();
   }, v = function(n, i, r) {
    var o = n._nodeById(r);
    o.bufferSource = e.createBufferSource(), o.bufferSource.buffer = t[n._src], o.bufferSource.connect(o.panner), 
    o.bufferSource.loop = i[0], i[0] && (o.bufferSource.loopStart = i[1], o.bufferSource.loopEnd = i[1] + i[2]), 
    o.bufferSource.playbackRate.value = n._rate;
   };
   "function" == typeof define && define.amd && define(function() {
    return {
     Howler: l,
     Howl: h
    };
   }), "undefined" != typeof n && (n.Howler = l, n.Howl = h), "undefined" != typeof window && (window.Howler = l, 
   window.Howl = h);
  }();
 }, {} ],
 161: [ function(t, e) {
  !function(t, n) {
   "object" == typeof e && "object" == typeof e.exports ? e.exports = t.document ? n(t, !0) : function(t) {
    if (!t.document) throw new Error("jQuery requires a window with a document");
    return n(t);
   } : n(t);
  }("undefined" != typeof window ? window : this, function(t, e) {
   function n(t) {
    var e = t.length, n = Z.type(t);
    return "function" === n || Z.isWindow(t) ? !1 : 1 === t.nodeType && e ? !0 : "array" === n || 0 === e || "number" == typeof e && e > 0 && e - 1 in t;
   }
   function i(t, e, n) {
    if (Z.isFunction(e)) return Z.grep(t, function(t, i) {
     return !!e.call(t, i, t) !== n;
    });
    if (e.nodeType) return Z.grep(t, function(t) {
     return t === e !== n;
    });
    if ("string" == typeof e) {
     if (at.test(e)) return Z.filter(e, t, n);
     e = Z.filter(e, t);
    }
    return Z.grep(t, function(t) {
     return W.call(e, t) >= 0 !== n;
    });
   }
   function r(t, e) {
    for (;(t = t[e]) && 1 !== t.nodeType; ) ;
    return t;
   }
   function o(t) {
    var e = dt[t] = {};
    return Z.each(t.match(ft) || [], function(t, n) {
     e[n] = !0;
    }), e;
   }
   function s() {
    K.removeEventListener("DOMContentLoaded", s, !1), t.removeEventListener("load", s, !1), 
    Z.ready();
   }
   function a() {
    Object.defineProperty(this.cache = {}, 0, {
     get: function() {
      return {};
     }
    }), this.expando = Z.expando + a.uid++;
   }
   function c(t, e, n) {
    var i;
    if (void 0 === n && 1 === t.nodeType) if (i = "data-" + e.replace(wt, "-$1").toLowerCase(), 
    n = t.getAttribute(i), "string" == typeof n) {
     try {
      n = "true" === n ? !0 : "false" === n ? !1 : "null" === n ? null : +n + "" === n ? +n : bt.test(n) ? Z.parseJSON(n) : n;
     } catch (r) {}
     yt.set(t, e, n);
    } else n = void 0;
    return n;
   }
   function u() {
    return !0;
   }
   function l() {
    return !1;
   }
   function h() {
    try {
     return K.activeElement;
    } catch (t) {}
   }
   function p(t, e) {
    return Z.nodeName(t, "table") && Z.nodeName(11 !== e.nodeType ? e : e.firstChild, "tr") ? t.getElementsByTagName("tbody")[0] || t.appendChild(t.ownerDocument.createElement("tbody")) : t;
   }
   function f(t) {
    return t.type = (null !== t.getAttribute("type")) + "/" + t.type, t;
   }
   function d(t) {
    var e = Rt.exec(t.type);
    return e ? t.type = e[1] : t.removeAttribute("type"), t;
   }
   function v(t, e) {
    for (var n = 0, i = t.length; i > n; n++) mt.set(t[n], "globalEval", !e || mt.get(e[n], "globalEval"));
   }
   function g(t, e) {
    var n, i, r, o, s, a, c, u;
    if (1 === e.nodeType) {
     if (mt.hasData(t) && (o = mt.access(t), s = mt.set(e, o), u = o.events)) {
      delete s.handle, s.events = {};
      for (r in u) for (n = 0, i = u[r].length; i > n; n++) Z.event.add(e, r, u[r][n]);
     }
     yt.hasData(t) && (a = yt.access(t), c = Z.extend({}, a), yt.set(e, c));
    }
   }
   function m(t, e) {
    var n = t.getElementsByTagName ? t.getElementsByTagName(e || "*") : t.querySelectorAll ? t.querySelectorAll(e || "*") : [];
    return void 0 === e || e && Z.nodeName(t, e) ? Z.merge([ t ], n) : n;
   }
   function y(t, e) {
    var n = e.nodeName.toLowerCase();
    "input" === n && kt.test(t.type) ? e.checked = t.checked : ("input" === n || "textarea" === n) && (e.defaultValue = t.defaultValue);
   }
   function b(e, n) {
    var i, r = Z(n.createElement(e)).appendTo(n.body), o = t.getDefaultComputedStyle && (i = t.getDefaultComputedStyle(r[0])) ? i.display : Z.css(r[0], "display");
    return r.detach(), o;
   }
   function w(t) {
    var e = K, n = It[t];
    return n || (n = b(t, e), "none" !== n && n || (Bt = (Bt || Z("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement), 
    e = Bt[0].contentDocument, e.write(), e.close(), n = b(t, e), Bt.detach()), It[t] = n), 
    n;
   }
   function _(t, e, n) {
    var i, r, o, s, a = t.style;
    return n = n || zt(t), n && (s = n.getPropertyValue(e) || n[e]), n && ("" !== s || Z.contains(t.ownerDocument, t) || (s = Z.style(t, e)), 
    Ft.test(s) && qt.test(e) && (i = a.width, r = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = s, 
    s = n.width, a.width = i, a.minWidth = r, a.maxWidth = o)), void 0 !== s ? s + "" : s;
   }
   function x(t, e) {
    return {
     get: function() {
      return t() ? void delete this.get : (this.get = e).apply(this, arguments);
     }
    };
   }
   function $(t, e) {
    if (e in t) return e;
    for (var n = e[0].toUpperCase() + e.slice(1), i = e, r = Yt.length; r--; ) if (e = Yt[r] + n, 
    e in t) return e;
    return i;
   }
   function k(t, e, n) {
    var i = Vt.exec(e);
    return i ? Math.max(0, i[1] - (n || 0)) + (i[2] || "px") : e;
   }
   function S(t, e, n, i, r) {
    for (var o = n === (i ? "border" : "content") ? 4 : "width" === e ? 1 : 0, s = 0; 4 > o; o += 2) "margin" === n && (s += Z.css(t, n + xt[o], !0, r)), 
    i ? ("content" === n && (s -= Z.css(t, "padding" + xt[o], !0, r)), "margin" !== n && (s -= Z.css(t, "border" + xt[o] + "Width", !0, r))) : (s += Z.css(t, "padding" + xt[o], !0, r), 
    "padding" !== n && (s += Z.css(t, "border" + xt[o] + "Width", !0, r)));
    return s;
   }
   function E(t, e, n) {
    var i = !0, r = "width" === e ? t.offsetWidth : t.offsetHeight, o = zt(t), s = "border-box" === Z.css(t, "boxSizing", !1, o);
    if (0 >= r || null == r) {
     if (r = _(t, e, o), (0 > r || null == r) && (r = t.style[e]), Ft.test(r)) return r;
     i = s && (J.boxSizingReliable() || r === t.style[e]), r = parseFloat(r) || 0;
    }
    return r + S(t, e, n || (s ? "border" : "content"), i, o) + "px";
   }
   function C(t, e) {
    for (var n, i, r, o = [], s = 0, a = t.length; a > s; s++) i = t[s], i.style && (o[s] = mt.get(i, "olddisplay"), 
    n = i.style.display, e ? (o[s] || "none" !== n || (i.style.display = ""), "" === i.style.display && $t(i) && (o[s] = mt.access(i, "olddisplay", w(i.nodeName)))) : (r = $t(i), 
    "none" === n && r || mt.set(i, "olddisplay", r ? n : Z.css(i, "display"))));
    for (s = 0; a > s; s++) i = t[s], i.style && (e && "none" !== i.style.display && "" !== i.style.display || (i.style.display = e ? o[s] || "" : "none"));
    return t;
   }
   function T(t, e, n, i, r) {
    return new T.prototype.init(t, e, n, i, r);
   }
   function A() {
    return setTimeout(function() {
     Jt = void 0;
    }), Jt = Z.now();
   }
   function j(t, e) {
    var n, i = 0, r = {
     height: t
    };
    for (e = e ? 1 : 0; 4 > i; i += 2 - e) n = xt[i], r["margin" + n] = r["padding" + n] = t;
    return e && (r.opacity = r.width = t), r;
   }
   function P(t, e, n) {
    for (var i, r = (ne[e] || []).concat(ne["*"]), o = 0, s = r.length; s > o; o++) if (i = r[o].call(n, e, t)) return i;
   }
   function L(t, e, n) {
    var i, r, o, s, a, c, u, l, h = this, p = {}, f = t.style, d = t.nodeType && $t(t), v = mt.get(t, "fxshow");
    n.queue || (a = Z._queueHooks(t, "fx"), null == a.unqueued && (a.unqueued = 0, c = a.empty.fire, 
    a.empty.fire = function() {
     a.unqueued || c();
    }), a.unqueued++, h.always(function() {
     h.always(function() {
      a.unqueued--, Z.queue(t, "fx").length || a.empty.fire();
     });
    })), 1 === t.nodeType && ("height" in e || "width" in e) && (n.overflow = [ f.overflow, f.overflowX, f.overflowY ], 
    u = Z.css(t, "display"), l = "none" === u ? mt.get(t, "olddisplay") || w(t.nodeName) : u, 
    "inline" === l && "none" === Z.css(t, "float") && (f.display = "inline-block")), 
    n.overflow && (f.overflow = "hidden", h.always(function() {
     f.overflow = n.overflow[0], f.overflowX = n.overflow[1], f.overflowY = n.overflow[2];
    }));
    for (i in e) if (r = e[i], Qt.exec(r)) {
     if (delete e[i], o = o || "toggle" === r, r === (d ? "hide" : "show")) {
      if ("show" !== r || !v || void 0 === v[i]) continue;
      d = !0;
     }
     p[i] = v && v[i] || Z.style(t, i);
    } else u = void 0;
    if (Z.isEmptyObject(p)) "inline" === ("none" === u ? w(t.nodeName) : u) && (f.display = u); else {
     v ? "hidden" in v && (d = v.hidden) : v = mt.access(t, "fxshow", {}), o && (v.hidden = !d), 
     d ? Z(t).show() : h.done(function() {
      Z(t).hide();
     }), h.done(function() {
      var e;
      mt.remove(t, "fxshow");
      for (e in p) Z.style(t, e, p[e]);
     });
     for (i in p) s = P(d ? v[i] : 0, i, h), i in v || (v[i] = s.start, d && (s.end = s.start, 
     s.start = "width" === i || "height" === i ? 1 : 0));
    }
   }
   function O(t, e) {
    var n, i, r, o, s;
    for (n in t) if (i = Z.camelCase(n), r = e[i], o = t[n], Z.isArray(o) && (r = o[1], 
    o = t[n] = o[0]), n !== i && (t[i] = o, delete t[n]), s = Z.cssHooks[i], s && "expand" in s) {
     o = s.expand(o), delete t[i];
     for (n in o) n in t || (t[n] = o[n], e[n] = r);
    } else e[i] = r;
   }
   function M(t, e, n) {
    var i, r, o = 0, s = ee.length, a = Z.Deferred().always(function() {
     delete c.elem;
    }), c = function() {
     if (r) return !1;
     for (var e = Jt || A(), n = Math.max(0, u.startTime + u.duration - e), i = n / u.duration || 0, o = 1 - i, s = 0, c = u.tweens.length; c > s; s++) u.tweens[s].run(o);
     return a.notifyWith(t, [ u, o, n ]), 1 > o && c ? n : (a.resolveWith(t, [ u ]), 
     !1);
    }, u = a.promise({
     elem: t,
     props: Z.extend({}, e),
     opts: Z.extend(!0, {
      specialEasing: {}
     }, n),
     originalProperties: e,
     originalOptions: n,
     startTime: Jt || A(),
     duration: n.duration,
     tweens: [],
     createTween: function(e, n) {
      var i = Z.Tween(t, u.opts, e, n, u.opts.specialEasing[e] || u.opts.easing);
      return u.tweens.push(i), i;
     },
     stop: function(e) {
      var n = 0, i = e ? u.tweens.length : 0;
      if (r) return this;
      for (r = !0; i > n; n++) u.tweens[n].run(1);
      return e ? a.resolveWith(t, [ u, e ]) : a.rejectWith(t, [ u, e ]), this;
     }
    }), l = u.props;
    for (O(l, u.opts.specialEasing); s > o; o++) if (i = ee[o].call(u, t, l, u.opts)) return i;
    return Z.map(l, P, u), Z.isFunction(u.opts.start) && u.opts.start.call(t, u), Z.fx.timer(Z.extend(c, {
     elem: t,
     anim: u,
     queue: u.opts.queue
    })), u.progress(u.opts.progress).done(u.opts.done, u.opts.complete).fail(u.opts.fail).always(u.opts.always);
   }
   function N(t) {
    return function(e, n) {
     "string" != typeof e && (n = e, e = "*");
     var i, r = 0, o = e.toLowerCase().match(ft) || [];
     if (Z.isFunction(n)) for (;i = o[r++]; ) "+" === i[0] ? (i = i.slice(1) || "*", 
     (t[i] = t[i] || []).unshift(n)) : (t[i] = t[i] || []).push(n);
    };
   }
   function R(t, e, n, i) {
    function r(a) {
     var c;
     return o[a] = !0, Z.each(t[a] || [], function(t, a) {
      var u = a(e, n, i);
      return "string" != typeof u || s || o[u] ? s ? !(c = u) : void 0 : (e.dataTypes.unshift(u), 
      r(u), !1);
     }), c;
    }
    var o = {}, s = t === be;
    return r(e.dataTypes[0]) || !o["*"] && r("*");
   }
   function H(t, e) {
    var n, i, r = Z.ajaxSettings.flatOptions || {};
    for (n in e) void 0 !== e[n] && ((r[n] ? t : i || (i = {}))[n] = e[n]);
    return i && Z.extend(!0, t, i), t;
   }
   function D(t, e, n) {
    for (var i, r, o, s, a = t.contents, c = t.dataTypes; "*" === c[0]; ) c.shift(), 
    void 0 === i && (i = t.mimeType || e.getResponseHeader("Content-Type"));
    if (i) for (r in a) if (a[r] && a[r].test(i)) {
     c.unshift(r);
     break;
    }
    if (c[0] in n) o = c[0]; else {
     for (r in n) {
      if (!c[0] || t.converters[r + " " + c[0]]) {
       o = r;
       break;
      }
      s || (s = r);
     }
     o = o || s;
    }
    return o ? (o !== c[0] && c.unshift(o), n[o]) : void 0;
   }
   function B(t, e, n, i) {
    var r, o, s, a, c, u = {}, l = t.dataTypes.slice();
    if (l[1]) for (s in t.converters) u[s.toLowerCase()] = t.converters[s];
    for (o = l.shift(); o; ) if (t.responseFields[o] && (n[t.responseFields[o]] = e), 
    !c && i && t.dataFilter && (e = t.dataFilter(e, t.dataType)), c = o, o = l.shift()) if ("*" === o) o = c; else if ("*" !== c && c !== o) {
     if (s = u[c + " " + o] || u["* " + o], !s) for (r in u) if (a = r.split(" "), a[1] === o && (s = u[c + " " + a[0]] || u["* " + a[0]])) {
      s === !0 ? s = u[r] : u[r] !== !0 && (o = a[0], l.unshift(a[1]));
      break;
     }
     if (s !== !0) if (s && t["throws"]) e = s(e); else try {
      e = s(e);
     } catch (h) {
      return {
       state: "parsererror",
       error: s ? h : "No conversion from " + c + " to " + o
      };
     }
    }
    return {
     state: "success",
     data: e
    };
   }
   function I(t, e, n, i) {
    var r;
    if (Z.isArray(e)) Z.each(e, function(e, r) {
     n || ke.test(t) ? i(t, r) : I(t + "[" + ("object" == typeof r ? e : "") + "]", r, n, i);
    }); else if (n || "object" !== Z.type(e)) i(t, e); else for (r in e) I(t + "[" + r + "]", e[r], n, i);
   }
   function q(t) {
    return Z.isWindow(t) ? t : 9 === t.nodeType && t.defaultView;
   }
   var F = [], z = F.slice, U = F.concat, V = F.push, W = F.indexOf, G = {}, X = G.toString, Y = G.hasOwnProperty, J = {}, K = t.document, Q = "2.1.3", Z = function(t, e) {
    return new Z.fn.init(t, e);
   }, tt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, et = /^-ms-/, nt = /-([\da-z])/gi, it = function(t, e) {
    return e.toUpperCase();
   };
   Z.fn = Z.prototype = {
    jquery: Q,
    constructor: Z,
    selector: "",
    length: 0,
    toArray: function() {
     return z.call(this);
    },
    get: function(t) {
     return null != t ? 0 > t ? this[t + this.length] : this[t] : z.call(this);
    },
    pushStack: function(t) {
     var e = Z.merge(this.constructor(), t);
     return e.prevObject = this, e.context = this.context, e;
    },
    each: function(t, e) {
     return Z.each(this, t, e);
    },
    map: function(t) {
     return this.pushStack(Z.map(this, function(e, n) {
      return t.call(e, n, e);
     }));
    },
    slice: function() {
     return this.pushStack(z.apply(this, arguments));
    },
    first: function() {
     return this.eq(0);
    },
    last: function() {
     return this.eq(-1);
    },
    eq: function(t) {
     var e = this.length, n = +t + (0 > t ? e : 0);
     return this.pushStack(n >= 0 && e > n ? [ this[n] ] : []);
    },
    end: function() {
     return this.prevObject || this.constructor(null);
    },
    push: V,
    sort: F.sort,
    splice: F.splice
   }, Z.extend = Z.fn.extend = function() {
    var t, e, n, i, r, o, s = arguments[0] || {}, a = 1, c = arguments.length, u = !1;
    for ("boolean" == typeof s && (u = s, s = arguments[a] || {}, a++), "object" == typeof s || Z.isFunction(s) || (s = {}), 
    a === c && (s = this, a--); c > a; a++) if (null != (t = arguments[a])) for (e in t) n = s[e], 
    i = t[e], s !== i && (u && i && (Z.isPlainObject(i) || (r = Z.isArray(i))) ? (r ? (r = !1, 
    o = n && Z.isArray(n) ? n : []) : o = n && Z.isPlainObject(n) ? n : {}, s[e] = Z.extend(u, o, i)) : void 0 !== i && (s[e] = i));
    return s;
   }, Z.extend({
    expando: "jQuery" + (Q + Math.random()).replace(/\D/g, ""),
    isReady: !0,
    error: function(t) {
     throw new Error(t);
    },
    noop: function() {},
    isFunction: function(t) {
     return "function" === Z.type(t);
    },
    isArray: Array.isArray,
    isWindow: function(t) {
     return null != t && t === t.window;
    },
    isNumeric: function(t) {
     return !Z.isArray(t) && t - parseFloat(t) + 1 >= 0;
    },
    isPlainObject: function(t) {
     return "object" !== Z.type(t) || t.nodeType || Z.isWindow(t) ? !1 : t.constructor && !Y.call(t.constructor.prototype, "isPrototypeOf") ? !1 : !0;
    },
    isEmptyObject: function(t) {
     var e;
     for (e in t) return !1;
     return !0;
    },
    type: function(t) {
     return null == t ? t + "" : "object" == typeof t || "function" == typeof t ? G[X.call(t)] || "object" : typeof t;
    },
    globalEval: function(t) {
     var e, n = eval;
     t = Z.trim(t), t && (1 === t.indexOf("use strict") ? (e = K.createElement("script"), 
     e.text = t, K.head.appendChild(e).parentNode.removeChild(e)) : n(t));
    },
    camelCase: function(t) {
     return t.replace(et, "ms-").replace(nt, it);
    },
    nodeName: function(t, e) {
     return t.nodeName && t.nodeName.toLowerCase() === e.toLowerCase();
    },
    each: function(t, e, i) {
     var r, o = 0, s = t.length, a = n(t);
     if (i) {
      if (a) for (;s > o && (r = e.apply(t[o], i), r !== !1); o++) ; else for (o in t) if (r = e.apply(t[o], i), 
      r === !1) break;
     } else if (a) for (;s > o && (r = e.call(t[o], o, t[o]), r !== !1); o++) ; else for (o in t) if (r = e.call(t[o], o, t[o]), 
     r === !1) break;
     return t;
    },
    trim: function(t) {
     return null == t ? "" : (t + "").replace(tt, "");
    },
    makeArray: function(t, e) {
     var i = e || [];
     return null != t && (n(Object(t)) ? Z.merge(i, "string" == typeof t ? [ t ] : t) : V.call(i, t)), 
     i;
    },
    inArray: function(t, e, n) {
     return null == e ? -1 : W.call(e, t, n);
    },
    merge: function(t, e) {
     for (var n = +e.length, i = 0, r = t.length; n > i; i++) t[r++] = e[i];
     return t.length = r, t;
    },
    grep: function(t, e, n) {
     for (var i, r = [], o = 0, s = t.length, a = !n; s > o; o++) i = !e(t[o], o), i !== a && r.push(t[o]);
     return r;
    },
    map: function(t, e, i) {
     var r, o = 0, s = t.length, a = n(t), c = [];
     if (a) for (;s > o; o++) r = e(t[o], o, i), null != r && c.push(r); else for (o in t) r = e(t[o], o, i), 
     null != r && c.push(r);
     return U.apply([], c);
    },
    guid: 1,
    proxy: function(t, e) {
     var n, i, r;
     return "string" == typeof e && (n = t[e], e = t, t = n), Z.isFunction(t) ? (i = z.call(arguments, 2), 
     r = function() {
      return t.apply(e || this, i.concat(z.call(arguments)));
     }, r.guid = t.guid = t.guid || Z.guid++, r) : void 0;
    },
    now: Date.now,
    support: J
   }), Z.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(t, e) {
    G["[object " + e + "]"] = e.toLowerCase();
   });
   var rt = function(t) {
    function e(t, e, n, i) {
     var r, o, s, a, c, u, h, f, d, v;
     if ((e ? e.ownerDocument || e : I) !== L && P(e), e = e || L, n = n || [], a = e.nodeType, 
     "string" != typeof t || !t || 1 !== a && 9 !== a && 11 !== a) return n;
     if (!i && M) {
      if (11 !== a && (r = yt.exec(t))) if (s = r[1]) {
       if (9 === a) {
        if (o = e.getElementById(s), !o || !o.parentNode) return n;
        if (o.id === s) return n.push(o), n;
       } else if (e.ownerDocument && (o = e.ownerDocument.getElementById(s)) && D(e, o) && o.id === s) return n.push(o), 
       n;
      } else {
       if (r[2]) return Q.apply(n, e.getElementsByTagName(t)), n;
       if ((s = r[3]) && _.getElementsByClassName) return Q.apply(n, e.getElementsByClassName(s)), 
       n;
      }
      if (_.qsa && (!N || !N.test(t))) {
       if (f = h = B, d = e, v = 1 !== a && t, 1 === a && "object" !== e.nodeName.toLowerCase()) {
        for (u = S(t), (h = e.getAttribute("id")) ? f = h.replace(wt, "\\$&") : e.setAttribute("id", f), 
        f = "[id='" + f + "'] ", c = u.length; c--; ) u[c] = f + p(u[c]);
        d = bt.test(t) && l(e.parentNode) || e, v = u.join(",");
       }
       if (v) try {
        return Q.apply(n, d.querySelectorAll(v)), n;
       } catch (g) {} finally {
        h || e.removeAttribute("id");
       }
      }
     }
     return C(t.replace(ct, "$1"), e, n, i);
    }
    function n() {
     function t(n, i) {
      return e.push(n + " ") > x.cacheLength && delete t[e.shift()], t[n + " "] = i;
     }
     var e = [];
     return t;
    }
    function i(t) {
     return t[B] = !0, t;
    }
    function r(t) {
     var e = L.createElement("div");
     try {
      return !!t(e);
     } catch (n) {
      return !1;
     } finally {
      e.parentNode && e.parentNode.removeChild(e), e = null;
     }
    }
    function o(t, e) {
     for (var n = t.split("|"), i = t.length; i--; ) x.attrHandle[n[i]] = e;
    }
    function s(t, e) {
     var n = e && t, i = n && 1 === t.nodeType && 1 === e.nodeType && (~e.sourceIndex || G) - (~t.sourceIndex || G);
     if (i) return i;
     if (n) for (;n = n.nextSibling; ) if (n === e) return -1;
     return t ? 1 : -1;
    }
    function a(t) {
     return function(e) {
      var n = e.nodeName.toLowerCase();
      return "input" === n && e.type === t;
     };
    }
    function c(t) {
     return function(e) {
      var n = e.nodeName.toLowerCase();
      return ("input" === n || "button" === n) && e.type === t;
     };
    }
    function u(t) {
     return i(function(e) {
      return e = +e, i(function(n, i) {
       for (var r, o = t([], n.length, e), s = o.length; s--; ) n[r = o[s]] && (n[r] = !(i[r] = n[r]));
      });
     });
    }
    function l(t) {
     return t && "undefined" != typeof t.getElementsByTagName && t;
    }
    function h() {}
    function p(t) {
     for (var e = 0, n = t.length, i = ""; n > e; e++) i += t[e].value;
     return i;
    }
    function f(t, e, n) {
     var i = e.dir, r = n && "parentNode" === i, o = F++;
     return e.first ? function(e, n, o) {
      for (;e = e[i]; ) if (1 === e.nodeType || r) return t(e, n, o);
     } : function(e, n, s) {
      var a, c, u = [ q, o ];
      if (s) {
       for (;e = e[i]; ) if ((1 === e.nodeType || r) && t(e, n, s)) return !0;
      } else for (;e = e[i]; ) if (1 === e.nodeType || r) {
       if (c = e[B] || (e[B] = {}), (a = c[i]) && a[0] === q && a[1] === o) return u[2] = a[2];
       if (c[i] = u, u[2] = t(e, n, s)) return !0;
      }
     };
    }
    function d(t) {
     return t.length > 1 ? function(e, n, i) {
      for (var r = t.length; r--; ) if (!t[r](e, n, i)) return !1;
      return !0;
     } : t[0];
    }
    function v(t, n, i) {
     for (var r = 0, o = n.length; o > r; r++) e(t, n[r], i);
     return i;
    }
    function g(t, e, n, i, r) {
     for (var o, s = [], a = 0, c = t.length, u = null != e; c > a; a++) (o = t[a]) && (!n || n(o, i, r)) && (s.push(o), 
     u && e.push(a));
     return s;
    }
    function m(t, e, n, r, o, s) {
     return r && !r[B] && (r = m(r)), o && !o[B] && (o = m(o, s)), i(function(i, s, a, c) {
      var u, l, h, p = [], f = [], d = s.length, m = i || v(e || "*", a.nodeType ? [ a ] : a, []), y = !t || !i && e ? m : g(m, p, t, a, c), b = n ? o || (i ? t : d || r) ? [] : s : y;
      if (n && n(y, b, a, c), r) for (u = g(b, f), r(u, [], a, c), l = u.length; l--; ) (h = u[l]) && (b[f[l]] = !(y[f[l]] = h));
      if (i) {
       if (o || t) {
        if (o) {
         for (u = [], l = b.length; l--; ) (h = b[l]) && u.push(y[l] = h);
         o(null, b = [], u, c);
        }
        for (l = b.length; l--; ) (h = b[l]) && (u = o ? tt(i, h) : p[l]) > -1 && (i[u] = !(s[u] = h));
       }
      } else b = g(b === s ? b.splice(d, b.length) : b), o ? o(null, s, b, c) : Q.apply(s, b);
     });
    }
    function y(t) {
     for (var e, n, i, r = t.length, o = x.relative[t[0].type], s = o || x.relative[" "], a = o ? 1 : 0, c = f(function(t) {
      return t === e;
     }, s, !0), u = f(function(t) {
      return tt(e, t) > -1;
     }, s, !0), l = [ function(t, n, i) {
      var r = !o && (i || n !== T) || ((e = n).nodeType ? c(t, n, i) : u(t, n, i));
      return e = null, r;
     } ]; r > a; a++) if (n = x.relative[t[a].type]) l = [ f(d(l), n) ]; else {
      if (n = x.filter[t[a].type].apply(null, t[a].matches), n[B]) {
       for (i = ++a; r > i && !x.relative[t[i].type]; i++) ;
       return m(a > 1 && d(l), a > 1 && p(t.slice(0, a - 1).concat({
        value: " " === t[a - 2].type ? "*" : ""
       })).replace(ct, "$1"), n, i > a && y(t.slice(a, i)), r > i && y(t = t.slice(i)), r > i && p(t));
      }
      l.push(n);
     }
     return d(l);
    }
    function b(t, n) {
     var r = n.length > 0, o = t.length > 0, s = function(i, s, a, c, u) {
      var l, h, p, f = 0, d = "0", v = i && [], m = [], y = T, b = i || o && x.find.TAG("*", u), w = q += null == y ? 1 : Math.random() || .1, _ = b.length;
      for (u && (T = s !== L && s); d !== _ && null != (l = b[d]); d++) {
       if (o && l) {
        for (h = 0; p = t[h++]; ) if (p(l, s, a)) {
         c.push(l);
         break;
        }
        u && (q = w);
       }
       r && ((l = !p && l) && f--, i && v.push(l));
      }
      if (f += d, r && d !== f) {
       for (h = 0; p = n[h++]; ) p(v, m, s, a);
       if (i) {
        if (f > 0) for (;d--; ) v[d] || m[d] || (m[d] = J.call(c));
        m = g(m);
       }
       Q.apply(c, m), u && !i && m.length > 0 && f + n.length > 1 && e.uniqueSort(c);
      }
      return u && (q = w, T = y), v;
     };
     return r ? i(s) : s;
    }
    var w, _, x, $, k, S, E, C, T, A, j, P, L, O, M, N, R, H, D, B = "sizzle" + 1 * new Date(), I = t.document, q = 0, F = 0, z = n(), U = n(), V = n(), W = function(t, e) {
     return t === e && (j = !0), 0;
    }, G = 1 << 31, X = {}.hasOwnProperty, Y = [], J = Y.pop, K = Y.push, Q = Y.push, Z = Y.slice, tt = function(t, e) {
     for (var n = 0, i = t.length; i > n; n++) if (t[n] === e) return n;
     return -1;
    }, et = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", nt = "[\\x20\\t\\r\\n\\f]", it = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", rt = it.replace("w", "w#"), ot = "\\[" + nt + "*(" + it + ")(?:" + nt + "*([*^$|!~]?=)" + nt + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + rt + "))|)" + nt + "*\\]", st = ":(" + it + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ot + ")*)|.*)\\)|)", at = new RegExp(nt + "+", "g"), ct = new RegExp("^" + nt + "+|((?:^|[^\\\\])(?:\\\\.)*)" + nt + "+$", "g"), ut = new RegExp("^" + nt + "*," + nt + "*"), lt = new RegExp("^" + nt + "*([>+~]|" + nt + ")" + nt + "*"), ht = new RegExp("=" + nt + "*([^\\]'\"]*?)" + nt + "*\\]", "g"), pt = new RegExp(st), ft = new RegExp("^" + rt + "$"), dt = {
     ID: new RegExp("^#(" + it + ")"),
     CLASS: new RegExp("^\\.(" + it + ")"),
     TAG: new RegExp("^(" + it.replace("w", "w*") + ")"),
     ATTR: new RegExp("^" + ot),
     PSEUDO: new RegExp("^" + st),
     CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + nt + "*(even|odd|(([+-]|)(\\d*)n|)" + nt + "*(?:([+-]|)" + nt + "*(\\d+)|))" + nt + "*\\)|)", "i"),
     bool: new RegExp("^(?:" + et + ")$", "i"),
     needsContext: new RegExp("^" + nt + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + nt + "*((?:-\\d)?\\d*)" + nt + "*\\)|)(?=[^-]|$)", "i")
    }, vt = /^(?:input|select|textarea|button)$/i, gt = /^h\d$/i, mt = /^[^{]+\{\s*\[native \w/, yt = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, bt = /[+~]/, wt = /'|\\/g, _t = new RegExp("\\\\([\\da-f]{1,6}" + nt + "?|(" + nt + ")|.)", "ig"), xt = function(t, e, n) {
     var i = "0x" + e - 65536;
     return i !== i || n ? e : 0 > i ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320);
    }, $t = function() {
     P();
    };
    try {
     Q.apply(Y = Z.call(I.childNodes), I.childNodes), Y[I.childNodes.length].nodeType;
    } catch (kt) {
     Q = {
      apply: Y.length ? function(t, e) {
       K.apply(t, Z.call(e));
      } : function(t, e) {
       for (var n = t.length, i = 0; t[n++] = e[i++]; ) ;
       t.length = n - 1;
      }
     };
    }
    _ = e.support = {}, k = e.isXML = function(t) {
     var e = t && (t.ownerDocument || t).documentElement;
     return e ? "HTML" !== e.nodeName : !1;
    }, P = e.setDocument = function(t) {
     var e, n, i = t ? t.ownerDocument || t : I;
     return i !== L && 9 === i.nodeType && i.documentElement ? (L = i, O = i.documentElement, 
     n = i.defaultView, n && n !== n.top && (n.addEventListener ? n.addEventListener("unload", $t, !1) : n.attachEvent && n.attachEvent("onunload", $t)), 
     M = !k(i), _.attributes = r(function(t) {
      return t.className = "i", !t.getAttribute("className");
     }), _.getElementsByTagName = r(function(t) {
      return t.appendChild(i.createComment("")), !t.getElementsByTagName("*").length;
     }), _.getElementsByClassName = mt.test(i.getElementsByClassName), _.getById = r(function(t) {
      return O.appendChild(t).id = B, !i.getElementsByName || !i.getElementsByName(B).length;
     }), _.getById ? (x.find.ID = function(t, e) {
      if ("undefined" != typeof e.getElementById && M) {
       var n = e.getElementById(t);
       return n && n.parentNode ? [ n ] : [];
      }
     }, x.filter.ID = function(t) {
      var e = t.replace(_t, xt);
      return function(t) {
       return t.getAttribute("id") === e;
      };
     }) : (delete x.find.ID, x.filter.ID = function(t) {
      var e = t.replace(_t, xt);
      return function(t) {
       var n = "undefined" != typeof t.getAttributeNode && t.getAttributeNode("id");
       return n && n.value === e;
      };
     }), x.find.TAG = _.getElementsByTagName ? function(t, e) {
      return "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t) : _.qsa ? e.querySelectorAll(t) : void 0;
     } : function(t, e) {
      var n, i = [], r = 0, o = e.getElementsByTagName(t);
      if ("*" === t) {
       for (;n = o[r++]; ) 1 === n.nodeType && i.push(n);
       return i;
      }
      return o;
     }, x.find.CLASS = _.getElementsByClassName && function(t, e) {
      return M ? e.getElementsByClassName(t) : void 0;
     }, R = [], N = [], (_.qsa = mt.test(i.querySelectorAll)) && (r(function(t) {
      O.appendChild(t).innerHTML = "<a id='" + B + "'></a><select id='" + B + "-\f]' msallowcapture=''><option selected=''></option></select>", 
      t.querySelectorAll("[msallowcapture^='']").length && N.push("[*^$]=" + nt + "*(?:''|\"\")"), 
      t.querySelectorAll("[selected]").length || N.push("\\[" + nt + "*(?:value|" + et + ")"), 
      t.querySelectorAll("[id~=" + B + "-]").length || N.push("~="), t.querySelectorAll(":checked").length || N.push(":checked"), 
      t.querySelectorAll("a#" + B + "+*").length || N.push(".#.+[+~]");
     }), r(function(t) {
      var e = i.createElement("input");
      e.setAttribute("type", "hidden"), t.appendChild(e).setAttribute("name", "D"), t.querySelectorAll("[name=d]").length && N.push("name" + nt + "*[*^$|!~]?="), 
      t.querySelectorAll(":enabled").length || N.push(":enabled", ":disabled"), t.querySelectorAll("*,:x"), 
      N.push(",.*:");
     })), (_.matchesSelector = mt.test(H = O.matches || O.webkitMatchesSelector || O.mozMatchesSelector || O.oMatchesSelector || O.msMatchesSelector)) && r(function(t) {
      _.disconnectedMatch = H.call(t, "div"), H.call(t, "[s!='']:x"), R.push("!=", st);
     }), N = N.length && new RegExp(N.join("|")), R = R.length && new RegExp(R.join("|")), 
     e = mt.test(O.compareDocumentPosition), D = e || mt.test(O.contains) ? function(t, e) {
      var n = 9 === t.nodeType ? t.documentElement : t, i = e && e.parentNode;
      return t === i || !(!i || 1 !== i.nodeType || !(n.contains ? n.contains(i) : t.compareDocumentPosition && 16 & t.compareDocumentPosition(i)));
     } : function(t, e) {
      if (e) for (;e = e.parentNode; ) if (e === t) return !0;
      return !1;
     }, W = e ? function(t, e) {
      if (t === e) return j = !0, 0;
      var n = !t.compareDocumentPosition - !e.compareDocumentPosition;
      return n ? n : (n = (t.ownerDocument || t) === (e.ownerDocument || e) ? t.compareDocumentPosition(e) : 1, 
      1 & n || !_.sortDetached && e.compareDocumentPosition(t) === n ? t === i || t.ownerDocument === I && D(I, t) ? -1 : e === i || e.ownerDocument === I && D(I, e) ? 1 : A ? tt(A, t) - tt(A, e) : 0 : 4 & n ? -1 : 1);
     } : function(t, e) {
      if (t === e) return j = !0, 0;
      var n, r = 0, o = t.parentNode, a = e.parentNode, c = [ t ], u = [ e ];
      if (!o || !a) return t === i ? -1 : e === i ? 1 : o ? -1 : a ? 1 : A ? tt(A, t) - tt(A, e) : 0;
      if (o === a) return s(t, e);
      for (n = t; n = n.parentNode; ) c.unshift(n);
      for (n = e; n = n.parentNode; ) u.unshift(n);
      for (;c[r] === u[r]; ) r++;
      return r ? s(c[r], u[r]) : c[r] === I ? -1 : u[r] === I ? 1 : 0;
     }, i) : L;
    }, e.matches = function(t, n) {
     return e(t, null, null, n);
    }, e.matchesSelector = function(t, n) {
     if ((t.ownerDocument || t) !== L && P(t), n = n.replace(ht, "='$1']"), !(!_.matchesSelector || !M || R && R.test(n) || N && N.test(n))) try {
      var i = H.call(t, n);
      if (i || _.disconnectedMatch || t.document && 11 !== t.document.nodeType) return i;
     } catch (r) {}
     return e(n, L, null, [ t ]).length > 0;
    }, e.contains = function(t, e) {
     return (t.ownerDocument || t) !== L && P(t), D(t, e);
    }, e.attr = function(t, e) {
     (t.ownerDocument || t) !== L && P(t);
     var n = x.attrHandle[e.toLowerCase()], i = n && X.call(x.attrHandle, e.toLowerCase()) ? n(t, e, !M) : void 0;
     return void 0 !== i ? i : _.attributes || !M ? t.getAttribute(e) : (i = t.getAttributeNode(e)) && i.specified ? i.value : null;
    }, e.error = function(t) {
     throw new Error("Syntax error, unrecognized expression: " + t);
    }, e.uniqueSort = function(t) {
     var e, n = [], i = 0, r = 0;
     if (j = !_.detectDuplicates, A = !_.sortStable && t.slice(0), t.sort(W), j) {
      for (;e = t[r++]; ) e === t[r] && (i = n.push(r));
      for (;i--; ) t.splice(n[i], 1);
     }
     return A = null, t;
    }, $ = e.getText = function(t) {
     var e, n = "", i = 0, r = t.nodeType;
     if (r) {
      if (1 === r || 9 === r || 11 === r) {
       if ("string" == typeof t.textContent) return t.textContent;
       for (t = t.firstChild; t; t = t.nextSibling) n += $(t);
      } else if (3 === r || 4 === r) return t.nodeValue;
     } else for (;e = t[i++]; ) n += $(e);
     return n;
    }, x = e.selectors = {
     cacheLength: 50,
     createPseudo: i,
     match: dt,
     attrHandle: {},
     find: {},
     relative: {
      ">": {
       dir: "parentNode",
       first: !0
      },
      " ": {
       dir: "parentNode"
      },
      "+": {
       dir: "previousSibling",
       first: !0
      },
      "~": {
       dir: "previousSibling"
      }
     },
     preFilter: {
      ATTR: function(t) {
       return t[1] = t[1].replace(_t, xt), t[3] = (t[3] || t[4] || t[5] || "").replace(_t, xt), 
       "~=" === t[2] && (t[3] = " " + t[3] + " "), t.slice(0, 4);
      },
      CHILD: function(t) {
       return t[1] = t[1].toLowerCase(), "nth" === t[1].slice(0, 3) ? (t[3] || e.error(t[0]), 
       t[4] = +(t[4] ? t[5] + (t[6] || 1) : 2 * ("even" === t[3] || "odd" === t[3])), t[5] = +(t[7] + t[8] || "odd" === t[3])) : t[3] && e.error(t[0]), 
       t;
      },
      PSEUDO: function(t) {
       var e, n = !t[6] && t[2];
       return dt.CHILD.test(t[0]) ? null : (t[3] ? t[2] = t[4] || t[5] || "" : n && pt.test(n) && (e = S(n, !0)) && (e = n.indexOf(")", n.length - e) - n.length) && (t[0] = t[0].slice(0, e), 
       t[2] = n.slice(0, e)), t.slice(0, 3));
      }
     },
     filter: {
      TAG: function(t) {
       var e = t.replace(_t, xt).toLowerCase();
       return "*" === t ? function() {
        return !0;
       } : function(t) {
        return t.nodeName && t.nodeName.toLowerCase() === e;
       };
      },
      CLASS: function(t) {
       var e = z[t + " "];
       return e || (e = new RegExp("(^|" + nt + ")" + t + "(" + nt + "|$)")) && z(t, function(t) {
        return e.test("string" == typeof t.className && t.className || "undefined" != typeof t.getAttribute && t.getAttribute("class") || "");
       });
      },
      ATTR: function(t, n, i) {
       return function(r) {
        var o = e.attr(r, t);
        return null == o ? "!=" === n : n ? (o += "", "=" === n ? o === i : "!=" === n ? o !== i : "^=" === n ? i && 0 === o.indexOf(i) : "*=" === n ? i && o.indexOf(i) > -1 : "$=" === n ? i && o.slice(-i.length) === i : "~=" === n ? (" " + o.replace(at, " ") + " ").indexOf(i) > -1 : "|=" === n ? o === i || o.slice(0, i.length + 1) === i + "-" : !1) : !0;
       };
      },
      CHILD: function(t, e, n, i, r) {
       var o = "nth" !== t.slice(0, 3), s = "last" !== t.slice(-4), a = "of-type" === e;
       return 1 === i && 0 === r ? function(t) {
        return !!t.parentNode;
       } : function(e, n, c) {
        var u, l, h, p, f, d, v = o !== s ? "nextSibling" : "previousSibling", g = e.parentNode, m = a && e.nodeName.toLowerCase(), y = !c && !a;
        if (g) {
         if (o) {
          for (;v; ) {
           for (h = e; h = h[v]; ) if (a ? h.nodeName.toLowerCase() === m : 1 === h.nodeType) return !1;
           d = v = "only" === t && !d && "nextSibling";
          }
          return !0;
         }
         if (d = [ s ? g.firstChild : g.lastChild ], s && y) {
          for (l = g[B] || (g[B] = {}), u = l[t] || [], f = u[0] === q && u[1], p = u[0] === q && u[2], 
          h = f && g.childNodes[f]; h = ++f && h && h[v] || (p = f = 0) || d.pop(); ) if (1 === h.nodeType && ++p && h === e) {
           l[t] = [ q, f, p ];
           break;
          }
         } else if (y && (u = (e[B] || (e[B] = {}))[t]) && u[0] === q) p = u[1]; else for (;(h = ++f && h && h[v] || (p = f = 0) || d.pop()) && ((a ? h.nodeName.toLowerCase() !== m : 1 !== h.nodeType) || !++p || (y && ((h[B] || (h[B] = {}))[t] = [ q, p ]), 
         h !== e)); ) ;
         return p -= r, p === i || p % i === 0 && p / i >= 0;
        }
       };
      },
      PSEUDO: function(t, n) {
       var r, o = x.pseudos[t] || x.setFilters[t.toLowerCase()] || e.error("unsupported pseudo: " + t);
       return o[B] ? o(n) : o.length > 1 ? (r = [ t, t, "", n ], x.setFilters.hasOwnProperty(t.toLowerCase()) ? i(function(t, e) {
        for (var i, r = o(t, n), s = r.length; s--; ) i = tt(t, r[s]), t[i] = !(e[i] = r[s]);
       }) : function(t) {
        return o(t, 0, r);
       }) : o;
      }
     },
     pseudos: {
      not: i(function(t) {
       var e = [], n = [], r = E(t.replace(ct, "$1"));
       return r[B] ? i(function(t, e, n, i) {
        for (var o, s = r(t, null, i, []), a = t.length; a--; ) (o = s[a]) && (t[a] = !(e[a] = o));
       }) : function(t, i, o) {
        return e[0] = t, r(e, null, o, n), e[0] = null, !n.pop();
       };
      }),
      has: i(function(t) {
       return function(n) {
        return e(t, n).length > 0;
       };
      }),
      contains: i(function(t) {
       return t = t.replace(_t, xt), function(e) {
        return (e.textContent || e.innerText || $(e)).indexOf(t) > -1;
       };
      }),
      lang: i(function(t) {
       return ft.test(t || "") || e.error("unsupported lang: " + t), t = t.replace(_t, xt).toLowerCase(), 
       function(e) {
        var n;
        do if (n = M ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return n = n.toLowerCase(), 
        n === t || 0 === n.indexOf(t + "-"); while ((e = e.parentNode) && 1 === e.nodeType);
        return !1;
       };
      }),
      target: function(e) {
       var n = t.location && t.location.hash;
       return n && n.slice(1) === e.id;
      },
      root: function(t) {
       return t === O;
      },
      focus: function(t) {
       return t === L.activeElement && (!L.hasFocus || L.hasFocus()) && !!(t.type || t.href || ~t.tabIndex);
      },
      enabled: function(t) {
       return t.disabled === !1;
      },
      disabled: function(t) {
       return t.disabled === !0;
      },
      checked: function(t) {
       var e = t.nodeName.toLowerCase();
       return "input" === e && !!t.checked || "option" === e && !!t.selected;
      },
      selected: function(t) {
       return t.parentNode && t.parentNode.selectedIndex, t.selected === !0;
      },
      empty: function(t) {
       for (t = t.firstChild; t; t = t.nextSibling) if (t.nodeType < 6) return !1;
       return !0;
      },
      parent: function(t) {
       return !x.pseudos.empty(t);
      },
      header: function(t) {
       return gt.test(t.nodeName);
      },
      input: function(t) {
       return vt.test(t.nodeName);
      },
      button: function(t) {
       var e = t.nodeName.toLowerCase();
       return "input" === e && "button" === t.type || "button" === e;
      },
      text: function(t) {
       var e;
       return "input" === t.nodeName.toLowerCase() && "text" === t.type && (null == (e = t.getAttribute("type")) || "text" === e.toLowerCase());
      },
      first: u(function() {
       return [ 0 ];
      }),
      last: u(function(t, e) {
       return [ e - 1 ];
      }),
      eq: u(function(t, e, n) {
       return [ 0 > n ? n + e : n ];
      }),
      even: u(function(t, e) {
       for (var n = 0; e > n; n += 2) t.push(n);
       return t;
      }),
      odd: u(function(t, e) {
       for (var n = 1; e > n; n += 2) t.push(n);
       return t;
      }),
      lt: u(function(t, e, n) {
       for (var i = 0 > n ? n + e : n; --i >= 0; ) t.push(i);
       return t;
      }),
      gt: u(function(t, e, n) {
       for (var i = 0 > n ? n + e : n; ++i < e; ) t.push(i);
       return t;
      })
     }
    }, x.pseudos.nth = x.pseudos.eq;
    for (w in {
     radio: !0,
     checkbox: !0,
     file: !0,
     password: !0,
     image: !0
    }) x.pseudos[w] = a(w);
    for (w in {
     submit: !0,
     reset: !0
    }) x.pseudos[w] = c(w);
    return h.prototype = x.filters = x.pseudos, x.setFilters = new h(), S = e.tokenize = function(t, n) {
     var i, r, o, s, a, c, u, l = U[t + " "];
     if (l) return n ? 0 : l.slice(0);
     for (a = t, c = [], u = x.preFilter; a; ) {
      (!i || (r = ut.exec(a))) && (r && (a = a.slice(r[0].length) || a), c.push(o = [])), 
      i = !1, (r = lt.exec(a)) && (i = r.shift(), o.push({
       value: i,
       type: r[0].replace(ct, " ")
      }), a = a.slice(i.length));
      for (s in x.filter) !(r = dt[s].exec(a)) || u[s] && !(r = u[s](r)) || (i = r.shift(), 
      o.push({
       value: i,
       type: s,
       matches: r
      }), a = a.slice(i.length));
      if (!i) break;
     }
     return n ? a.length : a ? e.error(t) : U(t, c).slice(0);
    }, E = e.compile = function(t, e) {
     var n, i = [], r = [], o = V[t + " "];
     if (!o) {
      for (e || (e = S(t)), n = e.length; n--; ) o = y(e[n]), o[B] ? i.push(o) : r.push(o);
      o = V(t, b(r, i)), o.selector = t;
     }
     return o;
    }, C = e.select = function(t, e, n, i) {
     var r, o, s, a, c, u = "function" == typeof t && t, h = !i && S(t = u.selector || t);
     if (n = n || [], 1 === h.length) {
      if (o = h[0] = h[0].slice(0), o.length > 2 && "ID" === (s = o[0]).type && _.getById && 9 === e.nodeType && M && x.relative[o[1].type]) {
       if (e = (x.find.ID(s.matches[0].replace(_t, xt), e) || [])[0], !e) return n;
       u && (e = e.parentNode), t = t.slice(o.shift().value.length);
      }
      for (r = dt.needsContext.test(t) ? 0 : o.length; r-- && (s = o[r], !x.relative[a = s.type]); ) if ((c = x.find[a]) && (i = c(s.matches[0].replace(_t, xt), bt.test(o[0].type) && l(e.parentNode) || e))) {
       if (o.splice(r, 1), t = i.length && p(o), !t) return Q.apply(n, i), n;
       break;
      }
     }
     return (u || E(t, h))(i, e, !M, n, bt.test(t) && l(e.parentNode) || e), n;
    }, _.sortStable = B.split("").sort(W).join("") === B, _.detectDuplicates = !!j, 
    P(), _.sortDetached = r(function(t) {
     return 1 & t.compareDocumentPosition(L.createElement("div"));
    }), r(function(t) {
     return t.innerHTML = "<a href='#'></a>", "#" === t.firstChild.getAttribute("href");
    }) || o("type|href|height|width", function(t, e, n) {
     return n ? void 0 : t.getAttribute(e, "type" === e.toLowerCase() ? 1 : 2);
    }), _.attributes && r(function(t) {
     return t.innerHTML = "<input/>", t.firstChild.setAttribute("value", ""), "" === t.firstChild.getAttribute("value");
    }) || o("value", function(t, e, n) {
     return n || "input" !== t.nodeName.toLowerCase() ? void 0 : t.defaultValue;
    }), r(function(t) {
     return null == t.getAttribute("disabled");
    }) || o(et, function(t, e, n) {
     var i;
     return n ? void 0 : t[e] === !0 ? e.toLowerCase() : (i = t.getAttributeNode(e)) && i.specified ? i.value : null;
    }), e;
   }(t);
   Z.find = rt, Z.expr = rt.selectors, Z.expr[":"] = Z.expr.pseudos, Z.unique = rt.uniqueSort, 
   Z.text = rt.getText, Z.isXMLDoc = rt.isXML, Z.contains = rt.contains;
   var ot = Z.expr.match.needsContext, st = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, at = /^.[^:#\[\.,]*$/;
   Z.filter = function(t, e, n) {
    var i = e[0];
    return n && (t = ":not(" + t + ")"), 1 === e.length && 1 === i.nodeType ? Z.find.matchesSelector(i, t) ? [ i ] : [] : Z.find.matches(t, Z.grep(e, function(t) {
     return 1 === t.nodeType;
    }));
   }, Z.fn.extend({
    find: function(t) {
     var e, n = this.length, i = [], r = this;
     if ("string" != typeof t) return this.pushStack(Z(t).filter(function() {
      for (e = 0; n > e; e++) if (Z.contains(r[e], this)) return !0;
     }));
     for (e = 0; n > e; e++) Z.find(t, r[e], i);
     return i = this.pushStack(n > 1 ? Z.unique(i) : i), i.selector = this.selector ? this.selector + " " + t : t, 
     i;
    },
    filter: function(t) {
     return this.pushStack(i(this, t || [], !1));
    },
    not: function(t) {
     return this.pushStack(i(this, t || [], !0));
    },
    is: function(t) {
     return !!i(this, "string" == typeof t && ot.test(t) ? Z(t) : t || [], !1).length;
    }
   });
   var ct, ut = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, lt = Z.fn.init = function(t, e) {
    var n, i;
    if (!t) return this;
    if ("string" == typeof t) {
     if (n = "<" === t[0] && ">" === t[t.length - 1] && t.length >= 3 ? [ null, t, null ] : ut.exec(t), 
     !n || !n[1] && e) return !e || e.jquery ? (e || ct).find(t) : this.constructor(e).find(t);
     if (n[1]) {
      if (e = e instanceof Z ? e[0] : e, Z.merge(this, Z.parseHTML(n[1], e && e.nodeType ? e.ownerDocument || e : K, !0)), 
      st.test(n[1]) && Z.isPlainObject(e)) for (n in e) Z.isFunction(this[n]) ? this[n](e[n]) : this.attr(n, e[n]);
      return this;
     }
     return i = K.getElementById(n[2]), i && i.parentNode && (this.length = 1, this[0] = i), 
     this.context = K, this.selector = t, this;
    }
    return t.nodeType ? (this.context = this[0] = t, this.length = 1, this) : Z.isFunction(t) ? "undefined" != typeof ct.ready ? ct.ready(t) : t(Z) : (void 0 !== t.selector && (this.selector = t.selector, 
    this.context = t.context), Z.makeArray(t, this));
   };
   lt.prototype = Z.fn, ct = Z(K);
   var ht = /^(?:parents|prev(?:Until|All))/, pt = {
    children: !0,
    contents: !0,
    next: !0,
    prev: !0
   };
   Z.extend({
    dir: function(t, e, n) {
     for (var i = [], r = void 0 !== n; (t = t[e]) && 9 !== t.nodeType; ) if (1 === t.nodeType) {
      if (r && Z(t).is(n)) break;
      i.push(t);
     }
     return i;
    },
    sibling: function(t, e) {
     for (var n = []; t; t = t.nextSibling) 1 === t.nodeType && t !== e && n.push(t);
     return n;
    }
   }), Z.fn.extend({
    has: function(t) {
     var e = Z(t, this), n = e.length;
     return this.filter(function() {
      for (var t = 0; n > t; t++) if (Z.contains(this, e[t])) return !0;
     });
    },
    closest: function(t, e) {
     for (var n, i = 0, r = this.length, o = [], s = ot.test(t) || "string" != typeof t ? Z(t, e || this.context) : 0; r > i; i++) for (n = this[i]; n && n !== e; n = n.parentNode) if (n.nodeType < 11 && (s ? s.index(n) > -1 : 1 === n.nodeType && Z.find.matchesSelector(n, t))) {
      o.push(n);
      break;
     }
     return this.pushStack(o.length > 1 ? Z.unique(o) : o);
    },
    index: function(t) {
     return t ? "string" == typeof t ? W.call(Z(t), this[0]) : W.call(this, t.jquery ? t[0] : t) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
    },
    add: function(t, e) {
     return this.pushStack(Z.unique(Z.merge(this.get(), Z(t, e))));
    },
    addBack: function(t) {
     return this.add(null == t ? this.prevObject : this.prevObject.filter(t));
    }
   }), Z.each({
    parent: function(t) {
     var e = t.parentNode;
     return e && 11 !== e.nodeType ? e : null;
    },
    parents: function(t) {
     return Z.dir(t, "parentNode");
    },
    parentsUntil: function(t, e, n) {
     return Z.dir(t, "parentNode", n);
    },
    next: function(t) {
     return r(t, "nextSibling");
    },
    prev: function(t) {
     return r(t, "previousSibling");
    },
    nextAll: function(t) {
     return Z.dir(t, "nextSibling");
    },
    prevAll: function(t) {
     return Z.dir(t, "previousSibling");
    },
    nextUntil: function(t, e, n) {
     return Z.dir(t, "nextSibling", n);
    },
    prevUntil: function(t, e, n) {
     return Z.dir(t, "previousSibling", n);
    },
    siblings: function(t) {
     return Z.sibling((t.parentNode || {}).firstChild, t);
    },
    children: function(t) {
     return Z.sibling(t.firstChild);
    },
    contents: function(t) {
     return t.contentDocument || Z.merge([], t.childNodes);
    }
   }, function(t, e) {
    Z.fn[t] = function(n, i) {
     var r = Z.map(this, e, n);
     return "Until" !== t.slice(-5) && (i = n), i && "string" == typeof i && (r = Z.filter(i, r)), 
     this.length > 1 && (pt[t] || Z.unique(r), ht.test(t) && r.reverse()), this.pushStack(r);
    };
   });
   var ft = /\S+/g, dt = {};
   Z.Callbacks = function(t) {
    t = "string" == typeof t ? dt[t] || o(t) : Z.extend({}, t);
    var e, n, i, r, s, a, c = [], u = !t.once && [], l = function(o) {
     for (e = t.memory && o, n = !0, a = r || 0, r = 0, s = c.length, i = !0; c && s > a; a++) if (c[a].apply(o[0], o[1]) === !1 && t.stopOnFalse) {
      e = !1;
      break;
     }
     i = !1, c && (u ? u.length && l(u.shift()) : e ? c = [] : h.disable());
    }, h = {
     add: function() {
      if (c) {
       var n = c.length;
       !function o(e) {
        Z.each(e, function(e, n) {
         var i = Z.type(n);
         "function" === i ? t.unique && h.has(n) || c.push(n) : n && n.length && "string" !== i && o(n);
        });
       }(arguments), i ? s = c.length : e && (r = n, l(e));
      }
      return this;
     },
     remove: function() {
      return c && Z.each(arguments, function(t, e) {
       for (var n; (n = Z.inArray(e, c, n)) > -1; ) c.splice(n, 1), i && (s >= n && s--, 
       a >= n && a--);
      }), this;
     },
     has: function(t) {
      return t ? Z.inArray(t, c) > -1 : !(!c || !c.length);
     },
     empty: function() {
      return c = [], s = 0, this;
     },
     disable: function() {
      return c = u = e = void 0, this;
     },
     disabled: function() {
      return !c;
     },
     lock: function() {
      return u = void 0, e || h.disable(), this;
     },
     locked: function() {
      return !u;
     },
     fireWith: function(t, e) {
      return !c || n && !u || (e = e || [], e = [ t, e.slice ? e.slice() : e ], i ? u.push(e) : l(e)), 
      this;
     },
     fire: function() {
      return h.fireWith(this, arguments), this;
     },
     fired: function() {
      return !!n;
     }
    };
    return h;
   }, Z.extend({
    Deferred: function(t) {
     var e = [ [ "resolve", "done", Z.Callbacks("once memory"), "resolved" ], [ "reject", "fail", Z.Callbacks("once memory"), "rejected" ], [ "notify", "progress", Z.Callbacks("memory") ] ], n = "pending", i = {
      state: function() {
       return n;
      },
      always: function() {
       return r.done(arguments).fail(arguments), this;
      },
      then: function() {
       var t = arguments;
       return Z.Deferred(function(n) {
        Z.each(e, function(e, o) {
         var s = Z.isFunction(t[e]) && t[e];
         r[o[1]](function() {
          var t = s && s.apply(this, arguments);
          t && Z.isFunction(t.promise) ? t.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o[0] + "With"](this === i ? n.promise() : this, s ? [ t ] : arguments);
         });
        }), t = null;
       }).promise();
      },
      promise: function(t) {
       return null != t ? Z.extend(t, i) : i;
      }
     }, r = {};
     return i.pipe = i.then, Z.each(e, function(t, o) {
      var s = o[2], a = o[3];
      i[o[1]] = s.add, a && s.add(function() {
       n = a;
      }, e[1 ^ t][2].disable, e[2][2].lock), r[o[0]] = function() {
       return r[o[0] + "With"](this === r ? i : this, arguments), this;
      }, r[o[0] + "With"] = s.fireWith;
     }), i.promise(r), t && t.call(r, r), r;
    },
    when: function(t) {
     var e, n, i, r = 0, o = z.call(arguments), s = o.length, a = 1 !== s || t && Z.isFunction(t.promise) ? s : 0, c = 1 === a ? t : Z.Deferred(), u = function(t, n, i) {
      return function(r) {
       n[t] = this, i[t] = arguments.length > 1 ? z.call(arguments) : r, i === e ? c.notifyWith(n, i) : --a || c.resolveWith(n, i);
      };
     };
     if (s > 1) for (e = new Array(s), n = new Array(s), i = new Array(s); s > r; r++) o[r] && Z.isFunction(o[r].promise) ? o[r].promise().done(u(r, i, o)).fail(c.reject).progress(u(r, n, e)) : --a;
     return a || c.resolveWith(i, o), c.promise();
    }
   });
   var vt;
   Z.fn.ready = function(t) {
    return Z.ready.promise().done(t), this;
   }, Z.extend({
    isReady: !1,
    readyWait: 1,
    holdReady: function(t) {
     t ? Z.readyWait++ : Z.ready(!0);
    },
    ready: function(t) {
     (t === !0 ? --Z.readyWait : Z.isReady) || (Z.isReady = !0, t !== !0 && --Z.readyWait > 0 || (vt.resolveWith(K, [ Z ]), 
     Z.fn.triggerHandler && (Z(K).triggerHandler("ready"), Z(K).off("ready"))));
    }
   }), Z.ready.promise = function(e) {
    return vt || (vt = Z.Deferred(), "complete" === K.readyState ? setTimeout(Z.ready) : (K.addEventListener("DOMContentLoaded", s, !1), 
    t.addEventListener("load", s, !1))), vt.promise(e);
   }, Z.ready.promise();
   var gt = Z.access = function(t, e, n, i, r, o, s) {
    var a = 0, c = t.length, u = null == n;
    if ("object" === Z.type(n)) {
     r = !0;
     for (a in n) Z.access(t, e, a, n[a], !0, o, s);
    } else if (void 0 !== i && (r = !0, Z.isFunction(i) || (s = !0), u && (s ? (e.call(t, i), 
    e = null) : (u = e, e = function(t, e, n) {
     return u.call(Z(t), n);
    })), e)) for (;c > a; a++) e(t[a], n, s ? i : i.call(t[a], a, e(t[a], n)));
    return r ? t : u ? e.call(t) : c ? e(t[0], n) : o;
   };
   Z.acceptData = function(t) {
    return 1 === t.nodeType || 9 === t.nodeType || !+t.nodeType;
   }, a.uid = 1, a.accepts = Z.acceptData, a.prototype = {
    key: function(t) {
     if (!a.accepts(t)) return 0;
     var e = {}, n = t[this.expando];
     if (!n) {
      n = a.uid++;
      try {
       e[this.expando] = {
        value: n
       }, Object.defineProperties(t, e);
      } catch (i) {
       e[this.expando] = n, Z.extend(t, e);
      }
     }
     return this.cache[n] || (this.cache[n] = {}), n;
    },
    set: function(t, e, n) {
     var i, r = this.key(t), o = this.cache[r];
     if ("string" == typeof e) o[e] = n; else if (Z.isEmptyObject(o)) Z.extend(this.cache[r], e); else for (i in e) o[i] = e[i];
     return o;
    },
    get: function(t, e) {
     var n = this.cache[this.key(t)];
     return void 0 === e ? n : n[e];
    },
    access: function(t, e, n) {
     var i;
     return void 0 === e || e && "string" == typeof e && void 0 === n ? (i = this.get(t, e), 
     void 0 !== i ? i : this.get(t, Z.camelCase(e))) : (this.set(t, e, n), void 0 !== n ? n : e);
    },
    remove: function(t, e) {
     var n, i, r, o = this.key(t), s = this.cache[o];
     if (void 0 === e) this.cache[o] = {}; else {
      Z.isArray(e) ? i = e.concat(e.map(Z.camelCase)) : (r = Z.camelCase(e), e in s ? i = [ e, r ] : (i = r, 
      i = i in s ? [ i ] : i.match(ft) || [])), n = i.length;
      for (;n--; ) delete s[i[n]];
     }
    },
    hasData: function(t) {
     return !Z.isEmptyObject(this.cache[t[this.expando]] || {});
    },
    discard: function(t) {
     t[this.expando] && delete this.cache[t[this.expando]];
    }
   };
   var mt = new a(), yt = new a(), bt = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, wt = /([A-Z])/g;
   Z.extend({
    hasData: function(t) {
     return yt.hasData(t) || mt.hasData(t);
    },
    data: function(t, e, n) {
     return yt.access(t, e, n);
    },
    removeData: function(t, e) {
     yt.remove(t, e);
    },
    _data: function(t, e, n) {
     return mt.access(t, e, n);
    },
    _removeData: function(t, e) {
     mt.remove(t, e);
    }
   }), Z.fn.extend({
    data: function(t, e) {
     var n, i, r, o = this[0], s = o && o.attributes;
     if (void 0 === t) {
      if (this.length && (r = yt.get(o), 1 === o.nodeType && !mt.get(o, "hasDataAttrs"))) {
       for (n = s.length; n--; ) s[n] && (i = s[n].name, 0 === i.indexOf("data-") && (i = Z.camelCase(i.slice(5)), 
       c(o, i, r[i])));
       mt.set(o, "hasDataAttrs", !0);
      }
      return r;
     }
     return "object" == typeof t ? this.each(function() {
      yt.set(this, t);
     }) : gt(this, function(e) {
      var n, i = Z.camelCase(t);
      if (o && void 0 === e) {
       if (n = yt.get(o, t), void 0 !== n) return n;
       if (n = yt.get(o, i), void 0 !== n) return n;
       if (n = c(o, i, void 0), void 0 !== n) return n;
      } else this.each(function() {
       var n = yt.get(this, i);
       yt.set(this, i, e), -1 !== t.indexOf("-") && void 0 !== n && yt.set(this, t, e);
      });
     }, null, e, arguments.length > 1, null, !0);
    },
    removeData: function(t) {
     return this.each(function() {
      yt.remove(this, t);
     });
    }
   }), Z.extend({
    queue: function(t, e, n) {
     var i;
     return t ? (e = (e || "fx") + "queue", i = mt.get(t, e), n && (!i || Z.isArray(n) ? i = mt.access(t, e, Z.makeArray(n)) : i.push(n)), 
     i || []) : void 0;
    },
    dequeue: function(t, e) {
     e = e || "fx";
     var n = Z.queue(t, e), i = n.length, r = n.shift(), o = Z._queueHooks(t, e), s = function() {
      Z.dequeue(t, e);
     };
     "inprogress" === r && (r = n.shift(), i--), r && ("fx" === e && n.unshift("inprogress"), 
     delete o.stop, r.call(t, s, o)), !i && o && o.empty.fire();
    },
    _queueHooks: function(t, e) {
     var n = e + "queueHooks";
     return mt.get(t, n) || mt.access(t, n, {
      empty: Z.Callbacks("once memory").add(function() {
       mt.remove(t, [ e + "queue", n ]);
      })
     });
    }
   }), Z.fn.extend({
    queue: function(t, e) {
     var n = 2;
     return "string" != typeof t && (e = t, t = "fx", n--), arguments.length < n ? Z.queue(this[0], t) : void 0 === e ? this : this.each(function() {
      var n = Z.queue(this, t, e);
      Z._queueHooks(this, t), "fx" === t && "inprogress" !== n[0] && Z.dequeue(this, t);
     });
    },
    dequeue: function(t) {
     return this.each(function() {
      Z.dequeue(this, t);
     });
    },
    clearQueue: function(t) {
     return this.queue(t || "fx", []);
    },
    promise: function(t, e) {
     var n, i = 1, r = Z.Deferred(), o = this, s = this.length, a = function() {
      --i || r.resolveWith(o, [ o ]);
     };
     for ("string" != typeof t && (e = t, t = void 0), t = t || "fx"; s--; ) n = mt.get(o[s], t + "queueHooks"), 
     n && n.empty && (i++, n.empty.add(a));
     return a(), r.promise(e);
    }
   });
   var _t = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, xt = [ "Top", "Right", "Bottom", "Left" ], $t = function(t, e) {
    return t = e || t, "none" === Z.css(t, "display") || !Z.contains(t.ownerDocument, t);
   }, kt = /^(?:checkbox|radio)$/i;
   !function() {
    var t = K.createDocumentFragment(), e = t.appendChild(K.createElement("div")), n = K.createElement("input");
    n.setAttribute("type", "radio"), n.setAttribute("checked", "checked"), n.setAttribute("name", "t"), 
    e.appendChild(n), J.checkClone = e.cloneNode(!0).cloneNode(!0).lastChild.checked, 
    e.innerHTML = "<textarea>x</textarea>", J.noCloneChecked = !!e.cloneNode(!0).lastChild.defaultValue;
   }();
   var St = "undefined";
   J.focusinBubbles = "onfocusin" in t;
   var Et = /^key/, Ct = /^(?:mouse|pointer|contextmenu)|click/, Tt = /^(?:focusinfocus|focusoutblur)$/, At = /^([^.]*)(?:\.(.+)|)$/;
   Z.event = {
    global: {},
    add: function(t, e, n, i, r) {
     var o, s, a, c, u, l, h, p, f, d, v, g = mt.get(t);
     if (g) for (n.handler && (o = n, n = o.handler, r = o.selector), n.guid || (n.guid = Z.guid++), 
     (c = g.events) || (c = g.events = {}), (s = g.handle) || (s = g.handle = function(e) {
      return typeof Z !== St && Z.event.triggered !== e.type ? Z.event.dispatch.apply(t, arguments) : void 0;
     }), e = (e || "").match(ft) || [ "" ], u = e.length; u--; ) a = At.exec(e[u]) || [], 
     f = v = a[1], d = (a[2] || "").split(".").sort(), f && (h = Z.event.special[f] || {}, 
     f = (r ? h.delegateType : h.bindType) || f, h = Z.event.special[f] || {}, l = Z.extend({
      type: f,
      origType: v,
      data: i,
      handler: n,
      guid: n.guid,
      selector: r,
      needsContext: r && Z.expr.match.needsContext.test(r),
      namespace: d.join(".")
     }, o), (p = c[f]) || (p = c[f] = [], p.delegateCount = 0, h.setup && h.setup.call(t, i, d, s) !== !1 || t.addEventListener && t.addEventListener(f, s, !1)), 
     h.add && (h.add.call(t, l), l.handler.guid || (l.handler.guid = n.guid)), r ? p.splice(p.delegateCount++, 0, l) : p.push(l), 
     Z.event.global[f] = !0);
    },
    remove: function(t, e, n, i, r) {
     var o, s, a, c, u, l, h, p, f, d, v, g = mt.hasData(t) && mt.get(t);
     if (g && (c = g.events)) {
      for (e = (e || "").match(ft) || [ "" ], u = e.length; u--; ) if (a = At.exec(e[u]) || [], 
      f = v = a[1], d = (a[2] || "").split(".").sort(), f) {
       for (h = Z.event.special[f] || {}, f = (i ? h.delegateType : h.bindType) || f, p = c[f] || [], 
       a = a[2] && new RegExp("(^|\\.)" + d.join("\\.(?:.*\\.|)") + "(\\.|$)"), s = o = p.length; o--; ) l = p[o], 
       !r && v !== l.origType || n && n.guid !== l.guid || a && !a.test(l.namespace) || i && i !== l.selector && ("**" !== i || !l.selector) || (p.splice(o, 1), 
       l.selector && p.delegateCount--, h.remove && h.remove.call(t, l));
       s && !p.length && (h.teardown && h.teardown.call(t, d, g.handle) !== !1 || Z.removeEvent(t, f, g.handle), 
       delete c[f]);
      } else for (f in c) Z.event.remove(t, f + e[u], n, i, !0);
      Z.isEmptyObject(c) && (delete g.handle, mt.remove(t, "events"));
     }
    },
    trigger: function(e, n, i, r) {
     var o, s, a, c, u, l, h, p = [ i || K ], f = Y.call(e, "type") ? e.type : e, d = Y.call(e, "namespace") ? e.namespace.split(".") : [];
     if (s = a = i = i || K, 3 !== i.nodeType && 8 !== i.nodeType && !Tt.test(f + Z.event.triggered) && (f.indexOf(".") >= 0 && (d = f.split("."), 
     f = d.shift(), d.sort()), u = f.indexOf(":") < 0 && "on" + f, e = e[Z.expando] ? e : new Z.Event(f, "object" == typeof e && e), 
     e.isTrigger = r ? 2 : 3, e.namespace = d.join("."), e.namespace_re = e.namespace ? new RegExp("(^|\\.)" + d.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, 
     e.result = void 0, e.target || (e.target = i), n = null == n ? [ e ] : Z.makeArray(n, [ e ]), 
     h = Z.event.special[f] || {}, r || !h.trigger || h.trigger.apply(i, n) !== !1)) {
      if (!r && !h.noBubble && !Z.isWindow(i)) {
       for (c = h.delegateType || f, Tt.test(c + f) || (s = s.parentNode); s; s = s.parentNode) p.push(s), 
       a = s;
       a === (i.ownerDocument || K) && p.push(a.defaultView || a.parentWindow || t);
      }
      for (o = 0; (s = p[o++]) && !e.isPropagationStopped(); ) e.type = o > 1 ? c : h.bindType || f, 
      l = (mt.get(s, "events") || {})[e.type] && mt.get(s, "handle"), l && l.apply(s, n), 
      l = u && s[u], l && l.apply && Z.acceptData(s) && (e.result = l.apply(s, n), e.result === !1 && e.preventDefault());
      return e.type = f, r || e.isDefaultPrevented() || h._default && h._default.apply(p.pop(), n) !== !1 || !Z.acceptData(i) || u && Z.isFunction(i[f]) && !Z.isWindow(i) && (a = i[u], 
      a && (i[u] = null), Z.event.triggered = f, i[f](), Z.event.triggered = void 0, a && (i[u] = a)), 
      e.result;
     }
    },
    dispatch: function(t) {
     t = Z.event.fix(t);
     var e, n, i, r, o, s = [], a = z.call(arguments), c = (mt.get(this, "events") || {})[t.type] || [], u = Z.event.special[t.type] || {};
     if (a[0] = t, t.delegateTarget = this, !u.preDispatch || u.preDispatch.call(this, t) !== !1) {
      for (s = Z.event.handlers.call(this, t, c), e = 0; (r = s[e++]) && !t.isPropagationStopped(); ) for (t.currentTarget = r.elem, 
      n = 0; (o = r.handlers[n++]) && !t.isImmediatePropagationStopped(); ) (!t.namespace_re || t.namespace_re.test(o.namespace)) && (t.handleObj = o, 
      t.data = o.data, i = ((Z.event.special[o.origType] || {}).handle || o.handler).apply(r.elem, a), 
      void 0 !== i && (t.result = i) === !1 && (t.preventDefault(), t.stopPropagation()));
      return u.postDispatch && u.postDispatch.call(this, t), t.result;
     }
    },
    handlers: function(t, e) {
     var n, i, r, o, s = [], a = e.delegateCount, c = t.target;
     if (a && c.nodeType && (!t.button || "click" !== t.type)) for (;c !== this; c = c.parentNode || this) if (c.disabled !== !0 || "click" !== t.type) {
      for (i = [], n = 0; a > n; n++) o = e[n], r = o.selector + " ", void 0 === i[r] && (i[r] = o.needsContext ? Z(r, this).index(c) >= 0 : Z.find(r, this, null, [ c ]).length), 
      i[r] && i.push(o);
      i.length && s.push({
       elem: c,
       handlers: i
      });
     }
     return a < e.length && s.push({
      elem: this,
      handlers: e.slice(a)
     }), s;
    },
    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(t, e) {
      return null == t.which && (t.which = null != e.charCode ? e.charCode : e.keyCode), 
      t;
     }
    },
    mouseHooks: {
     props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
     filter: function(t, e) {
      var n, i, r, o = e.button;
      return null == t.pageX && null != e.clientX && (n = t.target.ownerDocument || K, 
      i = n.documentElement, r = n.body, t.pageX = e.clientX + (i && i.scrollLeft || r && r.scrollLeft || 0) - (i && i.clientLeft || r && r.clientLeft || 0), 
      t.pageY = e.clientY + (i && i.scrollTop || r && r.scrollTop || 0) - (i && i.clientTop || r && r.clientTop || 0)), 
      t.which || void 0 === o || (t.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), t;
     }
    },
    fix: function(t) {
     if (t[Z.expando]) return t;
     var e, n, i, r = t.type, o = t, s = this.fixHooks[r];
     for (s || (this.fixHooks[r] = s = Ct.test(r) ? this.mouseHooks : Et.test(r) ? this.keyHooks : {}), 
     i = s.props ? this.props.concat(s.props) : this.props, t = new Z.Event(o), e = i.length; e--; ) n = i[e], 
     t[n] = o[n];
     return t.target || (t.target = K), 3 === t.target.nodeType && (t.target = t.target.parentNode), 
     s.filter ? s.filter(t, o) : t;
    },
    special: {
     load: {
      noBubble: !0
     },
     focus: {
      trigger: function() {
       return this !== h() && this.focus ? (this.focus(), !1) : void 0;
      },
      delegateType: "focusin"
     },
     blur: {
      trigger: function() {
       return this === h() && this.blur ? (this.blur(), !1) : void 0;
      },
      delegateType: "focusout"
     },
     click: {
      trigger: function() {
       return "checkbox" === this.type && this.click && Z.nodeName(this, "input") ? (this.click(), 
       !1) : void 0;
      },
      _default: function(t) {
       return Z.nodeName(t.target, "a");
      }
     },
     beforeunload: {
      postDispatch: function(t) {
       void 0 !== t.result && t.originalEvent && (t.originalEvent.returnValue = t.result);
      }
     }
    },
    simulate: function(t, e, n, i) {
     var r = Z.extend(new Z.Event(), n, {
      type: t,
      isSimulated: !0,
      originalEvent: {}
     });
     i ? Z.event.trigger(r, null, e) : Z.event.dispatch.call(e, r), r.isDefaultPrevented() && n.preventDefault();
    }
   }, Z.removeEvent = function(t, e, n) {
    t.removeEventListener && t.removeEventListener(e, n, !1);
   }, Z.Event = function(t, e) {
    return this instanceof Z.Event ? (t && t.type ? (this.originalEvent = t, this.type = t.type, 
    this.isDefaultPrevented = t.defaultPrevented || void 0 === t.defaultPrevented && t.returnValue === !1 ? u : l) : this.type = t, 
    e && Z.extend(this, e), this.timeStamp = t && t.timeStamp || Z.now(), void (this[Z.expando] = !0)) : new Z.Event(t, e);
   }, Z.Event.prototype = {
    isDefaultPrevented: l,
    isPropagationStopped: l,
    isImmediatePropagationStopped: l,
    preventDefault: function() {
     var t = this.originalEvent;
     this.isDefaultPrevented = u, t && t.preventDefault && t.preventDefault();
    },
    stopPropagation: function() {
     var t = this.originalEvent;
     this.isPropagationStopped = u, t && t.stopPropagation && t.stopPropagation();
    },
    stopImmediatePropagation: function() {
     var t = this.originalEvent;
     this.isImmediatePropagationStopped = u, t && t.stopImmediatePropagation && t.stopImmediatePropagation(), 
     this.stopPropagation();
    }
   }, Z.each({
    mouseenter: "mouseover",
    mouseleave: "mouseout",
    pointerenter: "pointerover",
    pointerleave: "pointerout"
   }, function(t, e) {
    Z.event.special[t] = {
     delegateType: e,
     bindType: e,
     handle: function(t) {
      var n, i = this, r = t.relatedTarget, o = t.handleObj;
      return (!r || r !== i && !Z.contains(i, r)) && (t.type = o.origType, n = o.handler.apply(this, arguments), 
      t.type = e), n;
     }
    };
   }), J.focusinBubbles || Z.each({
    focus: "focusin",
    blur: "focusout"
   }, function(t, e) {
    var n = function(t) {
     Z.event.simulate(e, t.target, Z.event.fix(t), !0);
    };
    Z.event.special[e] = {
     setup: function() {
      var i = this.ownerDocument || this, r = mt.access(i, e);
      r || i.addEventListener(t, n, !0), mt.access(i, e, (r || 0) + 1);
     },
     teardown: function() {
      var i = this.ownerDocument || this, r = mt.access(i, e) - 1;
      r ? mt.access(i, e, r) : (i.removeEventListener(t, n, !0), mt.remove(i, e));
     }
    };
   }), Z.fn.extend({
    on: function(t, e, n, i, r) {
     var o, s;
     if ("object" == typeof t) {
      "string" != typeof e && (n = n || e, e = void 0);
      for (s in t) this.on(s, e, n, t[s], r);
      return this;
     }
     if (null == n && null == i ? (i = e, n = e = void 0) : null == i && ("string" == typeof e ? (i = n, 
     n = void 0) : (i = n, n = e, e = void 0)), i === !1) i = l; else if (!i) return this;
     return 1 === r && (o = i, i = function(t) {
      return Z().off(t), o.apply(this, arguments);
     }, i.guid = o.guid || (o.guid = Z.guid++)), this.each(function() {
      Z.event.add(this, t, i, n, e);
     });
    },
    one: function(t, e, n, i) {
     return this.on(t, e, n, i, 1);
    },
    off: function(t, e, n) {
     var i, r;
     if (t && t.preventDefault && t.handleObj) return i = t.handleObj, Z(t.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), 
     this;
     if ("object" == typeof t) {
      for (r in t) this.off(r, e, t[r]);
      return this;
     }
     return (e === !1 || "function" == typeof e) && (n = e, e = void 0), n === !1 && (n = l), 
     this.each(function() {
      Z.event.remove(this, t, n, e);
     });
    },
    trigger: function(t, e) {
     return this.each(function() {
      Z.event.trigger(t, e, this);
     });
    },
    triggerHandler: function(t, e) {
     var n = this[0];
     return n ? Z.event.trigger(t, e, n, !0) : void 0;
    }
   });
   var jt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, Pt = /<([\w:]+)/, Lt = /<|&#?\w+;/, Ot = /<(?:script|style|link)/i, Mt = /checked\s*(?:[^=]|=\s*.checked.)/i, Nt = /^$|\/(?:java|ecma)script/i, Rt = /^true\/(.*)/, Ht = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, Dt = {
    option: [ 1, "<select multiple='multiple'>", "</select>" ],
    thead: [ 1, "<table>", "</table>" ],
    col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
    tr: [ 2, "<table><tbody>", "</tbody></table>" ],
    td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
    _default: [ 0, "", "" ]
   };
   Dt.optgroup = Dt.option, Dt.tbody = Dt.tfoot = Dt.colgroup = Dt.caption = Dt.thead, 
   Dt.th = Dt.td, Z.extend({
    clone: function(t, e, n) {
     var i, r, o, s, a = t.cloneNode(!0), c = Z.contains(t.ownerDocument, t);
     if (!(J.noCloneChecked || 1 !== t.nodeType && 11 !== t.nodeType || Z.isXMLDoc(t))) for (s = m(a), 
     o = m(t), i = 0, r = o.length; r > i; i++) y(o[i], s[i]);
     if (e) if (n) for (o = o || m(t), s = s || m(a), i = 0, r = o.length; r > i; i++) g(o[i], s[i]); else g(t, a);
     return s = m(a, "script"), s.length > 0 && v(s, !c && m(t, "script")), a;
    },
    buildFragment: function(t, e, n, i) {
     for (var r, o, s, a, c, u, l = e.createDocumentFragment(), h = [], p = 0, f = t.length; f > p; p++) if (r = t[p], 
     r || 0 === r) if ("object" === Z.type(r)) Z.merge(h, r.nodeType ? [ r ] : r); else if (Lt.test(r)) {
      for (o = o || l.appendChild(e.createElement("div")), s = (Pt.exec(r) || [ "", "" ])[1].toLowerCase(), 
      a = Dt[s] || Dt._default, o.innerHTML = a[1] + r.replace(jt, "<$1></$2>") + a[2], 
      u = a[0]; u--; ) o = o.lastChild;
      Z.merge(h, o.childNodes), o = l.firstChild, o.textContent = "";
     } else h.push(e.createTextNode(r));
     for (l.textContent = "", p = 0; r = h[p++]; ) if ((!i || -1 === Z.inArray(r, i)) && (c = Z.contains(r.ownerDocument, r), 
     o = m(l.appendChild(r), "script"), c && v(o), n)) for (u = 0; r = o[u++]; ) Nt.test(r.type || "") && n.push(r);
     return l;
    },
    cleanData: function(t) {
     for (var e, n, i, r, o = Z.event.special, s = 0; void 0 !== (n = t[s]); s++) {
      if (Z.acceptData(n) && (r = n[mt.expando], r && (e = mt.cache[r]))) {
       if (e.events) for (i in e.events) o[i] ? Z.event.remove(n, i) : Z.removeEvent(n, i, e.handle);
       mt.cache[r] && delete mt.cache[r];
      }
      delete yt.cache[n[yt.expando]];
     }
    }
   }), Z.fn.extend({
    text: function(t) {
     return gt(this, function(t) {
      return void 0 === t ? Z.text(this) : this.empty().each(function() {
       (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && (this.textContent = t);
      });
     }, null, t, arguments.length);
    },
    append: function() {
     return this.domManip(arguments, function(t) {
      if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
       var e = p(this, t);
       e.appendChild(t);
      }
     });
    },
    prepend: function() {
     return this.domManip(arguments, function(t) {
      if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
       var e = p(this, t);
       e.insertBefore(t, e.firstChild);
      }
     });
    },
    before: function() {
     return this.domManip(arguments, function(t) {
      this.parentNode && this.parentNode.insertBefore(t, this);
     });
    },
    after: function() {
     return this.domManip(arguments, function(t) {
      this.parentNode && this.parentNode.insertBefore(t, this.nextSibling);
     });
    },
    remove: function(t, e) {
     for (var n, i = t ? Z.filter(t, this) : this, r = 0; null != (n = i[r]); r++) e || 1 !== n.nodeType || Z.cleanData(m(n)), 
     n.parentNode && (e && Z.contains(n.ownerDocument, n) && v(m(n, "script")), n.parentNode.removeChild(n));
     return this;
    },
    empty: function() {
     for (var t, e = 0; null != (t = this[e]); e++) 1 === t.nodeType && (Z.cleanData(m(t, !1)), 
     t.textContent = "");
     return this;
    },
    clone: function(t, e) {
     return t = null == t ? !1 : t, e = null == e ? t : e, this.map(function() {
      return Z.clone(this, t, e);
     });
    },
    html: function(t) {
     return gt(this, function(t) {
      var e = this[0] || {}, n = 0, i = this.length;
      if (void 0 === t && 1 === e.nodeType) return e.innerHTML;
      if ("string" == typeof t && !Ot.test(t) && !Dt[(Pt.exec(t) || [ "", "" ])[1].toLowerCase()]) {
       t = t.replace(jt, "<$1></$2>");
       try {
        for (;i > n; n++) e = this[n] || {}, 1 === e.nodeType && (Z.cleanData(m(e, !1)), 
        e.innerHTML = t);
        e = 0;
       } catch (r) {}
      }
      e && this.empty().append(t);
     }, null, t, arguments.length);
    },
    replaceWith: function() {
     var t = arguments[0];
     return this.domManip(arguments, function(e) {
      t = this.parentNode, Z.cleanData(m(this)), t && t.replaceChild(e, this);
     }), t && (t.length || t.nodeType) ? this : this.remove();
    },
    detach: function(t) {
     return this.remove(t, !0);
    },
    domManip: function(t, e) {
     t = U.apply([], t);
     var n, i, r, o, s, a, c = 0, u = this.length, l = this, h = u - 1, p = t[0], v = Z.isFunction(p);
     if (v || u > 1 && "string" == typeof p && !J.checkClone && Mt.test(p)) return this.each(function(n) {
      var i = l.eq(n);
      v && (t[0] = p.call(this, n, i.html())), i.domManip(t, e);
     });
     if (u && (n = Z.buildFragment(t, this[0].ownerDocument, !1, this), i = n.firstChild, 
     1 === n.childNodes.length && (n = i), i)) {
      for (r = Z.map(m(n, "script"), f), o = r.length; u > c; c++) s = n, c !== h && (s = Z.clone(s, !0, !0), 
      o && Z.merge(r, m(s, "script"))), e.call(this[c], s, c);
      if (o) for (a = r[r.length - 1].ownerDocument, Z.map(r, d), c = 0; o > c; c++) s = r[c], 
      Nt.test(s.type || "") && !mt.access(s, "globalEval") && Z.contains(a, s) && (s.src ? Z._evalUrl && Z._evalUrl(s.src) : Z.globalEval(s.textContent.replace(Ht, "")));
     }
     return this;
    }
   }), Z.each({
    appendTo: "append",
    prependTo: "prepend",
    insertBefore: "before",
    insertAfter: "after",
    replaceAll: "replaceWith"
   }, function(t, e) {
    Z.fn[t] = function(t) {
     for (var n, i = [], r = Z(t), o = r.length - 1, s = 0; o >= s; s++) n = s === o ? this : this.clone(!0), 
     Z(r[s])[e](n), V.apply(i, n.get());
     return this.pushStack(i);
    };
   });
   var Bt, It = {}, qt = /^margin/, Ft = new RegExp("^(" + _t + ")(?!px)[a-z%]+$", "i"), zt = function(e) {
    return e.ownerDocument.defaultView.opener ? e.ownerDocument.defaultView.getComputedStyle(e, null) : t.getComputedStyle(e, null);
   };
   !function() {
    function e() {
     s.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", 
     s.innerHTML = "", r.appendChild(o);
     var e = t.getComputedStyle(s, null);
     n = "1%" !== e.top, i = "4px" === e.width, r.removeChild(o);
    }
    var n, i, r = K.documentElement, o = K.createElement("div"), s = K.createElement("div");
    s.style && (s.style.backgroundClip = "content-box", s.cloneNode(!0).style.backgroundClip = "", 
    J.clearCloneStyle = "content-box" === s.style.backgroundClip, o.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute", 
    o.appendChild(s), t.getComputedStyle && Z.extend(J, {
     pixelPosition: function() {
      return e(), n;
     },
     boxSizingReliable: function() {
      return null == i && e(), i;
     },
     reliableMarginRight: function() {
      var e, n = s.appendChild(K.createElement("div"));
      return n.style.cssText = s.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", 
      n.style.marginRight = n.style.width = "0", s.style.width = "1px", r.appendChild(o), 
      e = !parseFloat(t.getComputedStyle(n, null).marginRight), r.removeChild(o), s.removeChild(n), 
      e;
     }
    }));
   }(), Z.swap = function(t, e, n, i) {
    var r, o, s = {};
    for (o in e) s[o] = t.style[o], t.style[o] = e[o];
    r = n.apply(t, i || []);
    for (o in e) t.style[o] = s[o];
    return r;
   };
   var Ut = /^(none|table(?!-c[ea]).+)/, Vt = new RegExp("^(" + _t + ")(.*)$", "i"), Wt = new RegExp("^([+-])=(" + _t + ")", "i"), Gt = {
    position: "absolute",
    visibility: "hidden",
    display: "block"
   }, Xt = {
    letterSpacing: "0",
    fontWeight: "400"
   }, Yt = [ "Webkit", "O", "Moz", "ms" ];
   Z.extend({
    cssHooks: {
     opacity: {
      get: function(t, e) {
       if (e) {
        var n = _(t, "opacity");
        return "" === n ? "1" : n;
       }
      }
     }
    },
    cssNumber: {
     columnCount: !0,
     fillOpacity: !0,
     flexGrow: !0,
     flexShrink: !0,
     fontWeight: !0,
     lineHeight: !0,
     opacity: !0,
     order: !0,
     orphans: !0,
     widows: !0,
     zIndex: !0,
     zoom: !0
    },
    cssProps: {
     "float": "cssFloat"
    },
    style: function(t, e, n, i) {
     if (t && 3 !== t.nodeType && 8 !== t.nodeType && t.style) {
      var r, o, s, a = Z.camelCase(e), c = t.style;
      return e = Z.cssProps[a] || (Z.cssProps[a] = $(c, a)), s = Z.cssHooks[e] || Z.cssHooks[a], 
      void 0 === n ? s && "get" in s && void 0 !== (r = s.get(t, !1, i)) ? r : c[e] : (o = typeof n, 
      "string" === o && (r = Wt.exec(n)) && (n = (r[1] + 1) * r[2] + parseFloat(Z.css(t, e)), 
      o = "number"), null != n && n === n && ("number" !== o || Z.cssNumber[a] || (n += "px"), 
      J.clearCloneStyle || "" !== n || 0 !== e.indexOf("background") || (c[e] = "inherit"), 
      s && "set" in s && void 0 === (n = s.set(t, n, i)) || (c[e] = n)), void 0);
     }
    },
    css: function(t, e, n, i) {
     var r, o, s, a = Z.camelCase(e);
     return e = Z.cssProps[a] || (Z.cssProps[a] = $(t.style, a)), s = Z.cssHooks[e] || Z.cssHooks[a], 
     s && "get" in s && (r = s.get(t, !0, n)), void 0 === r && (r = _(t, e, i)), "normal" === r && e in Xt && (r = Xt[e]), 
     "" === n || n ? (o = parseFloat(r), n === !0 || Z.isNumeric(o) ? o || 0 : r) : r;
    }
   }), Z.each([ "height", "width" ], function(t, e) {
    Z.cssHooks[e] = {
     get: function(t, n, i) {
      return n ? Ut.test(Z.css(t, "display")) && 0 === t.offsetWidth ? Z.swap(t, Gt, function() {
       return E(t, e, i);
      }) : E(t, e, i) : void 0;
     },
     set: function(t, n, i) {
      var r = i && zt(t);
      return k(t, n, i ? S(t, e, i, "border-box" === Z.css(t, "boxSizing", !1, r), r) : 0);
     }
    };
   }), Z.cssHooks.marginRight = x(J.reliableMarginRight, function(t, e) {
    return e ? Z.swap(t, {
     display: "inline-block"
    }, _, [ t, "marginRight" ]) : void 0;
   }), Z.each({
    margin: "",
    padding: "",
    border: "Width"
   }, function(t, e) {
    Z.cssHooks[t + e] = {
     expand: function(n) {
      for (var i = 0, r = {}, o = "string" == typeof n ? n.split(" ") : [ n ]; 4 > i; i++) r[t + xt[i] + e] = o[i] || o[i - 2] || o[0];
      return r;
     }
    }, qt.test(t) || (Z.cssHooks[t + e].set = k);
   }), Z.fn.extend({
    css: function(t, e) {
     return gt(this, function(t, e, n) {
      var i, r, o = {}, s = 0;
      if (Z.isArray(e)) {
       for (i = zt(t), r = e.length; r > s; s++) o[e[s]] = Z.css(t, e[s], !1, i);
       return o;
      }
      return void 0 !== n ? Z.style(t, e, n) : Z.css(t, e);
     }, t, e, arguments.length > 1);
    },
    show: function() {
     return C(this, !0);
    },
    hide: function() {
     return C(this);
    },
    toggle: function(t) {
     return "boolean" == typeof t ? t ? this.show() : this.hide() : this.each(function() {
      $t(this) ? Z(this).show() : Z(this).hide();
     });
    }
   }), Z.Tween = T, T.prototype = {
    constructor: T,
    init: function(t, e, n, i, r, o) {
     this.elem = t, this.prop = n, this.easing = r || "swing", this.options = e, this.start = this.now = this.cur(), 
     this.end = i, this.unit = o || (Z.cssNumber[n] ? "" : "px");
    },
    cur: function() {
     var t = T.propHooks[this.prop];
     return t && t.get ? t.get(this) : T.propHooks._default.get(this);
    },
    run: function(t) {
     var e, n = T.propHooks[this.prop];
     return this.pos = e = this.options.duration ? Z.easing[this.easing](t, this.options.duration * t, 0, 1, this.options.duration) : t, 
     this.now = (this.end - this.start) * e + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), 
     n && n.set ? n.set(this) : T.propHooks._default.set(this), this;
    }
   }, T.prototype.init.prototype = T.prototype, T.propHooks = {
    _default: {
     get: function(t) {
      var e;
      return null == t.elem[t.prop] || t.elem.style && null != t.elem.style[t.prop] ? (e = Z.css(t.elem, t.prop, ""), 
      e && "auto" !== e ? e : 0) : t.elem[t.prop];
     },
     set: function(t) {
      Z.fx.step[t.prop] ? Z.fx.step[t.prop](t) : t.elem.style && (null != t.elem.style[Z.cssProps[t.prop]] || Z.cssHooks[t.prop]) ? Z.style(t.elem, t.prop, t.now + t.unit) : t.elem[t.prop] = t.now;
     }
    }
   }, T.propHooks.scrollTop = T.propHooks.scrollLeft = {
    set: function(t) {
     t.elem.nodeType && t.elem.parentNode && (t.elem[t.prop] = t.now);
    }
   }, Z.easing = {
    linear: function(t) {
     return t;
    },
    swing: function(t) {
     return .5 - Math.cos(t * Math.PI) / 2;
    }
   }, Z.fx = T.prototype.init, Z.fx.step = {};
   var Jt, Kt, Qt = /^(?:toggle|show|hide)$/, Zt = new RegExp("^(?:([+-])=|)(" + _t + ")([a-z%]*)$", "i"), te = /queueHooks$/, ee = [ L ], ne = {
    "*": [ function(t, e) {
     var n = this.createTween(t, e), i = n.cur(), r = Zt.exec(e), o = r && r[3] || (Z.cssNumber[t] ? "" : "px"), s = (Z.cssNumber[t] || "px" !== o && +i) && Zt.exec(Z.css(n.elem, t)), a = 1, c = 20;
     if (s && s[3] !== o) {
      o = o || s[3], r = r || [], s = +i || 1;
      do a = a || ".5", s /= a, Z.style(n.elem, t, s + o); while (a !== (a = n.cur() / i) && 1 !== a && --c);
     }
     return r && (s = n.start = +s || +i || 0, n.unit = o, n.end = r[1] ? s + (r[1] + 1) * r[2] : +r[2]), 
     n;
    } ]
   };
   Z.Animation = Z.extend(M, {
    tweener: function(t, e) {
     Z.isFunction(t) ? (e = t, t = [ "*" ]) : t = t.split(" ");
     for (var n, i = 0, r = t.length; r > i; i++) n = t[i], ne[n] = ne[n] || [], ne[n].unshift(e);
    },
    prefilter: function(t, e) {
     e ? ee.unshift(t) : ee.push(t);
    }
   }), Z.speed = function(t, e, n) {
    var i = t && "object" == typeof t ? Z.extend({}, t) : {
     complete: n || !n && e || Z.isFunction(t) && t,
     duration: t,
     easing: n && e || e && !Z.isFunction(e) && e
    };
    return i.duration = Z.fx.off ? 0 : "number" == typeof i.duration ? i.duration : i.duration in Z.fx.speeds ? Z.fx.speeds[i.duration] : Z.fx.speeds._default, 
    (null == i.queue || i.queue === !0) && (i.queue = "fx"), i.old = i.complete, i.complete = function() {
     Z.isFunction(i.old) && i.old.call(this), i.queue && Z.dequeue(this, i.queue);
    }, i;
   }, Z.fn.extend({
    fadeTo: function(t, e, n, i) {
     return this.filter($t).css("opacity", 0).show().end().animate({
      opacity: e
     }, t, n, i);
    },
    animate: function(t, e, n, i) {
     var r = Z.isEmptyObject(t), o = Z.speed(e, n, i), s = function() {
      var e = M(this, Z.extend({}, t), o);
      (r || mt.get(this, "finish")) && e.stop(!0);
     };
     return s.finish = s, r || o.queue === !1 ? this.each(s) : this.queue(o.queue, s);
    },
    stop: function(t, e, n) {
     var i = function(t) {
      var e = t.stop;
      delete t.stop, e(n);
     };
     return "string" != typeof t && (n = e, e = t, t = void 0), e && t !== !1 && this.queue(t || "fx", []), 
     this.each(function() {
      var e = !0, r = null != t && t + "queueHooks", o = Z.timers, s = mt.get(this);
      if (r) s[r] && s[r].stop && i(s[r]); else for (r in s) s[r] && s[r].stop && te.test(r) && i(s[r]);
      for (r = o.length; r--; ) o[r].elem !== this || null != t && o[r].queue !== t || (o[r].anim.stop(n), 
      e = !1, o.splice(r, 1));
      (e || !n) && Z.dequeue(this, t);
     });
    },
    finish: function(t) {
     return t !== !1 && (t = t || "fx"), this.each(function() {
      var e, n = mt.get(this), i = n[t + "queue"], r = n[t + "queueHooks"], o = Z.timers, s = i ? i.length : 0;
      for (n.finish = !0, Z.queue(this, t, []), r && r.stop && r.stop.call(this, !0), 
      e = o.length; e--; ) o[e].elem === this && o[e].queue === t && (o[e].anim.stop(!0), 
      o.splice(e, 1));
      for (e = 0; s > e; e++) i[e] && i[e].finish && i[e].finish.call(this);
      delete n.finish;
     });
    }
   }), Z.each([ "toggle", "show", "hide" ], function(t, e) {
    var n = Z.fn[e];
    Z.fn[e] = function(t, i, r) {
     return null == t || "boolean" == typeof t ? n.apply(this, arguments) : this.animate(j(e, !0), t, i, r);
    };
   }), Z.each({
    slideDown: j("show"),
    slideUp: j("hide"),
    slideToggle: j("toggle"),
    fadeIn: {
     opacity: "show"
    },
    fadeOut: {
     opacity: "hide"
    },
    fadeToggle: {
     opacity: "toggle"
    }
   }, function(t, e) {
    Z.fn[t] = function(t, n, i) {
     return this.animate(e, t, n, i);
    };
   }), Z.timers = [], Z.fx.tick = function() {
    var t, e = 0, n = Z.timers;
    for (Jt = Z.now(); e < n.length; e++) t = n[e], t() || n[e] !== t || n.splice(e--, 1);
    n.length || Z.fx.stop(), Jt = void 0;
   }, Z.fx.timer = function(t) {
    Z.timers.push(t), t() ? Z.fx.start() : Z.timers.pop();
   }, Z.fx.interval = 13, Z.fx.start = function() {
    Kt || (Kt = setInterval(Z.fx.tick, Z.fx.interval));
   }, Z.fx.stop = function() {
    clearInterval(Kt), Kt = null;
   }, Z.fx.speeds = {
    slow: 600,
    fast: 200,
    _default: 400
   }, Z.fn.delay = function(t, e) {
    return t = Z.fx ? Z.fx.speeds[t] || t : t, e = e || "fx", this.queue(e, function(e, n) {
     var i = setTimeout(e, t);
     n.stop = function() {
      clearTimeout(i);
     };
    });
   }, function() {
    var t = K.createElement("input"), e = K.createElement("select"), n = e.appendChild(K.createElement("option"));
    t.type = "checkbox", J.checkOn = "" !== t.value, J.optSelected = n.selected, e.disabled = !0, 
    J.optDisabled = !n.disabled, t = K.createElement("input"), t.value = "t", t.type = "radio", 
    J.radioValue = "t" === t.value;
   }();
   var ie, re, oe = Z.expr.attrHandle;
   Z.fn.extend({
    attr: function(t, e) {
     return gt(this, Z.attr, t, e, arguments.length > 1);
    },
    removeAttr: function(t) {
     return this.each(function() {
      Z.removeAttr(this, t);
     });
    }
   }), Z.extend({
    attr: function(t, e, n) {
     var i, r, o = t.nodeType;
     if (t && 3 !== o && 8 !== o && 2 !== o) return typeof t.getAttribute === St ? Z.prop(t, e, n) : (1 === o && Z.isXMLDoc(t) || (e = e.toLowerCase(), 
     i = Z.attrHooks[e] || (Z.expr.match.bool.test(e) ? re : ie)), void 0 === n ? i && "get" in i && null !== (r = i.get(t, e)) ? r : (r = Z.find.attr(t, e), 
     null == r ? void 0 : r) : null !== n ? i && "set" in i && void 0 !== (r = i.set(t, n, e)) ? r : (t.setAttribute(e, n + ""), 
     n) : void Z.removeAttr(t, e));
    },
    removeAttr: function(t, e) {
     var n, i, r = 0, o = e && e.match(ft);
     if (o && 1 === t.nodeType) for (;n = o[r++]; ) i = Z.propFix[n] || n, Z.expr.match.bool.test(n) && (t[i] = !1), 
     t.removeAttribute(n);
    },
    attrHooks: {
     type: {
      set: function(t, e) {
       if (!J.radioValue && "radio" === e && Z.nodeName(t, "input")) {
        var n = t.value;
        return t.setAttribute("type", e), n && (t.value = n), e;
       }
      }
     }
    }
   }), re = {
    set: function(t, e, n) {
     return e === !1 ? Z.removeAttr(t, n) : t.setAttribute(n, n), n;
    }
   }, Z.each(Z.expr.match.bool.source.match(/\w+/g), function(t, e) {
    var n = oe[e] || Z.find.attr;
    oe[e] = function(t, e, i) {
     var r, o;
     return i || (o = oe[e], oe[e] = r, r = null != n(t, e, i) ? e.toLowerCase() : null, 
     oe[e] = o), r;
    };
   });
   var se = /^(?:input|select|textarea|button)$/i;
   Z.fn.extend({
    prop: function(t, e) {
     return gt(this, Z.prop, t, e, arguments.length > 1);
    },
    removeProp: function(t) {
     return this.each(function() {
      delete this[Z.propFix[t] || t];
     });
    }
   }), Z.extend({
    propFix: {
     "for": "htmlFor",
     "class": "className"
    },
    prop: function(t, e, n) {
     var i, r, o, s = t.nodeType;
     if (t && 3 !== s && 8 !== s && 2 !== s) return o = 1 !== s || !Z.isXMLDoc(t), o && (e = Z.propFix[e] || e, 
     r = Z.propHooks[e]), void 0 !== n ? r && "set" in r && void 0 !== (i = r.set(t, n, e)) ? i : t[e] = n : r && "get" in r && null !== (i = r.get(t, e)) ? i : t[e];
    },
    propHooks: {
     tabIndex: {
      get: function(t) {
       return t.hasAttribute("tabindex") || se.test(t.nodeName) || t.href ? t.tabIndex : -1;
      }
     }
    }
   }), J.optSelected || (Z.propHooks.selected = {
    get: function(t) {
     var e = t.parentNode;
     return e && e.parentNode && e.parentNode.selectedIndex, null;
    }
   }), Z.each([ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() {
    Z.propFix[this.toLowerCase()] = this;
   });
   var ae = /[\t\r\n\f]/g;
   Z.fn.extend({
    addClass: function(t) {
     var e, n, i, r, o, s, a = "string" == typeof t && t, c = 0, u = this.length;
     if (Z.isFunction(t)) return this.each(function(e) {
      Z(this).addClass(t.call(this, e, this.className));
     });
     if (a) for (e = (t || "").match(ft) || []; u > c; c++) if (n = this[c], i = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(ae, " ") : " ")) {
      for (o = 0; r = e[o++]; ) i.indexOf(" " + r + " ") < 0 && (i += r + " ");
      s = Z.trim(i), n.className !== s && (n.className = s);
     }
     return this;
    },
    removeClass: function(t) {
     var e, n, i, r, o, s, a = 0 === arguments.length || "string" == typeof t && t, c = 0, u = this.length;
     if (Z.isFunction(t)) return this.each(function(e) {
      Z(this).removeClass(t.call(this, e, this.className));
     });
     if (a) for (e = (t || "").match(ft) || []; u > c; c++) if (n = this[c], i = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(ae, " ") : "")) {
      for (o = 0; r = e[o++]; ) for (;i.indexOf(" " + r + " ") >= 0; ) i = i.replace(" " + r + " ", " ");
      s = t ? Z.trim(i) : "", n.className !== s && (n.className = s);
     }
     return this;
    },
    toggleClass: function(t, e) {
     var n = typeof t;
     return "boolean" == typeof e && "string" === n ? e ? this.addClass(t) : this.removeClass(t) : this.each(Z.isFunction(t) ? function(n) {
      Z(this).toggleClass(t.call(this, n, this.className, e), e);
     } : function() {
      if ("string" === n) for (var e, i = 0, r = Z(this), o = t.match(ft) || []; e = o[i++]; ) r.hasClass(e) ? r.removeClass(e) : r.addClass(e); else (n === St || "boolean" === n) && (this.className && mt.set(this, "__className__", this.className), 
      this.className = this.className || t === !1 ? "" : mt.get(this, "__className__") || "");
     });
    },
    hasClass: function(t) {
     for (var e = " " + t + " ", n = 0, i = this.length; i > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(ae, " ").indexOf(e) >= 0) return !0;
     return !1;
    }
   });
   var ce = /\r/g;
   Z.fn.extend({
    val: function(t) {
     var e, n, i, r = this[0];
     {
      if (arguments.length) return i = Z.isFunction(t), this.each(function(n) {
       var r;
       1 === this.nodeType && (r = i ? t.call(this, n, Z(this).val()) : t, null == r ? r = "" : "number" == typeof r ? r += "" : Z.isArray(r) && (r = Z.map(r, function(t) {
        return null == t ? "" : t + "";
       })), e = Z.valHooks[this.type] || Z.valHooks[this.nodeName.toLowerCase()], e && "set" in e && void 0 !== e.set(this, r, "value") || (this.value = r));
      });
      if (r) return e = Z.valHooks[r.type] || Z.valHooks[r.nodeName.toLowerCase()], e && "get" in e && void 0 !== (n = e.get(r, "value")) ? n : (n = r.value, 
      "string" == typeof n ? n.replace(ce, "") : null == n ? "" : n);
     }
    }
   }), Z.extend({
    valHooks: {
     option: {
      get: function(t) {
       var e = Z.find.attr(t, "value");
       return null != e ? e : Z.trim(Z.text(t));
      }
     },
     select: {
      get: function(t) {
       for (var e, n, i = t.options, r = t.selectedIndex, o = "select-one" === t.type || 0 > r, s = o ? null : [], a = o ? r + 1 : i.length, c = 0 > r ? a : o ? r : 0; a > c; c++) if (n = i[c], 
       !(!n.selected && c !== r || (J.optDisabled ? n.disabled : null !== n.getAttribute("disabled")) || n.parentNode.disabled && Z.nodeName(n.parentNode, "optgroup"))) {
        if (e = Z(n).val(), o) return e;
        s.push(e);
       }
       return s;
      },
      set: function(t, e) {
       for (var n, i, r = t.options, o = Z.makeArray(e), s = r.length; s--; ) i = r[s], 
       (i.selected = Z.inArray(i.value, o) >= 0) && (n = !0);
       return n || (t.selectedIndex = -1), o;
      }
     }
    }
   }), Z.each([ "radio", "checkbox" ], function() {
    Z.valHooks[this] = {
     set: function(t, e) {
      return Z.isArray(e) ? t.checked = Z.inArray(Z(t).val(), e) >= 0 : void 0;
     }
    }, J.checkOn || (Z.valHooks[this].get = function(t) {
     return null === t.getAttribute("value") ? "on" : t.value;
    });
   }), Z.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(t, e) {
    Z.fn[e] = function(t, n) {
     return arguments.length > 0 ? this.on(e, null, t, n) : this.trigger(e);
    };
   }), Z.fn.extend({
    hover: function(t, e) {
     return this.mouseenter(t).mouseleave(e || t);
    },
    bind: function(t, e, n) {
     return this.on(t, null, e, n);
    },
    unbind: function(t, e) {
     return this.off(t, null, e);
    },
    delegate: function(t, e, n, i) {
     return this.on(e, t, n, i);
    },
    undelegate: function(t, e, n) {
     return 1 === arguments.length ? this.off(t, "**") : this.off(e, t || "**", n);
    }
   });
   var ue = Z.now(), le = /\?/;
   Z.parseJSON = function(t) {
    return JSON.parse(t + "");
   }, Z.parseXML = function(t) {
    var e, n;
    if (!t || "string" != typeof t) return null;
    try {
     n = new DOMParser(), e = n.parseFromString(t, "text/xml");
    } catch (i) {
     e = void 0;
    }
    return (!e || e.getElementsByTagName("parsererror").length) && Z.error("Invalid XML: " + t), 
    e;
   };
   var he = /#.*$/, pe = /([?&])_=[^&]*/, fe = /^(.*?):[ \t]*([^\r\n]*)$/gm, de = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, ve = /^(?:GET|HEAD)$/, ge = /^\/\//, me = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, ye = {}, be = {}, we = "*/".concat("*"), _e = t.location.href, xe = me.exec(_e.toLowerCase()) || [];
   Z.extend({
    active: 0,
    lastModified: {},
    etag: {},
    ajaxSettings: {
     url: _e,
     type: "GET",
     isLocal: de.test(xe[1]),
     global: !0,
     processData: !0,
     async: !0,
     contentType: "application/x-www-form-urlencoded; charset=UTF-8",
     accepts: {
      "*": we,
      text: "text/plain",
      html: "text/html",
      xml: "application/xml, text/xml",
      json: "application/json, text/javascript"
     },
     contents: {
      xml: /xml/,
      html: /html/,
      json: /json/
     },
     responseFields: {
      xml: "responseXML",
      text: "responseText",
      json: "responseJSON"
     },
     converters: {
      "* text": String,
      "text html": !0,
      "text json": Z.parseJSON,
      "text xml": Z.parseXML
     },
     flatOptions: {
      url: !0,
      context: !0
     }
    },
    ajaxSetup: function(t, e) {
     return e ? H(H(t, Z.ajaxSettings), e) : H(Z.ajaxSettings, t);
    },
    ajaxPrefilter: N(ye),
    ajaxTransport: N(be),
    ajax: function(t, e) {
     function n(t, e, n, s) {
      var c, l, m, y, w, x = e;
      2 !== b && (b = 2, a && clearTimeout(a), i = void 0, o = s || "", _.readyState = t > 0 ? 4 : 0, 
      c = t >= 200 && 300 > t || 304 === t, n && (y = D(h, _, n)), y = B(h, y, _, c), 
      c ? (h.ifModified && (w = _.getResponseHeader("Last-Modified"), w && (Z.lastModified[r] = w), 
      w = _.getResponseHeader("etag"), w && (Z.etag[r] = w)), 204 === t || "HEAD" === h.type ? x = "nocontent" : 304 === t ? x = "notmodified" : (x = y.state, 
      l = y.data, m = y.error, c = !m)) : (m = x, (t || !x) && (x = "error", 0 > t && (t = 0))), 
      _.status = t, _.statusText = (e || x) + "", c ? d.resolveWith(p, [ l, x, _ ]) : d.rejectWith(p, [ _, x, m ]), 
      _.statusCode(g), g = void 0, u && f.trigger(c ? "ajaxSuccess" : "ajaxError", [ _, h, c ? l : m ]), 
      v.fireWith(p, [ _, x ]), u && (f.trigger("ajaxComplete", [ _, h ]), --Z.active || Z.event.trigger("ajaxStop")));
     }
     "object" == typeof t && (e = t, t = void 0), e = e || {};
     var i, r, o, s, a, c, u, l, h = Z.ajaxSetup({}, e), p = h.context || h, f = h.context && (p.nodeType || p.jquery) ? Z(p) : Z.event, d = Z.Deferred(), v = Z.Callbacks("once memory"), g = h.statusCode || {}, m = {}, y = {}, b = 0, w = "canceled", _ = {
      readyState: 0,
      getResponseHeader: function(t) {
       var e;
       if (2 === b) {
        if (!s) for (s = {}; e = fe.exec(o); ) s[e[1].toLowerCase()] = e[2];
        e = s[t.toLowerCase()];
       }
       return null == e ? null : e;
      },
      getAllResponseHeaders: function() {
       return 2 === b ? o : null;
      },
      setRequestHeader: function(t, e) {
       var n = t.toLowerCase();
       return b || (t = y[n] = y[n] || t, m[t] = e), this;
      },
      overrideMimeType: function(t) {
       return b || (h.mimeType = t), this;
      },
      statusCode: function(t) {
       var e;
       if (t) if (2 > b) for (e in t) g[e] = [ g[e], t[e] ]; else _.always(t[_.status]);
       return this;
      },
      abort: function(t) {
       var e = t || w;
       return i && i.abort(e), n(0, e), this;
      }
     };
     if (d.promise(_).complete = v.add, _.success = _.done, _.error = _.fail, h.url = ((t || h.url || _e) + "").replace(he, "").replace(ge, xe[1] + "//"), 
     h.type = e.method || e.type || h.method || h.type, h.dataTypes = Z.trim(h.dataType || "*").toLowerCase().match(ft) || [ "" ], 
     null == h.crossDomain && (c = me.exec(h.url.toLowerCase()), h.crossDomain = !(!c || c[1] === xe[1] && c[2] === xe[2] && (c[3] || ("http:" === c[1] ? "80" : "443")) === (xe[3] || ("http:" === xe[1] ? "80" : "443")))), 
     h.data && h.processData && "string" != typeof h.data && (h.data = Z.param(h.data, h.traditional)), 
     R(ye, h, e, _), 2 === b) return _;
     u = Z.event && h.global, u && 0 === Z.active++ && Z.event.trigger("ajaxStart"), 
     h.type = h.type.toUpperCase(), h.hasContent = !ve.test(h.type), r = h.url, h.hasContent || (h.data && (r = h.url += (le.test(r) ? "&" : "?") + h.data, 
     delete h.data), h.cache === !1 && (h.url = pe.test(r) ? r.replace(pe, "$1_=" + ue++) : r + (le.test(r) ? "&" : "?") + "_=" + ue++)), 
     h.ifModified && (Z.lastModified[r] && _.setRequestHeader("If-Modified-Since", Z.lastModified[r]), 
     Z.etag[r] && _.setRequestHeader("If-None-Match", Z.etag[r])), (h.data && h.hasContent && h.contentType !== !1 || e.contentType) && _.setRequestHeader("Content-Type", h.contentType), 
     _.setRequestHeader("Accept", h.dataTypes[0] && h.accepts[h.dataTypes[0]] ? h.accepts[h.dataTypes[0]] + ("*" !== h.dataTypes[0] ? ", " + we + "; q=0.01" : "") : h.accepts["*"]);
     for (l in h.headers) _.setRequestHeader(l, h.headers[l]);
     if (h.beforeSend && (h.beforeSend.call(p, _, h) === !1 || 2 === b)) return _.abort();
     w = "abort";
     for (l in {
      success: 1,
      error: 1,
      complete: 1
     }) _[l](h[l]);
     if (i = R(be, h, e, _)) {
      _.readyState = 1, u && f.trigger("ajaxSend", [ _, h ]), h.async && h.timeout > 0 && (a = setTimeout(function() {
       _.abort("timeout");
      }, h.timeout));
      try {
       b = 1, i.send(m, n);
      } catch (x) {
       if (!(2 > b)) throw x;
       n(-1, x);
      }
     } else n(-1, "No Transport");
     return _;
    },
    getJSON: function(t, e, n) {
     return Z.get(t, e, n, "json");
    },
    getScript: function(t, e) {
     return Z.get(t, void 0, e, "script");
    }
   }), Z.each([ "get", "post" ], function(t, e) {
    Z[e] = function(t, n, i, r) {
     return Z.isFunction(n) && (r = r || i, i = n, n = void 0), Z.ajax({
      url: t,
      type: e,
      dataType: r,
      data: n,
      success: i
     });
    };
   }), Z._evalUrl = function(t) {
    return Z.ajax({
     url: t,
     type: "GET",
     dataType: "script",
     async: !1,
     global: !1,
     "throws": !0
    });
   }, Z.fn.extend({
    wrapAll: function(t) {
     var e;
     return Z.isFunction(t) ? this.each(function(e) {
      Z(this).wrapAll(t.call(this, e));
     }) : (this[0] && (e = Z(t, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && e.insertBefore(this[0]), 
     e.map(function() {
      for (var t = this; t.firstElementChild; ) t = t.firstElementChild;
      return t;
     }).append(this)), this);
    },
    wrapInner: function(t) {
     return this.each(Z.isFunction(t) ? function(e) {
      Z(this).wrapInner(t.call(this, e));
     } : function() {
      var e = Z(this), n = e.contents();
      n.length ? n.wrapAll(t) : e.append(t);
     });
    },
    wrap: function(t) {
     var e = Z.isFunction(t);
     return this.each(function(n) {
      Z(this).wrapAll(e ? t.call(this, n) : t);
     });
    },
    unwrap: function() {
     return this.parent().each(function() {
      Z.nodeName(this, "body") || Z(this).replaceWith(this.childNodes);
     }).end();
    }
   }), Z.expr.filters.hidden = function(t) {
    return t.offsetWidth <= 0 && t.offsetHeight <= 0;
   }, Z.expr.filters.visible = function(t) {
    return !Z.expr.filters.hidden(t);
   };
   var $e = /%20/g, ke = /\[\]$/, Se = /\r?\n/g, Ee = /^(?:submit|button|image|reset|file)$/i, Ce = /^(?:input|select|textarea|keygen)/i;
   Z.param = function(t, e) {
    var n, i = [], r = function(t, e) {
     e = Z.isFunction(e) ? e() : null == e ? "" : e, i[i.length] = encodeURIComponent(t) + "=" + encodeURIComponent(e);
    };
    if (void 0 === e && (e = Z.ajaxSettings && Z.ajaxSettings.traditional), Z.isArray(t) || t.jquery && !Z.isPlainObject(t)) Z.each(t, function() {
     r(this.name, this.value);
    }); else for (n in t) I(n, t[n], e, r);
    return i.join("&").replace($e, "+");
   }, Z.fn.extend({
    serialize: function() {
     return Z.param(this.serializeArray());
    },
    serializeArray: function() {
     return this.map(function() {
      var t = Z.prop(this, "elements");
      return t ? Z.makeArray(t) : this;
     }).filter(function() {
      var t = this.type;
      return this.name && !Z(this).is(":disabled") && Ce.test(this.nodeName) && !Ee.test(t) && (this.checked || !kt.test(t));
     }).map(function(t, e) {
      var n = Z(this).val();
      return null == n ? null : Z.isArray(n) ? Z.map(n, function(t) {
       return {
        name: e.name,
        value: t.replace(Se, "\r\n")
       };
      }) : {
       name: e.name,
       value: n.replace(Se, "\r\n")
      };
     }).get();
    }
   }), Z.ajaxSettings.xhr = function() {
    try {
     return new XMLHttpRequest();
    } catch (t) {}
   };
   var Te = 0, Ae = {}, je = {
    0: 200,
    1223: 204
   }, Pe = Z.ajaxSettings.xhr();
   t.attachEvent && t.attachEvent("onunload", function() {
    for (var t in Ae) Ae[t]();
   }), J.cors = !!Pe && "withCredentials" in Pe, J.ajax = Pe = !!Pe, Z.ajaxTransport(function(t) {
    var e;
    return J.cors || Pe && !t.crossDomain ? {
     send: function(n, i) {
      var r, o = t.xhr(), s = ++Te;
      if (o.open(t.type, t.url, t.async, t.username, t.password), t.xhrFields) for (r in t.xhrFields) o[r] = t.xhrFields[r];
      t.mimeType && o.overrideMimeType && o.overrideMimeType(t.mimeType), t.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest");
      for (r in n) o.setRequestHeader(r, n[r]);
      e = function(t) {
       return function() {
        e && (delete Ae[s], e = o.onload = o.onerror = null, "abort" === t ? o.abort() : "error" === t ? i(o.status, o.statusText) : i(je[o.status] || o.status, o.statusText, "string" == typeof o.responseText ? {
         text: o.responseText
        } : void 0, o.getAllResponseHeaders()));
       };
      }, o.onload = e(), o.onerror = e("error"), e = Ae[s] = e("abort");
      try {
       o.send(t.hasContent && t.data || null);
      } catch (a) {
       if (e) throw a;
      }
     },
     abort: function() {
      e && e();
     }
    } : void 0;
   }), Z.ajaxSetup({
    accepts: {
     script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
    },
    contents: {
     script: /(?:java|ecma)script/
    },
    converters: {
     "text script": function(t) {
      return Z.globalEval(t), t;
     }
    }
   }), Z.ajaxPrefilter("script", function(t) {
    void 0 === t.cache && (t.cache = !1), t.crossDomain && (t.type = "GET");
   }), Z.ajaxTransport("script", function(t) {
    if (t.crossDomain) {
     var e, n;
     return {
      send: function(i, r) {
       e = Z("<script>").prop({
        async: !0,
        charset: t.scriptCharset,
        src: t.url
       }).on("load error", n = function(t) {
        e.remove(), n = null, t && r("error" === t.type ? 404 : 200, t.type);
       }), K.head.appendChild(e[0]);
      },
      abort: function() {
       n && n();
      }
     };
    }
   });
   var Le = [], Oe = /(=)\?(?=&|$)|\?\?/;
   Z.ajaxSetup({
    jsonp: "callback",
    jsonpCallback: function() {
     var t = Le.pop() || Z.expando + "_" + ue++;
     return this[t] = !0, t;
    }
   }), Z.ajaxPrefilter("json jsonp", function(e, n, i) {
    var r, o, s, a = e.jsonp !== !1 && (Oe.test(e.url) ? "url" : "string" == typeof e.data && !(e.contentType || "").indexOf("application/x-www-form-urlencoded") && Oe.test(e.data) && "data");
    return a || "jsonp" === e.dataTypes[0] ? (r = e.jsonpCallback = Z.isFunction(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, 
    a ? e[a] = e[a].replace(Oe, "$1" + r) : e.jsonp !== !1 && (e.url += (le.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), 
    e.converters["script json"] = function() {
     return s || Z.error(r + " was not called"), s[0];
    }, e.dataTypes[0] = "json", o = t[r], t[r] = function() {
     s = arguments;
    }, i.always(function() {
     t[r] = o, e[r] && (e.jsonpCallback = n.jsonpCallback, Le.push(r)), s && Z.isFunction(o) && o(s[0]), 
     s = o = void 0;
    }), "script") : void 0;
   }), Z.parseHTML = function(t, e, n) {
    if (!t || "string" != typeof t) return null;
    "boolean" == typeof e && (n = e, e = !1), e = e || K;
    var i = st.exec(t), r = !n && [];
    return i ? [ e.createElement(i[1]) ] : (i = Z.buildFragment([ t ], e, r), r && r.length && Z(r).remove(), 
    Z.merge([], i.childNodes));
   };
   var Me = Z.fn.load;
   Z.fn.load = function(t, e, n) {
    if ("string" != typeof t && Me) return Me.apply(this, arguments);
    var i, r, o, s = this, a = t.indexOf(" ");
    return a >= 0 && (i = Z.trim(t.slice(a)), t = t.slice(0, a)), Z.isFunction(e) ? (n = e, 
    e = void 0) : e && "object" == typeof e && (r = "POST"), s.length > 0 && Z.ajax({
     url: t,
     type: r,
     dataType: "html",
     data: e
    }).done(function(t) {
     o = arguments, s.html(i ? Z("<div>").append(Z.parseHTML(t)).find(i) : t);
    }).complete(n && function(t, e) {
     s.each(n, o || [ t.responseText, e, t ]);
    }), this;
   }, Z.each([ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function(t, e) {
    Z.fn[e] = function(t) {
     return this.on(e, t);
    };
   }), Z.expr.filters.animated = function(t) {
    return Z.grep(Z.timers, function(e) {
     return t === e.elem;
    }).length;
   };
   var Ne = t.document.documentElement;
   Z.offset = {
    setOffset: function(t, e, n) {
     var i, r, o, s, a, c, u, l = Z.css(t, "position"), h = Z(t), p = {};
     "static" === l && (t.style.position = "relative"), a = h.offset(), o = Z.css(t, "top"), 
     c = Z.css(t, "left"), u = ("absolute" === l || "fixed" === l) && (o + c).indexOf("auto") > -1, 
     u ? (i = h.position(), s = i.top, r = i.left) : (s = parseFloat(o) || 0, r = parseFloat(c) || 0), 
     Z.isFunction(e) && (e = e.call(t, n, a)), null != e.top && (p.top = e.top - a.top + s), 
     null != e.left && (p.left = e.left - a.left + r), "using" in e ? e.using.call(t, p) : h.css(p);
    }
   }, Z.fn.extend({
    offset: function(t) {
     if (arguments.length) return void 0 === t ? this : this.each(function(e) {
      Z.offset.setOffset(this, t, e);
     });
     var e, n, i = this[0], r = {
      top: 0,
      left: 0
     }, o = i && i.ownerDocument;
     if (o) return e = o.documentElement, Z.contains(e, i) ? (typeof i.getBoundingClientRect !== St && (r = i.getBoundingClientRect()), 
     n = q(o), {
      top: r.top + n.pageYOffset - e.clientTop,
      left: r.left + n.pageXOffset - e.clientLeft
     }) : r;
    },
    position: function() {
     if (this[0]) {
      var t, e, n = this[0], i = {
       top: 0,
       left: 0
      };
      return "fixed" === Z.css(n, "position") ? e = n.getBoundingClientRect() : (t = this.offsetParent(), 
      e = this.offset(), Z.nodeName(t[0], "html") || (i = t.offset()), i.top += Z.css(t[0], "borderTopWidth", !0), 
      i.left += Z.css(t[0], "borderLeftWidth", !0)), {
       top: e.top - i.top - Z.css(n, "marginTop", !0),
       left: e.left - i.left - Z.css(n, "marginLeft", !0)
      };
     }
    },
    offsetParent: function() {
     return this.map(function() {
      for (var t = this.offsetParent || Ne; t && !Z.nodeName(t, "html") && "static" === Z.css(t, "position"); ) t = t.offsetParent;
      return t || Ne;
     });
    }
   }), Z.each({
    scrollLeft: "pageXOffset",
    scrollTop: "pageYOffset"
   }, function(e, n) {
    var i = "pageYOffset" === n;
    Z.fn[e] = function(r) {
     return gt(this, function(e, r, o) {
      var s = q(e);
      return void 0 === o ? s ? s[n] : e[r] : void (s ? s.scrollTo(i ? t.pageXOffset : o, i ? o : t.pageYOffset) : e[r] = o);
     }, e, r, arguments.length, null);
    };
   }), Z.each([ "top", "left" ], function(t, e) {
    Z.cssHooks[e] = x(J.pixelPosition, function(t, n) {
     return n ? (n = _(t, e), Ft.test(n) ? Z(t).position()[e] + "px" : n) : void 0;
    });
   }), Z.each({
    Height: "height",
    Width: "width"
   }, function(t, e) {
    Z.each({
     padding: "inner" + t,
     content: e,
     "": "outer" + t
    }, function(n, i) {
     Z.fn[i] = function(i, r) {
      var o = arguments.length && (n || "boolean" != typeof i), s = n || (i === !0 || r === !0 ? "margin" : "border");
      return gt(this, function(e, n, i) {
       var r;
       return Z.isWindow(e) ? e.document.documentElement["client" + t] : 9 === e.nodeType ? (r = e.documentElement, 
       Math.max(e.body["scroll" + t], r["scroll" + t], e.body["offset" + t], r["offset" + t], r["client" + t])) : void 0 === i ? Z.css(e, n, s) : Z.style(e, n, i, s);
      }, e, o ? i : void 0, o, null);
     };
    });
   }), Z.fn.size = function() {
    return this.length;
   }, Z.fn.andSelf = Z.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
    return Z;
   });
   var Re = t.jQuery, He = t.$;
   return Z.noConflict = function(e) {
    return t.$ === Z && (t.$ = He), e && t.jQuery === Z && (t.jQuery = Re), Z;
   }, typeof e === St && (t.jQuery = t.$ = Z), Z;
  });
 }, {} ],
 162: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   if (!(t && t instanceof Array)) throw new Error("invalids players, type: " + typeof t + ", " + t);
   if (0 === t.length) throw new Error("players.length === 0");
   if (!(t[0] instanceof o)) throw new Error("players[0] !== Player, but: " + t[0]);
   if (void 0 === e) throw new Error("opts undefined");
   if ("object" != typeof e) throw new Error("invalid opts, type: " + typeof e);
   if (n !== !0 && n !== !1) throw new Error("online invalid value: " + JSON.stringify(n));
   r.call(this, {
    wildcard: !1
   }), this.online = n, this.players = t, this._playerCurr = void 0, this._pidsWin = [], 
   this._endedMinPlayers = !1, this._ready = !1, this.ended = !1, this.opts = e, this.chain = s.chain(e), 
   this._msCountdown = 0, this._tsCountdownStart = 0, this._ivEmitTurnTime = void 0, 
   this._countNextPlayer = 0;
  }
  var i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = t("./Player"), s = t("./OptsParser2"), a = "Game", c = !0;
  n.prototype = Object.create(r.prototype), n.prototype.MS_TURN = 3e4, n.prototype.ready = function() {
   if (this._ready) throw new Error("ready called before, this must not happen");
   this._ready = !0;
  }, n.prototype.isReady = function() {
   return this._ready;
  }, n.prototype.next = function() {
   if (void 0 === this._playerCurr) throw new Error("playerCurr undefined");
   var t = this.getPlayerNext(this._playerCurr.id);
   return i.trace(a, "next()", t.id), this.setPidCurr(t.id), t;
  }, n.prototype.getPlayerNext = function(t) {
   for (var e, n = this.getIndex(t), i = n + 1, r = n + this.players.length; r >= i; i++) {
    var o = this.players[i >= this.players.length ? i - this.players.length : i];
    if (o.leftGame !== !0) {
     e = o;
     break;
    }
   }
   return e;
  }, n.prototype.keep = function() {
   if (!this._playerCurr) throw new Error("keep() but this._playerCurr undefined");
   this.setPidCurr(this._playerCurr.id);
  }, n.prototype.setPidCurr = function(t) {
   if (t && this.ended) throw new Error("setPidCurr() but game.ended");
   var e;
   if (void 0 !== t && (e = this.getPlayer(t), !e)) throw new Error("setPidCurr() invalid pid " + t);
   var n = this._playerCurr;
   this._playerCurr = e, i.trace(a, "setPidCurr() " + t), this.emit("player", e, n, this._countNextPlayer++);
  }, n.prototype.setPidWin = function(t) {
   if (void 0 === this.getPlayer(t)) throw new Error("player not found: " + t);
   if (i.debug(a, "setPidWin: " + t), -1 !== this._pidsWin.indexOf(t)) throw new Error("already added to _pidsWin: " + t);
   this._pidsWin.push(t);
  }, n.prototype.isPidWin = function(t) {
   if ("string" != typeof t && "number" != typeof t) throw new Error("wrong type: " + typeof t);
   if (void 0 === this.getPlayer(t)) throw new Error("player not found: " + t);
   return -1 !== this._pidsWin.indexOf(t);
  }, n.prototype.isPlayerCurr = function(t) {
   return this._playerCurr && this._playerCurr === t;
  }, n.prototype.isPidCurr = function(t) {
   return this._playerCurr && this._playerCurr.id === t;
  }, n.prototype.getPidCurr = function() {
   return this._playerCurr ? this._playerCurr.id : void 0;
  }, n.prototype.getPlayerCurr = function() {
   return this._playerCurr;
  }, n.prototype.getPidsWin = function() {
   return this._pidsWin.slice(0);
  }, n.prototype.setPidsWin = function(t) {
   if (!(t instanceof Array)) throw new Error("pids not array");
   this._pidsWin = t.slice(0);
  }, n.prototype.end = function() {
   if (this.ended === !0) throw new Error("this.ended is already true");
   void 0 !== this._ivEmitTurnTime && (clearInterval(this._ivEmitTurnTime), delete this._ivEmitTurnTime), 
   i.trace(a, "end()"), this.ended = !0, this.emit("end", this._pidsWin);
  }, n.prototype.abort = function() {
   return this.ended === !0 ? void i.trace(a, "abort(), but game already ended") : (this.emit("abort"), 
   void this.end());
  }, n.prototype.leave = function(t) {
   i.trace(a, "leave() pid " + t);
   var e = this.getPlayer(t);
   return e ? e.leftGame ? (i.trace(a, "leave() but already left game", t), !1) : this.ended === !0 ? !1 : (e.leftGame = !0, 
   this.emit("leave", e), !0) : (i.warn(a, "leave(), player not found"), !1);
  }, n.prototype.rejoin = function(t) {
   if (i.trace(a, "reconnect() pid " + t), this.ended === !0) return !1;
   var e = this.getPlayer(t);
   return e ? (e.leftGame = !1, this.emit("rejoin", t), !0) : (i.warn(a, "reconnect(), player not found"), 
   !1);
  }, n.prototype.getPlayer = function(t) {
   for (var e = 0, n = this.players.length; n > e; e++) if (this.players[e].id === t) return this.players[e];
   throw new Error("player not found by id: " + t);
  }, n.prototype.getIndex = function(t) {
   for (var e = 0, n = this.players.length; n > e; e++) if (this.players[e].id === t) return e;
   throw new Error("index not found by id: " + t);
  }, n.prototype.startCountdown = function(t) {
   i.trace(a, "startCountdown() " + t + "ms"), this._msCountdown = t, this._tsCountdownStart = new Date().getTime(), 
   this.emit("turntime", this._msCountdown), void 0 !== this._ivEmitTurnTime && clearInterval(this._ivEmitTurnTime), 
   this._ivEmitTurnTime = setInterval(function() {
    var t = this._msCountdown - (new Date().getTime() - this._tsCountdownStart);
    i.trace(a, "interval turn time, remain " + t + ", msTurnTime " + this._msCountdown), 
    0 >= t ? (c && i.debug(a, "exceed turn time by pid " + this.getPidCurr()), this.emit("exceed", this.getPidCurr()), 
    this.stopCountdown()) : this.emit("turntime", t, this._msCountdown);
   }.bind(this), 1e3);
  }, n.prototype.stopCountdown = function() {
   return void 0 === this._ivEmitTurnTime ? !1 : (clearInterval(this._ivEmitTurnTime), 
   delete this._ivEmitTurnTime, !0);
  }, n.prototype.getCountdownRemain = function() {
   var t = this._msCountdown - (new Date().getTime() - this._tsCountdownStart);
   return 0 > t ? 0 : t;
  }, n.prototype.debugCountdownExceed = function() {
   this.stopCountdown() && (i.trace(a, "debugCountdownExceed()"), this.emit("exceed", this.getPidCurr()));
  }, n.prototype.launchBot = function() {
   if (this.ended) throw new Error("launchBot() but game.ended, pid " + this.getPidCurr());
   if (!this.getPidCurr()) throw new Error("launchBot() but this.getPidCurr() undefined");
   this.emit("launchbot", this.getPidCurr());
  }, e.exports = n;
 }, {
  "./OptsParser2": 163,
  "./Player": 164,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 163: [ function(t, e) {
  "use strict";
  var n = {}, i = {}, r = {}, o = function(t, e, i, r, s, a) {
   if (a = a || {}, r = r || [], s = s || n, !s[t]) throw new Error("no registerChain called for " + t);
   s = s[t], r.push(t), Object.keys(e).forEach(function(t) {
    return s[t] ? (console.log("step into", t), void o(t, e[t], i, r.slice(), s, a)) : void i(r.slice(), t, e[t]);
   }, this);
  }, s = function(t, e, i, r) {
   if (!t || 0 === t.length) throw new Error("chain.length === 0");
   i = void 0 !== i ? i : 0, e = e || n, r = r || {};
   var o = t[i], a = "chain_" + t.slice(0, i + 1).join("_");
   if (0 === i && "gtype" === o) throw new Error("key gtype in chain is reserved for serverside, use something different");
   if (e = e[o], r[a] = [], !e) throw new Error("no optsChain registered for " + o);
   for (var c in e) {
    {
     e[c];
    }
    r[a].push(c), c === t[i + 1] && s(t, e, i + 1, r);
   }
   return 0 === r[a].length && delete r[a], r;
  }, a = function(t, e, r, o, s, c) {
   if (!e || 0 === e.length) throw new Error("chain.length === 0");
   c = void 0 !== c ? c : 0, r = r || {}, s = s || n, o = o || i[t];
   var u = e[c], l = e[c + 1], h = "chain_" + e.slice(0, c + 1).join("_");
   o = o[u], s = s[u];
   for (var p in o) {
    var f = o[p];
    if (!s[p]) {
     if (p === h) throw new Error("extra opts must no contain values for chain keys");
     if (void 0 !== n[p]) throw new Error("opts.extra, key '" + p + "' is a optsChain key and must NOT be used");
     if ("chain" === p) throw new Error("key cannot be used");
     if ("gtype" === p) throw new Error("reserved for serverside");
     r[p] = f;
    }
   }
   return void 0 !== l && void 0 !== o[l] && a(t, e, r, o, s, c + 1), r;
  }, c = function(t, e, i, o, s) {
   if (!t || 0 === t.length) throw new Error("chain.length === 0");
   o = void 0 !== o ? o : 0, s = s || {
    chain: t[0],
    "public": "quick"
   }, e = e || r, i = i || n;
   var a = t[o], u = t[o + 1], l = "chain_" + t.slice(0, o + 1).join("_");
   e = e[a] || {}, i = i[a];
   for (var h in e) {
    var p = e[h];
    i[h] || (s[h] = p);
   }
   return s[l] = u, void 0 !== u && void 0 !== e[u] && c(t, e, i, o + 1, s), s;
  };
  e.exports = {
   CHAIN_DELIMITER: "_",
   TYPE_EXTRA_DEFAULT: "default",
   TYPE_EXTRA_SP: "sp",
   TYPE_EXTRA_MP: "mp",
   getGameTypes: function() {
    return Object.keys(n);
   },
   validateGameType: function(t) {
    return -1 !== this.getGameTypes().indexOf(t);
   },
   chain: function(t) {
    if (!t) throw new Error("opts invalid");
    if (!t.chain) throw new Error("opts.chain missing");
    var e = [], n = function(i) {
     var r = t[i], o = i + "_" + r;
     r && (e.push(r), t[o] && n(o));
    };
    return n("chain"), e;
   },
   get: function(t, e) {
    var n = s(t);
    return a(this.TYPE_EXTRA_DEFAULT, t, n), e && e.forEach(function(e) {
     e !== this.TYPE_EXTRA_DEFAULT && a(e, t, n);
    }, this), n;
   },
   getOptsChain: function(t) {
    return s(t);
   },
   getOptsExtra: function(t, e) {
    return a(e || this.TYPE_EXTRA_DEFAULT, t);
   },
   getDefaults: function(t, e) {
    if (!t || 0 === t.length) throw new Error("invalid chain");
    var n = c(t), i = this.get(this.chain(n), e);
    return Object.keys(n).forEach(function(t) {
     "chain" !== t && (i[t] || delete n[t]);
    }, this), n;
   },
   getDefaultChain: function(t) {
    var e = [], n = function(i) {
     if (e.push(i), !r[t]) throw new Error("no optsDefault registered for " + t);
     var o = r[t]["chain_" + e.join("_")];
     o && n(o);
    };
    if (n(t), !this.validateChain(e, !1)) throw new Error("defaults not enough for complete chain construction");
    return e;
   },
   validateChain: function(t, e) {
    if (!(t && t instanceof Array && 0 !== t.length)) return !1;
    for (var i = n, r = 0; r < t.length; r++) {
     var o = t[r], s = i[o];
     if (void 0 === s) return !1;
     if (i = s, e !== !0 && r === t.length - 1 && Object.keys(i).length > 0) return !1;
    }
    return !0;
   },
   registerChain: function(t, e) {
    if (n[t]) throw new Error("already exist");
    var i = function(t) {
     if ("object" == typeof t) return Object.keys(t).forEach(i);
     if (-1 !== t.indexOf(this.CHAIN_DELIMITER)) throw new Error("_ is not allowed in chain names");
    }.bind(this);
    i(e), n[t] = e, this.registerExtra(this.TYPE_EXTRA_MP, t, {
     "public": [ "quick", "true", "false" ]
    });
   },
   registerExtra: function(t, e, r) {
    if (!n[e]) throw new Error("you must registerChain() before registerChain()");
    if (i[t] || (i[t] = {}), i[t][e] || (i[t][e] = {}), r.chain) throw new Error("must not have .chain key, this is reserved for internal use");
    var o = function(t, e, n) {
     Object.keys(n).forEach(function(i) {
      if (t[i]) e[i] || (e[i] = {}), o(t[i], e[i], n[i]); else {
       if (!(n[i] instanceof Array)) throw new Error("must be array");
       e[i] = n[i];
      }
     });
    };
    o(n[e], i[t][e], r);
   },
   registerDefaults: function(t, e) {
    if ("object" != typeof e) throw new Error("defaults not object");
    if (!n[t]) throw new Error("please registerChain() before registerDefaults()");
    if (o(t, e, function(t, e, n) {
     if (0 !== e.indexOf("chain_")) {
      var i = this.get(t, [ this.TYPE_EXTRA_MP, this.TYPE_EXTRA_SP ]), r = i[e];
      if (!r) throw new Error("option '" + e + "' does not exist for chain '" + JSON.stringify(t) + "'");
      if (-1 === r.indexOf(n)) throw new Error("option '" + e + "' on chain '" + JSON.stringify(t) + "' does not have value '" + n + "'");
     }
    }.bind(this)), e.chain = t, r[t]) throw new Error("already exist");
    if (!this.validateChain(this.chain(e), !1)) throw new Error("defaults do not represent a full chain");
    r[t] = e;
   },
   convert: function(t) {
    if (!t.chain || !t.chain instanceof Array || 0 === t.chain.length) throw new Error("invalid chain");
    var e = t.chain[0], n = {};
    return n.chain = e, Object.keys(t).forEach(function(i) {
     "chain" !== i && (i === e || 0 === i.indexOf(e + "_") ? n["chain_" + i] = t[i] : n[i] = t[i]);
    }), n;
   },
   deconvert: function(t) {
    var e = {};
    return e.chain = this.chain(t), Object.keys(t).forEach(function(n) {
     "chain" !== n && ("chain" === n || 0 === n.indexOf("chain_") ? e[n.replace("chain_", "")] = t[n] : e[n] = t[n]);
    }), e;
   }
  };
 }, {} ],
 164: [ function(t, e) {
  "use strict";
  function n(t, e, n, i) {
   if (void 0 === t) throw new Error("id undefined");
   if ("string" != typeof t) throw new Error("id is not a string");
   if ("string" != typeof e) throw new Error("team is not a string");
   this.id = t, this.team = e, this.name = n, this.avatar = !1, this.isBot = i === !0 ? !0 : !1, 
   this.botSkill = 1, this.leftGame = !1, this.exceedCount = 0, this.score = 0;
  }
  e.exports = n;
 }, {} ],
 165: [ function(t, e) {
  "use strict";
  function n() {
   this._maps = {};
  }
  var i = t("jslib/utils/Log"), r = t("jslib/utils/ChainMap"), o = t("./Game"), s = t("./OptsParser2"), a = "Registry";
  n.prototype.MAP_PLAYER_CREATOR = "player-creator", n.prototype.MAP_BOT_CREATOR = "bot-creator", 
  n.prototype.MAP_GAME_STARTER = "game-starter", n.prototype.MAP_MP_HANDLER = "mp-handler", 
  n.prototype.MAP_SERVER_HANDLER = "server-handler", n.prototype._getMap = function(t) {
   return this._maps[t] || (this._maps[t] = new r()), this._maps[t];
  }, n.prototype.registerPlayerCreator = function(t, e) {
   this._getMap(this.MAP_PLAYER_CREATOR).set(t, e);
  }, n.prototype.registerGameStarter = function(t, e) {
   this._getMap(this.MAP_GAME_STARTER).set(t, e);
  }, n.prototype.registerMPHandler = function(t, e) {
   this._getMap(this.MAP_MP_HANDLER).set(t, e);
  }, n.prototype.registerServerHandler = function(t, e) {
   this._getMap(this.MAP_SERVER_HANDLER).set(t, e);
  }, n.prototype.createGame = function(t, e, n) {
   if (void 0 === t) throw new Error("players undefined");
   if (void 0 === e) throw new Error("opts undefined");
   if (!e.chain || "string" != typeof e.chain) throw new Error("invalid opts.chain key, must be string (gtype): " + JSON.stringify(e.chain));
   var r = s.chain(e);
   if (!s.validateChain(r)) throw new Error("chain could not be validated, " + JSON.stringify(r));
   var c = this._getMap(this.MAP_GAME_STARTER).find(r);
   if (void 0 === c) throw new Error("no registered starter for chain: " + JSON.stringify(r));
   i.trace(a, "create game, chain '" + r.join("-") + "'");
   var u = c(t, e, n);
   if (!(u instanceof o)) throw new Error("Game instance required, but is: " + u);
   return u;
  }, n.prototype.createPlayersSP = function(t) {
   var e = s.chain(t), n = this._getMap(this.MAP_PLAYER_CREATOR).find(e);
   if (!t) throw new Error("opts missing");
   if (void 0 === n) throw new Error("no registered player creator for chain: " + JSON.stringify(e));
   return n(t);
  }, n.prototype.createMPHandler = function(t, e, n) {
   if (void 0 === n) throw new Error("pidLocal undefined");
   if (!(e instanceof o)) throw new Error("Game instance required, but is: " + e);
   var i = this._getMap(this.MAP_MP_HANDLER).find(e.chain);
   if (void 0 === i) throw new Error("no registered mphandler for: " + JSON.stringify(e.chain));
   var r = i(t, e, n);
   if (void 0 === r) throw new Error("mphandler undefined");
   return r;
  }, n.prototype.createServerHandler = function(t, e) {
   if (!(e && e instanceof o)) throw new Error("invalid game, " + e);
   var n = this._getMap(this.MAP_SERVER_HANDLER).find(e.chain);
   if (void 0 === n) throw new Error("no registered serverHandler for: " + JSON.stringify(e.chain));
   i.trace(a, "createServerHandler()", e.chain);
   var r = n(t, e);
   if (void 0 === r) throw new Error("serverHandler undefined");
   return r;
  }, n.prototype.createShimmedSetup = function(t, e) {
   var n, r = {}, o = this.createGame(t, e, !1), s = {
    handleGamePkt: function(t) {
     setTimeout(function() {
      n.handle(t.sid, t.cid, t.json);
     }, 0);
    },
    sendRoomPktTo: function(t, e) {
     i.trace(a, "sendRoomPktTo() " + t, e), setTimeout(function() {
      r[t].handle(e);
     }, 0);
    },
    sendRoomPkt: function(t, e) {
     if (e && !r[e]) throw new Error("sidSkip not found, this might be an error, " + e);
     Object.keys(r).forEach(function(n) {
      n !== e && (i.trace(a, "sendRoomPkt() " + n, t, e), setTimeout(function() {
       r[n].handle(t);
      }, 0));
     });
    }
   };
   return n = this.createServerHandler(s, o), t.forEach(function(n) {
    var o = n.id, c = {
     sendPkt: function(t) {
      setTimeout(function() {
       s.handleGamePkt({
        sid: o,
        cid: o,
        json: t
       });
      }, 0);
     },
     on: function() {},
     off: function() {}
    }, u = this.createGame(t, e, !0), l = this.createMPHandler(c, u, o);
    u.ready(), r[o] = l, i.trace(a, "createShimmedSetup() for pid " + o);
   }, this), o.ready(), {
    mpHandlers: r,
    serverGame: o,
    serverHandler: n
   };
  }, e.exports = new n();
 }, {
  "./Game": 162,
  "./OptsParser2": 163,
  "jslib/utils/ChainMap": 186,
  "jslib/utils/Log": 187
 } ],
 166: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this.pid = t, this.game = n, n.on("launchbot", function(t) {
    this.game.ended || t === this.pid && (i.trace(r, "make bot move", t), this.run());
   }.bind(this));
  }
  var i = t("jslib/utils/Log"), r = "ExampleBot";
  n.prototype.run = function() {
   return "endmove" === this.game.opts.bottype ? void this.game.makeEndMove(this.pid) : void this.game.makeMove(this.pid);
  }, e.exports = n;
 }, {
  "jslib/utils/Log": 187
 } ],
 167: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   r.call(this, t, e, n), this._movesMade = 0;
  }
  var i = t("jslib/utils/Log"), r = t("../Game"), o = "ExampleGame";
  n.prototype = Object.create(r.prototype), n.prototype.MS_TURN = 3e4, n.prototype.ready = function() {
   r.prototype.ready.call(this), this.online || this.setPidCurr(this.players[Math.floor(Math.random() * this.players.length)].id);
  }, n.prototype.makeMove = function(t) {
   return this.getPidCurr() !== t ? (i.error(o, "makeMove() not current pid " + t), 
   !1) : (this._movesMade++, this._setNextPlayer(), !0);
  }, n.prototype.makeEndMove = function(t) {
   return this.getPidCurr() !== t ? (i.error(o, "makeEndMove() not current pid " + t), 
   !1) : (this.emit("endmove", t), this.setPidWin(this.getPidCurr()), void this.end());
  }, n.prototype._setNextPlayer = function() {
   var t = this.players.length, e = this.players.indexOf(this.getPlayerCurr());
   if (-1 === e) throw new Error("playerCurr not found");
   for (var n = 0; t + 1 > n; n++) {
    for (var i = e + 1 + n; i >= t; ) i -= t;
    return this.setPidCurr(this.players[i].id), !0;
   }
   return !1;
  }, n.prototype.exportStatus = function() {
   return {};
  }, n.prototype.restoreStatus = function() {
   return !0;
  }, e.exports = n;
 }, {
  "../Game": 162,
  "jslib/utils/Log": 187
 } ],
 168: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   this.room = t, this.game = e, this.sid = n, this.toBot = void 0, i.trace(o, "local sid " + this.sid), 
   this._drawRequest = !1, this._toTurnTime = void 0, this._onGamePlayer = function(t) {
    clearTimeout(this.toBot), t && this.sid === t.id && (this.game.startCountdown(this.game.MS_TURN), 
    t.isBot && (this.toBot = setTimeout(function() {
     this.game.launchBot();
    }.bind(this), 50)));
   }.bind(this), this._onEndMove = function() {
    this.room.sendPkt({
     t: "endmove"
    });
   }.bind(this), this._onGameEnd = function() {
    clearTimeout(this.toBot), this.destroy();
   }.bind(this), this.game.on("player", this._onGamePlayer), this.game.on("endmove", this._onEndMove), 
   this.game.on("end", this._onGameEnd), this._onRoomRejoin = function(t) {
    0 === t && (i.debug(o, "_onRoomRejoin() rejoined groom, request resync"), this.requestStatus());
   }.bind(this), this.room.on("rejoin", this._onRoomRejoin);
  }
  var i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = "MPHandlerExample";
  n.prototype = Object.create(r.prototype), n.prototype.destroy = function() {
   this.game.off("player", this._onGamePlayer), this.game.off("endmove", this._onEndMove), 
   this.game.off("end", this._onGameEnd), this.room.off("rejoin", this._onRoomRejoin);
  }, n.prototype.handle = function(t) {
   switch (t.t) {
   case "move":
    i.trace(o, "handle() player, move"), this.game.makeMove(t.pid);
    break;

   case "endmove":
    i.trace(o, "handle() player, endmove"), this.game.makeEndMove(t.pid);
    break;

   case "player":
    i.trace(o, "handle() player, pid " + t.pid), this.game.setPidCurr(t.pid);
    break;

   case "status":
    i.trace(o, "handle() status", t.status), this.emit("status", t.status), this.game.restoreStatus(t.status);
   }
  }, n.prototype.requestStatus = function() {
   this.room.sendPkt({
    t: "reqstatus"
   });
  }, e.exports = n;
 }, {
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 169: [ function(t, e) {
  "use strict";
  function n(t, e) {
   this.game = e, this.room = t, this._cbPlayer = function(t) {
    i.trace(r, "_cbPlayer() pid " + t.id), this.game.startCountdown(e.MS_TURN + 3e4), 
    this.room.sendRoomPkt({
     t: "player",
     pid: t.id
    }), t.leftGame && i.trace(r, "_cbPlayer() left game, make random move");
   }.bind(this), this._cbLeave = function(t) {
    i.trace(r, "_cbLeave() pid " + t.id);
   }.bind(this), this._cbMove = function() {}.bind(this), this._cbEndMove = function(t) {
    this.room.sendRoomPkt({
     t: "endmove",
     pid: t
    }, t);
   }.bind(this), this._cbRestore = function() {
    i.trace(r, "_cbRestore()"), this.game.players.forEach(function(t) {
     this.room.sendRoomPktTo(t.id, {
      t: "status",
      status: this.game.exportStatus(t.id)
     });
    }, this);
   }.bind(this), this._cbExceed = function(t) {
    i.trace(r, "_cbExceed() pid " + t), this._handleExceed(t);
   }.bind(this), this._cbEnd = function() {
    i.trace(r, "_cbEnd()");
   }.bind(this), this.game.on("leave", this._cbLeave), this.game.on("player", this._cbPlayer), 
   this.game.on("exceed", this._cbExceed), this.game.on("restore", this._cbRestore), 
   this.game.on("move", this._cbMove), this.game.on("endmove", this._cbEndMove), this.game.on("end", this._cbEnd);
  }
  var i = t("jslib/utils/Log"), r = "ServerHandlerExample";
  n.prototype.destroy = function() {
   this.game.off("leave", this._cbLeave), this.game.off("player", this._cbPlayer), 
   this.game.off("exceed", this._cbExceed), this.game.off("restore", this._cbRestore), 
   this.game.off("move", this._cbMove), this.game.off("endmove", this._cbEndMove), 
   this.game.off("end", this._cbEnd);
  }, n.prototype._handleExceed = function(t) {
   return this.game.getPidCurr() !== t ? void i.error(r, "_handleExceed(), but is not playerCurr") : void i.trace(r, "_handleExceed() pid " + t);
  }, n.prototype._handleReqStatus = function(t) {
   i.trace(r, "_handleReqStatus " + t), this.room.sendRoomPktTo(t, {
    t: "status",
    status: this.game.exportStatus(t)
   });
  }, n.prototype._handleMoveEnd = function(t) {
   i.trace(r, "_handleMoveEnd " + t);
  }, n.prototype.handle = function(t, e, n) {
   switch (n.t) {
   case "exceed":
    i.debug(r, "handle(), player exceed time '" + t + "'"), this._handleExceed(t);
    break;

   case "reqstatus":
    i.trace(r, "handle(), request status by " + t), this._handleReqStatus(t);
    break;

   case "move":
    this.game.makeMove(t);
    break;

   case "endmove":
    this.game.makeEndMove(t);
    break;

   default:
    i.warn(r, "handle(), unhandled type: " + n.t);
   }
  }, e.exports = n;
 }, {
  "jslib/utils/Log": 187
 } ],
 170: [ function(t, e) {
  "use strict";
  var n = t("../Registry"), i = t("../OptsParser2"), r = t("./Game"), o = t("./MPHandler"), s = t("./ServerHandler"), a = t("../Player"), c = t("./Bot"), u = "example";
  i.registerChain(u, {
   sub1: {},
   sub2: {},
   sub3: {
    subsub1: {},
    subsub2: {}
   }
  }), i.registerExtra(i.TYPE_EXTRA_DEFAULT, u, {
   bottype: [ "endmove", "move" ],
   size: [ "2", "3", "4" ]
  }), i.registerExtra(i.TYPE_EXTRA_SP, u, {
   opponent: [ "boteasy", "botmedium", "bothard", "local" ]
  }), i.registerDefaults(u, {
   chain_example: "sub3",
   chain_example_sub3: "subsub1",
   bottype: "endmove",
   size: "2",
   opponent: "botmedium"
  }), n.registerGameStarter([ u ], function(t, e, n) {
   for (var i = new r(t, e, n), o = 0; o < t.length; o++) {
    var s = t[o];
    s.isBot === !0 && new c(s.id, 1, i);
   }
   var a;
   return i.on("player", function(t) {
    t && t.isBot && (a = setTimeout(function() {
     i.launchBot();
    }, 1100));
   }), i.on("restore", function() {
    clearTimeout(a);
   }), i.on("end", function() {
    clearTimeout(a);
   }), i;
  }), n.registerPlayerCreator([ u ], function(t) {
   var e = [], n = parseInt(t.size, 10), i = [], r = 1;
   switch (t.opponent) {
   case "boteasy":
    r = .5;
    break;

   case "botmedium":
    r = .85;
    break;

   case "bothard":
    r = 1;
   }
   for (var o = 0; n > o; o++) {
    var s = "" + (o + 1);
    if ("local" === t.opponent) i.push(s), e.push(new a(s, s, "Player " + s)); else if (0 === o) i.push(s), 
    e.push(new a(s, s, "Player " + s)); else {
     var c = new a(s, s, "Bot " + s, !0);
     c.botSkill = r, e.push(c);
    }
   }
   return e;
  }), n.registerMPHandler([ u ], function(t, e, n) {
   return new o(t, e, n);
  }), n.registerServerHandler([ u ], function(t, e) {
   return new s(t, e);
  }), e.exports = u;
 }, {
  "../OptsParser2": 163,
  "../Player": 164,
  "../Registry": 165,
  "./Bot": 166,
  "./Game": 167,
  "./MPHandler": 168,
  "./ServerHandler": 169
 } ],
 171: [ function(t, e) {
  "use strict";
  var n = t("./EventEmitter"), i = function(t) {
   this.msCollect = t, this._toRun = void 0, this._tsRun = 0, this._queue = [];
  };
  i.prototype = Object.create(n.prototype), i.prototype.reset = function() {
   this._queue = [], clearTimeout(this._toRun);
  }, i.prototype.push = function(t) {
   this._queue.push(t), void 0 === this._toRun && (this._toRun = setTimeout(function() {
    this.run();
   }.bind(this), this._getDelay()));
  }, i.prototype.run = function() {
   delete this._toRun, this._tsRun = new Date().getTime();
   var t = this._queue;
   this._queue = [];
   for (var e = 0; e < t.length; e++) t[e]();
   this.emit("run", t.length);
  }, i.prototype._getDelay = function() {
   var t = new Date().getTime(), e = t - this._tsRun;
   return e > this.msCollect ? 0 : this.msCollect - e;
  }, e.exports = i;
 }, {
  "./EventEmitter": 172
 } ],
 172: [ function(t, e) {
  "use strict";
  function n() {
   this._events = {}, this._conf && i.call(this, this._conf);
  }
  function i(t) {
   t && (this._conf = t, t.delimiter && (this.delimiter = t.delimiter), t.maxListeners && (this._events.maxListeners = t.maxListeners), 
   t.wildcard && (this.wildcard = t.wildcard), t.newListener && (this.newListener = t.newListener), 
   this.wildcard && (this.listenerTree = {}));
  }
  function r(t) {
   this._events = {}, this.newListener = !1, i.call(this, t);
  }
  function o(t, e, n, i) {
   if (!n) return [];
   var r, s, a, c, u, l, h, p = [], f = e.length, d = e[i], v = e[i + 1];
   if (i === f && n._listeners) {
    if ("function" == typeof n._listeners) return t && t.push(n._listeners), [ n ];
    for (r = 0, s = n._listeners.length; s > r; r++) t && t.push(n._listeners[r]);
    return [ n ];
   }
   if ("*" === d || "**" === d || n[d]) {
    if ("*" === d) {
     for (a in n) "_listeners" !== a && n.hasOwnProperty(a) && (p = p.concat(o(t, e, n[a], i + 1)));
     return p;
    }
    if ("**" === d) {
     h = i + 1 === f || i + 2 === f && "*" === v, h && n._listeners && (p = p.concat(o(t, e, n, f)));
     for (a in n) "_listeners" !== a && n.hasOwnProperty(a) && ("*" === a || "**" === a ? (n[a]._listeners && !h && (p = p.concat(o(t, e, n[a], f))), 
     p = p.concat(o(t, e, n[a], i))) : p = p.concat(a === v ? o(t, e, n[a], i + 2) : o(t, e, n[a], i)));
     return p;
    }
    p = p.concat(o(t, e, n[d], i + 1));
   }
   if (c = n["*"], c && o(t, e, c, i + 1), u = n["**"]) if (f > i) {
    u._listeners && o(t, e, u, f);
    for (a in u) "_listeners" !== a && u.hasOwnProperty(a) && (a === v ? o(t, e, u[a], i + 2) : a === d ? o(t, e, u[a], i + 1) : (l = {}, 
    l[a] = u[a], o(t, e, {
     "**": l
    }, i + 1)));
   } else u._listeners ? o(t, e, u, f) : u["*"] && u["*"]._listeners && o(t, e, u["*"], f);
   return p;
  }
  function s(t, e) {
   t = "string" == typeof t ? t.split(this.delimiter) : t.slice();
   for (var n = 0, i = t.length; i > n + 1; n++) if ("**" === t[n] && "**" === t[n + 1]) return;
   for (var r = this.listenerTree, o = t.shift(); o; ) {
    if (r[o] || (r[o] = {}), r = r[o], 0 === t.length) {
     if (r._listeners) {
      if ("function" == typeof r._listeners) r._listeners = [ r._listeners, e ]; else if (a(r._listeners) && (r._listeners.push(e), 
      !r._listeners.warned)) {
       var s = c;
       "undefined" != typeof this._events.maxListeners && (s = this._events.maxListeners), 
       s > 0 && r._listeners.length > s && (r._listeners.warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", r._listeners.length), 
       console.trace());
      }
     } else r._listeners = e;
     return !0;
    }
    o = t.shift();
   }
   return !0;
  }
  var a = Array.isArray ? Array.isArray : function(t) {
   return "[object Array]" === Object.prototype.toString.call(t);
  }, c = 10;
  r.prototype.delimiter = ".", r.prototype.setMaxListeners = function(t) {
   this._events || n.call(this), this._events.maxListeners = t, this._conf || (this._conf = {}), 
   this._conf.maxListeners = t;
  }, r.prototype.event = "", r.prototype.once = function(t, e) {
   return this.many(t, 1, e), this;
  }, r.prototype.many = function(t, e, n) {
   function i() {
    0 === --e && r.off(t, i), n.apply(this, arguments);
   }
   var r = this;
   if ("function" != typeof n) throw new Error("many only accepts instances of Function");
   return i._origin = n, this.on(t, i), r;
  }, r.prototype.emit = function() {
   this._events || n.call(this);
   var t = arguments[0];
   if ("newListener" === t && !this.newListener && !this._events.newListener) return !1;
   if (this._all) {
    for (var e = arguments.length, i = new Array(e - 1), r = 1; e > r; r++) i[r - 1] = arguments[r];
    for (r = 0, e = this._all.length; e > r; r++) this.event = t, this._all[r].apply(this, i);
   }
   if ("error" === t && !(this._all || this._events.error || this.wildcard && this.listenerTree.error)) throw arguments[1] instanceof Error ? arguments[1] : new Error("Uncaught, unspecified 'error' event.");
   var s;
   if (this.wildcard) {
    s = [];
    var a = "string" == typeof t ? t.split(this.delimiter) : t.slice();
    o.call(this, s, a, this.listenerTree, 0);
   } else s = this._events[t];
   if ("function" == typeof s) {
    if (this.event = t, 1 === arguments.length) s.call(this); else if (arguments.length > 1) switch (arguments.length) {
    case 2:
     s.call(this, arguments[1]);
     break;

    case 3:
     s.call(this, arguments[1], arguments[2]);
     break;

    default:
     for (var e = arguments.length, i = new Array(e - 1), r = 1; e > r; r++) i[r - 1] = arguments[r];
     s.apply(this, i);
    }
    return !0;
   }
   if (s) {
    for (var e = arguments.length, i = new Array(e - 1), r = 1; e > r; r++) i[r - 1] = arguments[r];
    for (var c = s.slice(), r = 0, e = c.length; e > r; r++) this.event = t, c[r].apply(this, i);
    return c.length > 0 || !!this._all;
   }
   return !!this._all;
  }, r.prototype.on = function(t, e) {
   if ("function" == typeof t) return this.onAny(t), this;
   if ("function" != typeof e) throw new Error("on only accepts instances of Function");
   if (this._events || n.call(this), this.emit("newListener", t, e), this.wildcard) return s.call(this, t, e), 
   this;
   if (this._events[t]) {
    if ("function" == typeof this._events[t]) this._events[t] = [ this._events[t], e ]; else if (a(this._events[t]) && (this._events[t].push(e), 
    !this._events[t].warned)) {
     var i = c;
     "undefined" != typeof this._events.maxListeners && (i = this._events.maxListeners), 
     i > 0 && this._events[t].length > i && (this._events[t].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[t].length), 
     console.trace());
    }
   } else this._events[t] = e;
   return this;
  }, r.prototype.onAny = function(t) {
   if ("function" != typeof t) throw new Error("onAny only accepts instances of Function");
   return this._all || (this._all = []), this._all.push(t), this;
  }, r.prototype.addListener = r.prototype.on, r.prototype.off = function(t, e) {
   function n(t) {
    if (void 0 !== t) {
     var e = Object.keys(t);
     for (var i in e) {
      var r = e[i], o = t[r];
      o instanceof Function || (Object.keys(o).length > 0 && n(t[r]), 0 === Object.keys(o).length && delete t[r]);
     }
    }
   }
   if ("function" != typeof e) throw new Error("removeListener only takes instances of Function");
   var i, r = [];
   if (this.wildcard) {
    var s = "string" == typeof t ? t.split(this.delimiter) : t.slice();
    r = o.call(this, null, s, this.listenerTree, 0);
   } else {
    if (!this._events[t]) return this;
    i = this._events[t], r.push({
     _listeners: i
    });
   }
   for (var c = 0; c < r.length; c++) {
    var u = r[c];
    if (i = u._listeners, a(i)) {
     for (var l = -1, h = 0, p = i.length; p > h; h++) if (i[h] === e || i[h].listener && i[h].listener === e || i[h]._origin && i[h]._origin === e) {
      l = h;
      break;
     }
     if (0 > l) continue;
     return this.wildcard ? u._listeners.splice(l, 1) : this._events[t].splice(l, 1), 
     0 === i.length && (this.wildcard ? delete u._listeners : delete this._events[t]), 
     this;
    }
    (i === e || i.listener && i.listener === e || i._origin && i._origin === e) && (this.wildcard ? delete u._listeners : delete this._events[t]);
   }
   return n(this.listenerTree), this;
  }, r.prototype.offAny = function(t) {
   var e, n = 0, i = 0;
   if (t && this._all && this._all.length > 0) {
    for (e = this._all, n = 0, i = e.length; i > n; n++) if (t === e[n]) return e.splice(n, 1), 
    this;
   } else this._all = [];
   return this;
  }, r.prototype.removeListener = r.prototype.off, r.prototype.removeAllListeners = function(t) {
   if (0 === arguments.length) return !this._events || n.call(this), this;
   if (this.wildcard) for (var e = "string" == typeof t ? t.split(this.delimiter) : t.slice(), i = o.call(this, null, e, this.listenerTree, 0), r = 0; r < i.length; r++) {
    var s = i[r];
    s._listeners = null;
   } else {
    if (!this._events[t]) return this;
    this._events[t] = null;
   }
   return this;
  }, r.prototype.listeners = function(t) {
   if (this.wildcard) {
    var e = [], i = "string" == typeof t ? t.split(this.delimiter) : t.slice();
    return o.call(this, e, i, this.listenerTree, 0), e;
   }
   return this._events || n.call(this), this._events[t] || (this._events[t] = []), 
   a(this._events[t]) || (this._events[t] = [ this._events[t] ]), this._events[t];
  }, r.prototype.listenersAny = function() {
   return this._all ? this._all : [];
  }, e.exports = r;
 }, {} ],
 173: [ function(t, e) {
  "use strict";
  function n() {
   this._timeout = void 0, this._queue = [], this._tsLast = 0;
  }
  n.prototype.push = function(t, e, n) {
   e = parseInt(e, 10) || 0, n = parseInt(n, 10) || 0, this._queue.push({
    callback: t,
    delay: void 0 !== e ? e : 0,
    delayPrevMin: void 0 !== n ? n : 0
   }), void 0 === this._timeout && this._handle();
  }, n.prototype._handle = function() {
   if (0 !== this._queue.length) {
    var t = new Date().getTime(), e = this._queue.splice(0, 1)[0], n = e.delay, i = e.delayPrevMin, r = t - this._tsLast;
    i > r && (n += i - r);
    var o = function() {
     e.callback && e.callback(), this._tsLast = new Date().getTime(), this._timeout = void 0, 
     this._handle();
    }.bind(this);
    n > 0 ? this._timeout = setTimeout(o, n) : (this._timeout = !0, o());
   }
  }, n.prototype.empty = function() {
   this._queue = [];
  }, n.prototype.destroy = function() {
   void 0 !== this._timeout && this._timeout !== !0 && clearTimeout(this._timeout);
  }, e.exports = n;
 }, {} ],
 174: [ function(t, e) {
  "use strict";
  var n = t("./MurmurHash"), i = function(t) {
   this.count = t, this.max = parseInt("ffffffffffffffffffffffffffffffff", 16), this.min = 0;
  };
  i.prototype.index = function(t) {
   var e = n.x64.hash128(t), i = Math.floor(parseInt(e, 16) / this.max * this.count);
   return i;
  }, e.exports = i;
 }, {
  "./MurmurHash": 175
 } ],
 175: [ function(t, e, n) {
  !function(t, i) {
   "use strict";
   function r(t, e) {
    return (65535 & t) * e + (((t >>> 16) * e & 65535) << 16);
   }
   function o(t, e) {
    return t << e | t >>> 32 - e;
   }
   function s(t) {
    return t ^= t >>> 16, t = r(t, 2246822507), t ^= t >>> 13, t = r(t, 3266489909), 
    t ^= t >>> 16;
   }
   function a(t, e) {
    t = [ t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1] ], e = [ e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1] ];
    var n = [ 0, 0, 0, 0 ];
    return n[3] += t[3] + e[3], n[2] += n[3] >>> 16, n[3] &= 65535, n[2] += t[2] + e[2], 
    n[1] += n[2] >>> 16, n[2] &= 65535, n[1] += t[1] + e[1], n[0] += n[1] >>> 16, n[1] &= 65535, 
    n[0] += t[0] + e[0], n[0] &= 65535, [ n[0] << 16 | n[1], n[2] << 16 | n[3] ];
   }
   function c(t, e) {
    t = [ t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1] ], e = [ e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1] ];
    var n = [ 0, 0, 0, 0 ];
    return n[3] += t[3] * e[3], n[2] += n[3] >>> 16, n[3] &= 65535, n[2] += t[2] * e[3], 
    n[1] += n[2] >>> 16, n[2] &= 65535, n[2] += t[3] * e[2], n[1] += n[2] >>> 16, n[2] &= 65535, 
    n[1] += t[1] * e[3], n[0] += n[1] >>> 16, n[1] &= 65535, n[1] += t[2] * e[2], n[0] += n[1] >>> 16, 
    n[1] &= 65535, n[1] += t[3] * e[1], n[0] += n[1] >>> 16, n[1] &= 65535, n[0] += t[0] * e[3] + t[1] * e[2] + t[2] * e[1] + t[3] * e[0], 
    n[0] &= 65535, [ n[0] << 16 | n[1], n[2] << 16 | n[3] ];
   }
   function u(t, e) {
    return e %= 64, 32 === e ? [ t[1], t[0] ] : 32 > e ? [ t[0] << e | t[1] >>> 32 - e, t[1] << e | t[0] >>> 32 - e ] : (e -= 32, 
    [ t[1] << e | t[0] >>> 32 - e, t[0] << e | t[1] >>> 32 - e ]);
   }
   function l(t, e) {
    return e %= 64, 0 === e ? t : 32 > e ? [ t[0] << e | t[1] >>> 32 - e, t[1] << e ] : [ t[1] << e - 32, 0 ];
   }
   function h(t, e) {
    return [ t[0] ^ e[0], t[1] ^ e[1] ];
   }
   function p(t) {
    return t = h(t, [ 0, t[0] >>> 1 ]), t = c(t, [ 4283543511, 3981806797 ]), t = h(t, [ 0, t[0] >>> 1 ]), 
    t = c(t, [ 3301882366, 444984403 ]), t = h(t, [ 0, t[0] >>> 1 ]);
   }
   var f = {
    version: "2.1.2",
    x86: {},
    x64: {}
   };
   f.x86.hash32 = function(t, e) {
    t = t || "", e = e || 0;
    for (var n = t.length % 4, i = t.length - n, a = e, c = 0, u = 3432918353, l = 461845907, h = 0; i > h; h += 4) c = 255 & t.charCodeAt(h) | (255 & t.charCodeAt(h + 1)) << 8 | (255 & t.charCodeAt(h + 2)) << 16 | (255 & t.charCodeAt(h + 3)) << 24, 
    c = r(c, u), c = o(c, 15), c = r(c, l), a ^= c, a = o(a, 13), a = r(a, 5) + 3864292196;
    switch (c = 0, n) {
    case 3:
     c ^= (255 & t.charCodeAt(h + 2)) << 16;

    case 2:
     c ^= (255 & t.charCodeAt(h + 1)) << 8;

    case 1:
     c ^= 255 & t.charCodeAt(h), c = r(c, u), c = o(c, 15), c = r(c, l), a ^= c;
    }
    return a ^= t.length, a = s(a), a >>> 0;
   }, f.x86.hash128 = function(t, e) {
    t = t || "", e = e || 0;
    for (var n = t.length % 16, i = t.length - n, a = e, c = e, u = e, l = e, h = 0, p = 0, f = 0, d = 0, v = 597399067, g = 2869860233, m = 951274213, y = 2716044179, b = 0; i > b; b += 16) h = 255 & t.charCodeAt(b) | (255 & t.charCodeAt(b + 1)) << 8 | (255 & t.charCodeAt(b + 2)) << 16 | (255 & t.charCodeAt(b + 3)) << 24, 
    p = 255 & t.charCodeAt(b + 4) | (255 & t.charCodeAt(b + 5)) << 8 | (255 & t.charCodeAt(b + 6)) << 16 | (255 & t.charCodeAt(b + 7)) << 24, 
    f = 255 & t.charCodeAt(b + 8) | (255 & t.charCodeAt(b + 9)) << 8 | (255 & t.charCodeAt(b + 10)) << 16 | (255 & t.charCodeAt(b + 11)) << 24, 
    d = 255 & t.charCodeAt(b + 12) | (255 & t.charCodeAt(b + 13)) << 8 | (255 & t.charCodeAt(b + 14)) << 16 | (255 & t.charCodeAt(b + 15)) << 24, 
    h = r(h, v), h = o(h, 15), h = r(h, g), a ^= h, a = o(a, 19), a += c, a = r(a, 5) + 1444728091, 
    p = r(p, g), p = o(p, 16), p = r(p, m), c ^= p, c = o(c, 17), c += u, c = r(c, 5) + 197830471, 
    f = r(f, m), f = o(f, 17), f = r(f, y), u ^= f, u = o(u, 15), u += l, u = r(u, 5) + 2530024501, 
    d = r(d, y), d = o(d, 18), d = r(d, v), l ^= d, l = o(l, 13), l += a, l = r(l, 5) + 850148119;
    switch (h = 0, p = 0, f = 0, d = 0, n) {
    case 15:
     d ^= t.charCodeAt(b + 14) << 16;

    case 14:
     d ^= t.charCodeAt(b + 13) << 8;

    case 13:
     d ^= t.charCodeAt(b + 12), d = r(d, y), d = o(d, 18), d = r(d, v), l ^= d;

    case 12:
     f ^= t.charCodeAt(b + 11) << 24;

    case 11:
     f ^= t.charCodeAt(b + 10) << 16;

    case 10:
     f ^= t.charCodeAt(b + 9) << 8;

    case 9:
     f ^= t.charCodeAt(b + 8), f = r(f, m), f = o(f, 17), f = r(f, y), u ^= f;

    case 8:
     p ^= t.charCodeAt(b + 7) << 24;

    case 7:
     p ^= t.charCodeAt(b + 6) << 16;

    case 6:
     p ^= t.charCodeAt(b + 5) << 8;

    case 5:
     p ^= t.charCodeAt(b + 4), p = r(p, g), p = o(p, 16), p = r(p, m), c ^= p;

    case 4:
     h ^= t.charCodeAt(b + 3) << 24;

    case 3:
     h ^= t.charCodeAt(b + 2) << 16;

    case 2:
     h ^= t.charCodeAt(b + 1) << 8;

    case 1:
     h ^= t.charCodeAt(b), h = r(h, v), h = o(h, 15), h = r(h, g), a ^= h;
    }
    return a ^= t.length, c ^= t.length, u ^= t.length, l ^= t.length, a += c, a += u, 
    a += l, c += a, u += a, l += a, a = s(a), c = s(c), u = s(u), l = s(l), a += c, 
    a += u, a += l, c += a, u += a, l += a, ("00000000" + (a >>> 0).toString(16)).slice(-8) + ("00000000" + (c >>> 0).toString(16)).slice(-8) + ("00000000" + (u >>> 0).toString(16)).slice(-8) + ("00000000" + (l >>> 0).toString(16)).slice(-8);
   }, f.x64.hash128 = function(t, e) {
    t = t || "", e = e || 0;
    for (var n = t.length % 16, i = t.length - n, r = [ 0, e ], o = [ 0, e ], s = [ 0, 0 ], f = [ 0, 0 ], d = [ 2277735313, 289559509 ], v = [ 1291169091, 658871167 ], g = 0; i > g; g += 16) s = [ 255 & t.charCodeAt(g + 4) | (255 & t.charCodeAt(g + 5)) << 8 | (255 & t.charCodeAt(g + 6)) << 16 | (255 & t.charCodeAt(g + 7)) << 24, 255 & t.charCodeAt(g) | (255 & t.charCodeAt(g + 1)) << 8 | (255 & t.charCodeAt(g + 2)) << 16 | (255 & t.charCodeAt(g + 3)) << 24 ], 
    f = [ 255 & t.charCodeAt(g + 12) | (255 & t.charCodeAt(g + 13)) << 8 | (255 & t.charCodeAt(g + 14)) << 16 | (255 & t.charCodeAt(g + 15)) << 24, 255 & t.charCodeAt(g + 8) | (255 & t.charCodeAt(g + 9)) << 8 | (255 & t.charCodeAt(g + 10)) << 16 | (255 & t.charCodeAt(g + 11)) << 24 ], 
    s = c(s, d), s = u(s, 31), s = c(s, v), r = h(r, s), r = u(r, 27), r = a(r, o), 
    r = a(c(r, [ 0, 5 ]), [ 0, 1390208809 ]), f = c(f, v), f = u(f, 33), f = c(f, d), 
    o = h(o, f), o = u(o, 31), o = a(o, r), o = a(c(o, [ 0, 5 ]), [ 0, 944331445 ]);
    switch (s = [ 0, 0 ], f = [ 0, 0 ], n) {
    case 15:
     f = h(f, l([ 0, t.charCodeAt(g + 14) ], 48));

    case 14:
     f = h(f, l([ 0, t.charCodeAt(g + 13) ], 40));

    case 13:
     f = h(f, l([ 0, t.charCodeAt(g + 12) ], 32));

    case 12:
     f = h(f, l([ 0, t.charCodeAt(g + 11) ], 24));

    case 11:
     f = h(f, l([ 0, t.charCodeAt(g + 10) ], 16));

    case 10:
     f = h(f, l([ 0, t.charCodeAt(g + 9) ], 8));

    case 9:
     f = h(f, [ 0, t.charCodeAt(g + 8) ]), f = c(f, v), f = u(f, 33), f = c(f, d), o = h(o, f);

    case 8:
     s = h(s, l([ 0, t.charCodeAt(g + 7) ], 56));

    case 7:
     s = h(s, l([ 0, t.charCodeAt(g + 6) ], 48));

    case 6:
     s = h(s, l([ 0, t.charCodeAt(g + 5) ], 40));

    case 5:
     s = h(s, l([ 0, t.charCodeAt(g + 4) ], 32));

    case 4:
     s = h(s, l([ 0, t.charCodeAt(g + 3) ], 24));

    case 3:
     s = h(s, l([ 0, t.charCodeAt(g + 2) ], 16));

    case 2:
     s = h(s, l([ 0, t.charCodeAt(g + 1) ], 8));

    case 1:
     s = h(s, [ 0, t.charCodeAt(g) ]), s = c(s, d), s = u(s, 31), s = c(s, v), r = h(r, s);
    }
    return r = h(r, [ 0, t.length ]), o = h(o, [ 0, t.length ]), r = a(r, o), o = a(o, r), 
    r = p(r), o = p(o), r = a(r, o), o = a(o, r), ("00000000" + (r[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (r[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (o[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (o[1] >>> 0).toString(16)).slice(-8);
   }, "undefined" != typeof n ? ("undefined" != typeof e && e.exports && (n = e.exports = f), 
   n.murmurHash3 = f) : "function" == typeof define && define.amd ? define([], function() {
    return f;
   }) : (f._murmurHash3 = t.murmurHash3, f.noConflict = function() {
    return t.murmurHash3 = f._murmurHash3, f._murmurHash3 = i, f.noConflict = i, f;
   }, t.murmurHash3 = f);
  }(this);
 }, {} ],
 176: [ function(t, e) {
  !function() {
   var t = t || function(t, e) {
    var n = {}, i = n.lib = {}, r = i.Base = function() {
     function t() {}
     return {
      extend: function(e) {
       t.prototype = this;
       var n = new t();
       return e && n.mixIn(e), n.$super = this, n;
      },
      create: function() {
       var t = this.extend();
       return t.init.apply(t, arguments), t;
      },
      init: function() {},
      mixIn: function(t) {
       for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
       t.hasOwnProperty("toString") && (this.toString = t.toString);
      },
      clone: function() {
       return this.$super.extend(this);
      }
     };
    }(), o = i.WordArray = r.extend({
     init: function(t, n) {
      t = this.words = t || [], this.sigBytes = n != e ? n : 4 * t.length;
     },
     toString: function(t) {
      return (t || a).stringify(this);
     },
     concat: function(t) {
      var e = this.words, n = t.words, i = this.sigBytes, t = t.sigBytes;
      if (this.clamp(), i % 4) for (var r = 0; t > r; r++) e[i + r >>> 2] |= (n[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 24 - 8 * ((i + r) % 4); else if (65535 < n.length) for (r = 0; t > r; r += 4) e[i + r >>> 2] = n[r >>> 2]; else e.push.apply(e, n);
      return this.sigBytes += t, this;
     },
     clamp: function() {
      var e = this.words, n = this.sigBytes;
      e[n >>> 2] &= 4294967295 << 32 - 8 * (n % 4), e.length = t.ceil(n / 4);
     },
     clone: function() {
      var t = r.clone.call(this);
      return t.words = this.words.slice(0), t;
     },
     random: function(e) {
      for (var n = [], i = 0; e > i; i += 4) n.push(4294967296 * t.random() | 0);
      return o.create(n, e);
     }
    }), s = n.enc = {}, a = s.Hex = {
     stringify: function(t) {
      for (var e = t.words, t = t.sigBytes, n = [], i = 0; t > i; i++) {
       var r = e[i >>> 2] >>> 24 - 8 * (i % 4) & 255;
       n.push((r >>> 4).toString(16)), n.push((15 & r).toString(16));
      }
      return n.join("");
     },
     parse: function(t) {
      for (var e = t.length, n = [], i = 0; e > i; i += 2) n[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - 4 * (i % 8);
      return o.create(n, e / 2);
     }
    }, c = s.Latin1 = {
     stringify: function(t) {
      for (var e = t.words, t = t.sigBytes, n = [], i = 0; t > i; i++) n.push(String.fromCharCode(e[i >>> 2] >>> 24 - 8 * (i % 4) & 255));
      return n.join("");
     },
     parse: function(t) {
      for (var e = t.length, n = [], i = 0; e > i; i++) n[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - 8 * (i % 4);
      return o.create(n, e);
     }
    }, u = s.Utf8 = {
     stringify: function(t) {
      try {
       return decodeURIComponent(escape(c.stringify(t)));
      } catch (e) {
       throw Error("Malformed UTF-8 data");
      }
     },
     parse: function(t) {
      return c.parse(unescape(encodeURIComponent(t)));
     }
    }, l = i.BufferedBlockAlgorithm = r.extend({
     reset: function() {
      this._data = o.create(), this._nDataBytes = 0;
     },
     _append: function(t) {
      "string" == typeof t && (t = u.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes;
     },
     _process: function(e) {
      var n = this._data, i = n.words, r = n.sigBytes, s = this.blockSize, a = r / (4 * s), a = e ? t.ceil(a) : t.max((0 | a) - this._minBufferSize, 0), e = a * s, r = t.min(4 * e, r);
      if (e) {
       for (var c = 0; e > c; c += s) this._doProcessBlock(i, c);
       c = i.splice(0, e), n.sigBytes -= r;
      }
      return o.create(c, r);
     },
     clone: function() {
      var t = r.clone.call(this);
      return t._data = this._data.clone(), t;
     },
     _minBufferSize: 0
    });
    i.Hasher = l.extend({
     init: function() {
      this.reset();
     },
     reset: function() {
      l.reset.call(this), this._doReset();
     },
     update: function(t) {
      return this._append(t), this._process(), this;
     },
     finalize: function(t) {
      return t && this._append(t), this._doFinalize(), this._hash;
     },
     clone: function() {
      var t = l.clone.call(this);
      return t._hash = this._hash.clone(), t;
     },
     blockSize: 16,
     _createHelper: function(t) {
      return function(e, n) {
       return t.create(n).finalize(e);
      };
     },
     _createHmacHelper: function(t) {
      return function(e, n) {
       return h.HMAC.create(t, n).finalize(e);
      };
     }
    });
    var h = n.algo = {};
    return n;
   }(Math);
   !function(e) {
    var n = t, i = n.lib, r = i.Base, o = i.WordArray, n = n.x64 = {};
    n.Word = r.extend({
     init: function(t, e) {
      this.high = t, this.low = e;
     }
    }), n.WordArray = r.extend({
     init: function(t, n) {
      t = this.words = t || [], this.sigBytes = n != e ? n : 8 * t.length;
     },
     toX32: function() {
      for (var t = this.words, e = t.length, n = [], i = 0; e > i; i++) {
       var r = t[i];
       n.push(r.high), n.push(r.low);
      }
      return o.create(n, this.sigBytes);
     },
     clone: function() {
      for (var t = r.clone.call(this), e = t.words = this.words.slice(0), n = e.length, i = 0; n > i; i++) e[i] = e[i].clone();
      return t;
     }
    });
   }(), function() {
    function e() {
     return o.create.apply(o, arguments);
    }
    var n = t, i = n.lib.Hasher, r = n.x64, o = r.Word, s = r.WordArray, r = n.algo, a = [ e(1116352408, 3609767458), e(1899447441, 602891725), e(3049323471, 3964484399), e(3921009573, 2173295548), e(961987163, 4081628472), e(1508970993, 3053834265), e(2453635748, 2937671579), e(2870763221, 3664609560), e(3624381080, 2734883394), e(310598401, 1164996542), e(607225278, 1323610764), e(1426881987, 3590304994), e(1925078388, 4068182383), e(2162078206, 991336113), e(2614888103, 633803317), e(3248222580, 3479774868), e(3835390401, 2666613458), e(4022224774, 944711139), e(264347078, 2341262773), e(604807628, 2007800933), e(770255983, 1495990901), e(1249150122, 1856431235), e(1555081692, 3175218132), e(1996064986, 2198950837), e(2554220882, 3999719339), e(2821834349, 766784016), e(2952996808, 2566594879), e(3210313671, 3203337956), e(3336571891, 1034457026), e(3584528711, 2466948901), e(113926993, 3758326383), e(338241895, 168717936), e(666307205, 1188179964), e(773529912, 1546045734), e(1294757372, 1522805485), e(1396182291, 2643833823), e(1695183700, 2343527390), e(1986661051, 1014477480), e(2177026350, 1206759142), e(2456956037, 344077627), e(2730485921, 1290863460), e(2820302411, 3158454273), e(3259730800, 3505952657), e(3345764771, 106217008), e(3516065817, 3606008344), e(3600352804, 1432725776), e(4094571909, 1467031594), e(275423344, 851169720), e(430227734, 3100823752), e(506948616, 1363258195), e(659060556, 3750685593), e(883997877, 3785050280), e(958139571, 3318307427), e(1322822218, 3812723403), e(1537002063, 2003034995), e(1747873779, 3602036899), e(1955562222, 1575990012), e(2024104815, 1125592928), e(2227730452, 2716904306), e(2361852424, 442776044), e(2428436474, 593698344), e(2756734187, 3733110249), e(3204031479, 2999351573), e(3329325298, 3815920427), e(3391569614, 3928383900), e(3515267271, 566280711), e(3940187606, 3454069534), e(4118630271, 4000239992), e(116418474, 1914138554), e(174292421, 2731055270), e(289380356, 3203993006), e(460393269, 320620315), e(685471733, 587496836), e(852142971, 1086792851), e(1017036298, 365543100), e(1126000580, 2618297676), e(1288033470, 3409855158), e(1501505948, 4234509866), e(1607167915, 987167468), e(1816402316, 1246189591) ], c = [];
    !function() {
     for (var t = 0; 80 > t; t++) c[t] = e();
    }(), r = r.SHA512 = i.extend({
     _doReset: function() {
      this._hash = s.create([ e(1779033703, 4089235720), e(3144134277, 2227873595), e(1013904242, 4271175723), e(2773480762, 1595750129), e(1359893119, 2917565137), e(2600822924, 725511199), e(528734635, 4215389547), e(1541459225, 327033209) ]);
     },
     _doProcessBlock: function(t, e) {
      for (var n = this._hash.words, i = n[0], r = n[1], o = n[2], s = n[3], u = n[4], l = n[5], h = n[6], n = n[7], p = i.high, f = i.low, d = r.high, v = r.low, g = o.high, m = o.low, y = s.high, b = s.low, w = u.high, _ = u.low, x = l.high, $ = l.low, k = h.high, S = h.low, E = n.high, C = n.low, T = p, A = f, j = d, P = v, L = g, O = m, M = y, N = b, R = w, H = _, D = x, B = $, I = k, q = S, F = E, z = C, U = 0; 80 > U; U++) {
       var V = c[U];
       if (16 > U) var W = V.high = 0 | t[e + 2 * U], G = V.low = 0 | t[e + 2 * U + 1]; else {
        var W = c[U - 15], G = W.high, X = W.low, W = (X << 31 | G >>> 1) ^ (X << 24 | G >>> 8) ^ G >>> 7, X = (G << 31 | X >>> 1) ^ (G << 24 | X >>> 8) ^ (G << 25 | X >>> 7), Y = c[U - 2], G = Y.high, J = Y.low, Y = (J << 13 | G >>> 19) ^ (G << 3 | J >>> 29) ^ G >>> 6, J = (G << 13 | J >>> 19) ^ (J << 3 | G >>> 29) ^ (G << 26 | J >>> 6), G = c[U - 7], K = G.high, Q = c[U - 16], Z = Q.high, Q = Q.low, G = X + G.low, W = W + K + (X >>> 0 > G >>> 0 ? 1 : 0), G = G + J, W = W + Y + (J >>> 0 > G >>> 0 ? 1 : 0), G = G + Q, W = W + Z + (Q >>> 0 > G >>> 0 ? 1 : 0);
        V.high = W, V.low = G;
       }
       var K = R & D ^ ~R & I, Q = H & B ^ ~H & q, V = T & j ^ T & L ^ j & L, tt = A & P ^ A & O ^ P & O, X = (A << 4 | T >>> 28) ^ (T << 30 | A >>> 2) ^ (T << 25 | A >>> 7), Y = (T << 4 | A >>> 28) ^ (A << 30 | T >>> 2) ^ (A << 25 | T >>> 7), J = a[U], et = J.high, nt = J.low, J = z + ((R << 18 | H >>> 14) ^ (R << 14 | H >>> 18) ^ (H << 23 | R >>> 9)), Z = F + ((H << 18 | R >>> 14) ^ (H << 14 | R >>> 18) ^ (R << 23 | H >>> 9)) + (z >>> 0 > J >>> 0 ? 1 : 0), J = J + Q, Z = Z + K + (Q >>> 0 > J >>> 0 ? 1 : 0), J = J + nt, Z = Z + et + (nt >>> 0 > J >>> 0 ? 1 : 0), J = J + G, Z = Z + W + (G >>> 0 > J >>> 0 ? 1 : 0), G = Y + tt, V = X + V + (Y >>> 0 > G >>> 0 ? 1 : 0), F = I, z = q, I = D, q = B, D = R, B = H, H = N + J | 0, R = M + Z + (N >>> 0 > H >>> 0 ? 1 : 0) | 0, M = L, N = O, L = j, O = P, j = T, P = A, A = J + G | 0, T = Z + V + (J >>> 0 > A >>> 0 ? 1 : 0) | 0;
      }
      f = i.low = f + A | 0, i.high = p + T + (A >>> 0 > f >>> 0 ? 1 : 0) | 0, v = r.low = v + P | 0, 
      r.high = d + j + (P >>> 0 > v >>> 0 ? 1 : 0) | 0, m = o.low = m + O | 0, o.high = g + L + (O >>> 0 > m >>> 0 ? 1 : 0) | 0, 
      b = s.low = b + N | 0, s.high = y + M + (N >>> 0 > b >>> 0 ? 1 : 0) | 0, _ = u.low = _ + H | 0, 
      u.high = w + R + (H >>> 0 > _ >>> 0 ? 1 : 0) | 0, $ = l.low = $ + B | 0, l.high = x + D + (B >>> 0 > $ >>> 0 ? 1 : 0) | 0, 
      S = h.low = S + q | 0, h.high = k + I + (q >>> 0 > S >>> 0 ? 1 : 0) | 0, C = n.low = C + z | 0, 
      n.high = E + F + (z >>> 0 > C >>> 0 ? 1 : 0) | 0;
     },
     _doFinalize: function() {
      var t = this._data, e = t.words, n = 8 * this._nDataBytes, i = 8 * t.sigBytes;
      e[i >>> 5] |= 128 << 24 - i % 32, e[(i + 128 >>> 10 << 5) + 31] = n, t.sigBytes = 4 * e.length, 
      this._process(), this._hash = this._hash.toX32();
     },
     blockSize: 32
    }), n.SHA512 = i._createHelper(r), n.HmacSHA512 = i._createHmacHelper(r);
   }();
   var n = function(e) {
    return t.SHA512(e).toString(t.enc.Hex);
   };
   if ("function" == typeof define && define.amd) define(function() {
    return n;
   }); else {
    if ("undefined" == typeof e || !e.exports) throw new Error("could not register");
    e.exports = n;
   }
  }();
 }, {} ],
 177: [ function(t, e) {
  function n(t, e) {
   if (t = parseInt(t, 10), e = parseInt(e, 10), "number" != typeof t) throw new Error("inputCount wrong type: " + typeof t);
   if ("number" != typeof e) throw new Error("neuronCount wrong type: " + typeof e);
   this.inputCount = t, this.neuronCount = e, this.neurons = [];
   for (var n = 0, i = this.neuronCount; i > n; n++) {
    for (var r = [], o = 0, s = this.inputCount + 1; s > o; o++) r.push(this.WEIGHT_MIN + (this.WEIGHT_MAX - this.WEIGHT_MIN) * Math.random());
    this.neurons.push(r);
   }
  }
  n.prototype.BIAS = -1, n.prototype.ACTIVATION_RESPONSE = 1, n.prototype.WEIGHT_MIN = -1, 
  n.prototype.WEIGHT_MAX = 1, n.prototype.getNeuronWeightsCount = function() {
   return this.inputCount + 1;
  }, n.prototype.getWeightsCount = function() {
   return this.neuronCount * this.getNeuronWeightsCount();
  }, n.prototype.getWeights = function() {
   for (var t = [], e = 0; e < this.neurons.length; e++) t = t.concat(this.neurons[e]);
   return t;
  }, n.prototype.setWeights = function(t) {
   for (var e = this.getNeuronWeightsCount(), n = 0, i = this.neuronCount; i > n; n++) this.neurons[n] = t.splice(0, e);
   if (0 !== t.length) throw new Error("wrong weights count, remain: " + t.length);
  }, n.prototype.exec = function(t) {
   for (var e = [], n = this.neurons, i = 0, r = n.length; r > i; i++) {
    for (var o = n[i], s = 0, a = o.length, c = 0, u = a - 1; u > c; c++) s += o[c] * t[c];
    s += o[a - 1] * this.BIAS, e.push(this.sigmoid(s, this.ACTIVATION_RESPONSE));
   }
   return e;
  }, n.prototype.sigmoid = function(t, e) {
   return 1 / (1 + Math.exp(-t / e));
  }, e.exports = n;
 }, {} ],
 178: [ function(t, e) {
  "use strict";
  function n() {
   this.layers = [];
  }
  var i = t("./Layer"), r = !1;
  n.prototype.addLayer = function(t) {
   if (!(t instanceof i)) throw new Error("wrong type: " + typeof t);
   if (this.layers.length > 0) {
    var e = this.layers[this.layers.length - 1];
    if (e.neuronCount !== t.inputCount) throw new Error("last neurons " + e.neuronCount + " doesnt match new inputs " + t.inputCount);
   }
   this.layers.push(t);
  }, n.prototype.getWeights = function() {
   for (var t = [], e = this.layers, n = 0, i = e.length; i > n; n++) t = t.concat(e[n].getWeights());
   return t;
  }, n.prototype.setWeights = function(t) {
   t = t.slice(0);
   for (var e = 0; e < this.layers.length; e++) {
    var n = this.layers[e];
    n.setWeights(t.splice(0, n.getWeightsCount()));
   }
   if (0 !== t.length) throw new Error("wrong weights count, remain: " + t.length);
  }, n.prototype.exec = function(t) {
   if (t.length !== this.layers[0].inputCount) throw new Error("wrong inputCount");
   for (var e = 0; e < this.layers.length; e++) t = this.layers[e].exec(t);
   return r && console.log("layers " + this.layers.length + ", output " + t), t;
  }, e.exports = n;
 }, {
  "./Layer": 177
 } ],
 179: [ function() {
  "use strict";
  Function.prototype.bind || (Function.prototype.bind = function(t) {
   if ("function" != typeof this) throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
   var e = Array.prototype.slice.call(arguments, 1), n = this, i = function() {}, r = function() {
    return n.apply(this instanceof i && t ? this : t, e.concat(Array.prototype.slice.call(arguments)));
   };
   return i.prototype = this.prototype, r.prototype = new i(), r;
  });
 }, {} ],
 180: [ function(t, e) {
  "use strict";
  var n = t("../utils/Log"), i = t("../utils/UtilsCordova"), r = "Player", o = function(t) {
   if (this.urls = t.urls, this.sprites = t.sprites, this.cordovaSprites = t.cordovaSprites, 
   this.volume = t.volume, -1 === this.urls[0].indexOf(".mp3")) throw new Error("urls[0] is not mp3: " + this.urls[0]);
   var e = function(t) {
    if (window.device && device.platform && "android" === device.platform.toLowerCase()) {
     var e = (window.location.pathname, pathName.substr(0, pathName.lastIndexOf("/")));
     return e + "/" + t;
    }
    return t;
   }.bind(this);
   if (i.isCordova() && "undefined" != typeof window.Media && this.cordovaSprites) {
    var o = {};
    Object.keys(this.cordovaSprites).forEach(function(t) {
     var i = e(this.cordovaSprites[t]);
     n.trace(r, "create sprite " + i), o[t] = new Media(i, function() {
      n.trace(r, "media success: " + i);
     }, function(t) {
      n.error(r, "media error: " + t);
     });
    }, this), this._play = function(t) {
     return o[t] ? void o[t].play() : void n.error(r, "no sprite: " + t);
    }, this._destroy = function() {
     Object.keys(o).forEach(function(t) {
      o[t].release();
     }, this);
    };
   } else if (i.isCordova() && "undefined" != typeof window.Media) {
    var s = -1, a = !1, c = e(this.urls[0]);
    n.trace(r, "use cordova, path " + c), this._media = new Media(c, function() {
     n.trace(r, "media play success");
    }.bind(this), function(t) {
     n.trace(r, "media play error " + t.code + ", " + t.message);
    }.bind(this), function(t) {
     n.trace(r, "media play status " + t), s = t;
    }.bind(this)), this._media.setVolume && this._media.setVolume(this.volume), this._play = function(t) {
     if (n.trace(r, "media play: " + t), a || s === Media.MEDIA_STARTING || s === Media.MEDIA_RUNNING) return void n.trace(r, "media play, but already starting/running");
     clearTimeout(this._toPause);
     var e = this.sprites[t];
     this._media.play(), this._media.seekTo(e[0]), this._toPause = setTimeout(function() {
      n.trace(r, "media pause: " + t), a = !1, this._media.pause(), this._media.seekTo(0);
     }.bind(this), e[1]);
    }, this._destroy = function() {
     this._media.release();
    };
   } else "undefined" != typeof window.Howl ? (n.trace(r, "use howler"), this._media = new Howl({
    urls: this.urls,
    sprite: this.sprites,
    volume: this.volume
   }), this._play = function(t) {
    this._media.play(t);
   }, this._destroy = function() {
    this._media.unload();
   }) : (n.error(r, "no compatible sound player available"), this._play = function() {}, 
   this._destroy = function() {});
  };
  o.prototype.playSprite = function(t) {
   this._play(t);
  }, o.prototype.destroy = function() {
   this._destroy();
  }, e.exports = o;
 }, {
  "../utils/Log": 187,
  "../utils/UtilsCordova": 192
 } ],
 181: [ function(t, e) {
  "use strict";
  var n = t("../utils/UtilsDOM");
  t("jslib/ui/RequestAnimationFrame"), e.exports = function(t, e) {
   function i() {
    o || (window.requestAnimationFrame(function() {
     n.addClass(t, e);
    }), o = !0);
   }
   function r() {
    o && (window.requestAnimationFrame(function() {
     n.removeClass(t, e);
    }), o = !1);
   }
   var o = !1;
   t.addEventListener("touchstart", i, !1), t.addEventListener("mousedown", i, !1), 
   t.addEventListener("touchend", r, !1), t.addEventListener("touchcancel", r, !1), 
   t.addEventListener("mouseup", r, !1), t.addEventListener("mouseout", r, !1), t.addEventListener("mouseleave", r, !1);
  };
 }, {
  "../utils/UtilsDOM": 193,
  "jslib/ui/RequestAnimationFrame": 182
 } ],
 182: [ function(t, e) {
  "use strict";
  !function(t, e, n) {
   var i, r, o = 0, s = [ "ms", "moz", "webkit", "o" ], a = [], c = [], u = 0;
   for (i = 0; i < s.length && !t[e]; ++i) t[e] = t[s[i] + "RequestAnimationFrame"], 
   t[n] = t[s[i] + "CancelAnimationFrame"] || t[s[i] + "CancelRequestAnimationFrame"];
   if (!t[e]) {
    var l = function() {
     var t = c, e = a;
     c = [], a = [], r = void 0;
     for (var n = 0; n < t.length; n++) {
      var i = t[n];
      e[i.id] && i.cb();
     }
    };
    t[e] = function(e) {
     var n = new Date().getTime(), i = Math.max(0, 16 - (n - o));
     r || (r = t.setTimeout(l, i)), o = n + i;
     var s = u++;
     return c.push({
      cb: e,
      id: s
     }), a[s] = !0, s;
    };
   }
   t[n] || (t[n] = function(t) {
    delete a[t];
   });
  }(window, "requestAnimationFrame", "cancelAnimationFrame"), e.exports = window.requestAnimationFrame;
 }, {} ],
 183: [ function(t, e) {
  "use strict";
  var n = t("../event/EventEmitter"), i = t("../utils/Log"), r = t("../utils/UtilsDOM"), o = !1, s = "TouchHandler", a = "fake-active", c = [], u = function(t, e, r, a) {
   if (n.call(this), void 0 === t) throw "el undefined";
   this.tag = "TouchHandler", this.el = t, this._idClickEvent = void 0, this._touchstart = {}, 
   this._mouseout = {}, this.bustClicks = !0, this.addActiveClass = e === !0 ? !0 : !1, 
   this.preventDefault = r === !0 ? !0 : !1, this.stopPropagation = a === !0 ? !0 : !1, 
   this._liEvents = function(t) {
    var e = t.type;
    switch (o && i.trace(this.tag, "event " + e), this.stopPropagation && (o && i.trace(s, "stopPropagation()"), 
    t.stopPropagation()), this.preventDefault && (o && i.trace(s, "preventDefault()"), 
    t.preventDefault()), e) {
    case "touchmove":
    case "mousemove":
     this.move(t);
     break;

    case "touchend":
    case "mouseup":
     this.up(t);
     break;

    case "touchcancel":
     this.leave(e, t), this.cancel(t);
     break;

    case "mouseleave":
     this.leave(e, t);
     break;

    case "touchstart":
    case "mousedown":
     this.down(t);
     break;

    case "click":
     if (this.bust(t.clientX, t.clientY)) return t.preventDefault(), t.stopPropagation(), 
     void (o && i.info(this.tag, "bust click at " + x + " " + y));
     this.handleClick(t, t);
     break;

    default:
     throw "unhandled event " + e;
    }
   }.bind(this), this.el.addEventListener("touchstart", this._liEvents, !1), this.el.addEventListener("mousedown", this._liEvents, !1), 
   this.el.addEventListener("touchmove", this._liEvents, !1), this.el.addEventListener("mousemove", this._liEvents, !1), 
   this.el.addEventListener("touchend", this._liEvents, !1), this.el.addEventListener("mouseup", this._liEvents, !1), 
   this.el.addEventListener("touchcancel", this._liEvents, !1), this.el.addEventListener("mouseleave", this._liEvents, !1), 
   this.el.addEventListener("click", this._liEvents, !1);
  };
  u.prototype = Object.create(n.prototype), u.prototype.destroy = function() {
   this.el.removeEventListener("touchstart", this._liEvents, !1), this.el.removeEventListener("mousedown", this._liEvents, !1), 
   this.el.removeEventListener("touchmove", this._liEvents, !1), this.el.removeEventListener("mousemove", this._liEvents, !1), 
   this.el.removeEventListener("touchend", this._liEvents, !1), this.el.removeEventListener("mouseup", this._liEvents, !1), 
   this.el.removeEventListener("touchcancel", this._liEvents, !1), this.el.removeEventListener("mouseleave", this._liEvents, !1);
  }, u.prototype.down = function(t) {
   var e, n;
   if ("touchstart" === t.type) {
    for (e = 0, n = t.changedTouches.length; n > e; e++) {
     var i = t.changedTouches[e], o = i.identifier;
     this._touchstart["" + o] = {
      x: i.pageX,
      y: i.pageY
     }, this._mouseout["" + o] = !1, void 0 === this._idClickEvent && (this._idClickEvent = i.identifier);
    }
    this.emit("down", "down", this.el, t, t.touches, t.changedTouches);
   } else {
    var s = [ t ];
    this.emit("down", "down", this.el, t, s, s);
   }
   this.addActiveClass === !0 && r.addClass(this.el, a);
  }, u.prototype.move = function(t) {
   if ("touchmove" === t.type) this.emit("move", "move", this.el, t, t.touches, t.changedTouches); else {
    var e = [ t ];
    this.emit("move", "move", this.el, t, e, e);
   }
  }, u.prototype.up = function(t) {
   if ("touchend" === t.type) {
    this.emit("up", "up", this.el, t, t.touches, t.changedTouches);
    for (var e = 0, n = t.changedTouches.length; n > e; e++) {
     var s = t.changedTouches[e], u = s.identifier, l = this._touchstart["" + u];
     Math.abs(s.pageX - l.x) < 10 && Math.abs(s.pageY - l.y) < 10 && this.handleClick(s, t), 
     0 === e && (c.push(s.clientX, s.clientY), setTimeout(this.pop.bind(this), 2e3)), 
     delete this._touchstart["" + u];
    }
   } else {
    var h = [ t ];
    this.emit("up", "up", this.el, t, h, h);
   }
   this.addActiveClass === !0 && r.removeClass(this.el, a), o && i.debug(this.tag, "up " + t.type);
  }, u.prototype.cancel = function(t) {
   if ("touchcancel" === t.type) for (var e = 0, n = t.changedTouches.length; n > e; e++) {
    var i = t.changedTouches[e].identifier;
    delete this._touchstart["" + i], delete this._mouseout["" + i], this._idClickEvent === i && (this._idClickEvent = void 0);
   }
   this.addActiveClass === !0 && r.removeClass(this.el, a);
  }, u.prototype.leave = function(t, e) {
   switch (t) {
   case "mouseleave":
    this.emit("leave", "leave", this.el, e, [ e ], [ e ]);
    break;

   case "touchcancel":
    this.emit("leave", "leave", this.el, e, e.touches, e.changedTouches);
    break;

   default:
    throw new Error("invalid type " + t);
   }
  }, u.prototype.handleClick = function(t) {
   var e = [ t ];
   this.emit("click", this.el, t, e, e);
  }, u.prototype.bust = function(t, e) {
   if (this.bustClicks) {
    for (var n = 0, i = c.length; i > n; n += 2) {
     var r = c[n], o = c[n + 1];
     if (Math.abs(r - t) < 25 && Math.abs(o - e) < 25) return !0;
    }
    return !1;
   }
  }, u.prototype.pop = function() {
   var t = c.splice(0, 2);
   o && i.debug(this.tag, "removed bust location " + JSON.stringify(t));
  }, e.exports = u;
 }, {
  "../event/EventEmitter": 172,
  "../utils/Log": 187,
  "../utils/UtilsDOM": 193
 } ],
 184: [ function(t, e) {
  "use strict";
  var n = t("../utils/Log"), i = "VendorProp", r = function(t) {
   for (var e = t.split("-"), r = "", o = 0; o < e.length; o++) r += 0 === o ? e[o] : e[o][0].toUpperCase() + e[o].substr(1);
   var s, a = [ "", "ms", "Webkit", "Moz", "O" ], c = r[0].toUpperCase() + r.substr(1);
   for (o = 0; o < a.length; o++) {
    var u = a[o], l = u.length > 0 ? u + c : r;
    if (n.trace(i, "check", l), "undefined" != typeof document.body.style[l]) {
     s = {
      css: u.length > 0 ? "-" + u.toLowerCase() + "-" + t : t,
      js: l
     };
     break;
    }
   }
   return s || (n.warn(i, "no result for", t, r), s = {
    js: r,
    css: t
   }), s;
  }, o = function() {
   var t = window.getComputedStyle(document.documentElement, ""), e = (Array.prototype.slice.call(t).join("").match(/-(moz|webkit|ms)-/) || "" === t.OLink && [ "", "o" ])[1], n = "WebKit|Moz|MS|O".match(new RegExp("(" + e + ")", "i"))[1];
   return {
    dom: n,
    lowercase: e,
    css: "-" + e + "-",
    js: e[0].toUpperCase() + e.substr(1)
   };
  }(), s = function(t, e, n) {
   t.style.setProperty(e, n);
  }, a = function(t, e) {
   t.style.removeProperty(e);
  }, c = function(t, e, n) {
   return e = o.css + e, s(t, e, n), e;
  }, u = function(t, e) {
   a(t, o.css + e);
  };
  e.exports = {
   set: c,
   rem: u,
   prefix: o,
   find: r
  };
 }, {
  "../utils/Log": 187
 } ],
 185: [ function(t, e) {
  "use strict";
  var n, i = t("./Log"), r = t("./UtilsDOM"), o = t("./UUID"), s = t("./UtilsChrome"), a = t("./Store"), c = "Analytics", u = "google_analytics_clientId", l = !1, h = r.metaName("jslib-analyticsua-web"), p = r.metaName("jslib-analyticsua-app");
  if (s.isChromePackagedApp()) {
   if (!p) throw new Error("required jslib/utils/Analytics but uaApp meta missing");
   var f = t("../vendor/analytics-bundle"), d = f.getService("jslib_analytics");
   d.getConfig().addCallback(function(t) {
    t.setTrackingPermitted(!0), l = !0;
   });
   var v = d.getTracker(p);
   n = function() {
    var t = arguments[1];
    switch (t) {
    case "pageview":
     var e = arguments[2].page;
     v.sendAppView(e).addCallback(function() {
      i.trace(c, "sent view " + e);
     }.bind(this));
     break;

    case "event":
     v.sendEvent(arguments[2], arguments[3], arguments[4]).addCallback(function() {
      i.trace(c, "sent event " + arguments[2]);
     }.bind(this));
     break;

    default:
     i.warn(c, "unhandled type: " + t);
    }
   };
  } else {
   if (!h) throw new Error("required jslib/utils/Analytics but uaWeb meta missing");
   var g = "https:", m = "//www.google-analytics.com/analytics.js";
   ("http:" === document.location.protocol || "https:" === document.location.protocol) && (g = ""), 
   function(t, e, n, i, r, o, s) {
    t.GoogleAnalyticsObject = r, t[r] = t[r] || function() {
     (t[r].q = t[r].q || []).push(arguments);
    }, t[r].l = 1 * new Date(), o = e.createElement(n), s = e.getElementsByTagName(n)[0], 
    o.async = 1, o.src = i, s.parentNode.insertBefore(o, s);
   }(window, document, "script", g + m, "ga"), a.get(u, function(t, e) {
    e || (e = o.v4(), a.set(u, e)), ga("create", h, {
     clientId: e,
     storage: "none"
    }), ga("set", "checkProtocolTask", null), n = function() {
     var t = arguments[1];
     switch (t) {
     case "pageview":
      var e = arguments[2].page;
      ga("send", "pageview", {
       page: "/" + e
      });
      break;

     case "event":
      ga("send", "event", arguments[2], arguments[3], arguments[4]);
      break;

     default:
      i.warn(c, "unhandled type: " + t);
     }
    }, l = !0, i.trace(c, "ready");
   });
  }
  e.exports = {
   _enabled: !0,
   _queue: [],
   _toHandle: void 0,
   _handle: function() {
    if (!l) return i.trace(c, "not ready, wait and try again"), clearTimeout(this._toHandle), 
    void (this._toHandle = setTimeout(this._handle.bind(this), 750));
    var t = this._queue.splice(0, this._queue.length);
    t.forEach(function(t) {
     i.trace(c, "apply", t), n.apply(n, t);
    });
   },
   queue: function(t) {
    this._queue.push(t), this._handle();
   },
   exec: function() {
    return this._enabled ? void this.queue(arguments) : !1;
   },
   sendAppView: function(t) {
    this.exec("send", "pageview", {
     page: t
    });
   },
   sendEvent: function(t, e, n) {
    this.exec("send", "event", t, e, n);
   },
   enable: function(t) {
    this._enabled = t === !0, i.trace(c, "enable: " + this._enabled);
   }
  };
 }, {
  "../vendor/analytics-bundle": 200,
  "./Log": 187,
  "./Store": 188,
  "./UUID": 189,
  "./UtilsChrome": 191,
  "./UtilsDOM": 193
 } ],
 186: [ function(t, e) {
  "use strict";
  function n() {
   this._map = {};
  }
  n.prototype.set = function(t, e) {
   if (!(t instanceof Array)) throw new Error("chain is not array, type: " + typeof t);
   if ("string" == typeof e) throw new Error("typeof object === function");
   for (var n = this._map, i = 0; i < t.length; i++) {
    var r = t[i];
    i < t.length - 1 ? (n[r] || (n[r] = {}), n = n[r]) : n[r] = e;
   }
  }, n.prototype.find = function(t) {
   if (!(t instanceof Array)) throw new Error("chain is not array, type: " + typeof t);
   for (var e = this._map, n = 0; n < t.length; n++) {
    var i = t[n];
    {
     if (!(n < t.length - 1 && e[i] === t[n + 1])) return e[i];
     e = e[i];
    }
   }
   return void 0;
  }, e.exports = n;
 }, {} ],
 187: [ function(t, e) {
  "use strict";
  function n(t, e) {
   var n = e.length;
   if (2 > n) throw new Error("call using: (tag, message)");
   var i, r = e[0], o = e[1], s = r + ": " + o;
   if (!(u > t)) {
    switch (c && c.call(this, t, r, Array.prototype.slice.call(e, 1).join(" ")), t) {
    case 0:
     i = console.log;
     break;

    case 1:
     i = console.log;
     break;

    case 2:
     i = console.info;
     break;

    case 3:
     i = console.warn;
     break;

    case 4:
     i = console.error;
     break;

    default:
     throw new Error("unhandled log-level: " + t);
    }
    switch (n) {
    case 3:
     i.call(console, s, e[2]);
     break;

    case 4:
     i.call(console, s, e[2], e[3]);
     break;

    case 5:
     i.call(console, s, e[2], e[3], e[4]);
     break;

    case 6:
     i.call(console, s, e[2], e[3], e[4], e[5]);
     break;

    case 7:
     i.call(console, s, e[2], e[3], e[4], e[5], e[6]);
     break;

    case 8:
     i.call(console, s, e[2], e[3], e[4], e[5], e[6], e[7]);
     break;

    default:
     i.call(console, s);
    }
   }
  }
  function i() {
   n(4, arguments);
  }
  function r() {
   n(3, arguments);
  }
  function o() {
   n(2, arguments);
  }
  function s() {
   n(1, arguments);
  }
  function a() {
   n(0, arguments);
  }
  var c, u = 0;
  e.exports = {
   trace: a,
   debug: s,
   info: o,
   error: i,
   warn: r,
   setHook: function(t) {
    c = t;
   },
   setLevel: function(t) {
    u = t;
   },
   TRACE: 0,
   DEBUG: 1,
   INFO: 2,
   WARN: 3,
   ERROR: 4
  };
 }, {} ],
 188: [ function(t, e) {
  "use strict";
  var n = t("jslib/utils/Log"), i = t("jslib/utils/UtilsChrome"), r = "Store", o = function() {
   return i.isChromePackagedApp() && "undefined" != typeof chrome && "undefined" != typeof chrome.storage && "undefined" != typeof chrome.storage.local;
  }, s = {
   get: function(t, e) {
    chrome.storage.local.get(t, function(n) {
     var i = n[t];
     setTimeout(function() {
      e(null, i);
     }, 1);
    });
   },
   getDefault: function(t, e, n) {
    chrome.storage.local.get(t, function(i) {
     var r = i[t];
     void 0 === r && (r = e), setTimeout(function() {
      n(null, r);
     }, 1);
    });
   },
   set: function(t, e) {
    var n = {};
    n[t] = e + "", chrome.storage.local.set(n);
   },
   rem: function(t) {
    chrome.storage.local.remove(t);
   }
  }, a = {
   _amplify: t("../vendor/amplify"),
   get: function(t, e) {
    var n = this._amplify.store(t);
    setTimeout(function() {
     e(null, n);
    }, 1);
   },
   getDefault: function(t, e, n) {
    var i = this._amplify.store(t);
    void 0 === i && (i = e), setTimeout(function() {
     n(null, i);
    }, 1);
   },
   set: function(t, e) {
    this._amplify.store(t, e);
   },
   rem: function(t) {
    this._amplify.store(t, null);
   }
  };
  o() ? (n.trace(r, "use chrome storage"), e.exports = s) : (n.trace(r, "use default storage"), 
  e.exports = a);
 }, {
  "../vendor/amplify": 199,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsChrome": 191
 } ],
 189: [ function(t, e) {
  "use strict";
  (function() {
   function t(t, e, n) {
    var i = e && n || 0, r = 0;
    for (e = e || [], t.toLowerCase().replace(/[0-9a-f]{2}/g, function(t) {
     16 > r && (e[i + r++] = h[t]);
    }); 16 > r; ) e[i + r++] = 0;
    return e;
   }
   function n(t, e) {
    var n = e || 0, i = l;
    return i[t[n++]] + i[t[n++]] + i[t[n++]] + i[t[n++]] + "-" + i[t[n++]] + i[t[n++]] + "-" + i[t[n++]] + i[t[n++]] + "-" + i[t[n++]] + i[t[n++]] + "-" + i[t[n++]] + i[t[n++]] + i[t[n++]] + i[t[n++]] + i[t[n++]] + i[t[n++]];
   }
   function i(t, e, i) {
    var r = e && i || 0, o = e || [];
    t = t || {};
    var s = null != t.clockseq ? t.clockseq : v, a = null != t.msecs ? t.msecs : new Date().getTime(), c = null != t.nsecs ? t.nsecs : m + 1, u = a - g + (c - m) / 1e4;
    if (0 > u && null == t.clockseq && (s = s + 1 & 16383), (0 > u || a > g) && null == t.nsecs && (c = 0), 
    c >= 1e4) throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
    g = a, m = c, v = s, a += 122192928e5;
    var l = (1e4 * (268435455 & a) + c) % 4294967296;
    o[r++] = l >>> 24 & 255, o[r++] = l >>> 16 & 255, o[r++] = l >>> 8 & 255, o[r++] = 255 & l;
    var h = a / 4294967296 * 1e4 & 268435455;
    o[r++] = h >>> 8 & 255, o[r++] = 255 & h, o[r++] = h >>> 24 & 15 | 16, o[r++] = h >>> 16 & 255, 
    o[r++] = s >>> 8 | 128, o[r++] = 255 & s;
    for (var p = t.node || d, f = 0; 6 > f; f++) o[r + f] = p[f];
    return e ? e : n(o);
   }
   function r(t, e, i) {
    var r = e && i || 0;
    "string" == typeof t && (e = "binary" == t ? new u(16) : null, t = null), t = t || {};
    var s = t.random || (t.rng || o)();
    if (s[6] = 15 & s[6] | 64, s[8] = 63 & s[8] | 128, e) for (var a = 0; 16 > a; a++) e[r + a] = s[a];
    return e || n(s);
   }
   var o, s = this;
   if (!o && s.crypto && crypto.getRandomValues) {
    var a = new Uint8Array(16);
    o = function() {
     return crypto.getRandomValues(a), a;
    };
   }
   if (!o) {
    var c = new Array(16);
    o = function() {
     for (var t, e = 0; 16 > e; e++) 0 === (3 & e) && (t = 4294967296 * Math.random()), 
     c[e] = t >>> ((3 & e) << 3) & 255;
     return c;
    };
   }
   for (var u = "function" == typeof s.Buffer ? s.Buffer : Array, l = [], h = {}, p = 0; 256 > p; p++) l[p] = (p + 256).toString(16).substr(1), 
   h[l[p]] = p;
   var f = o(), d = [ 1 | f[0], f[1], f[2], f[3], f[4], f[5] ], v = 16383 & (f[6] << 8 | f[7]), g = 0, m = 0, y = r;
   y.v1 = i, y.v4 = r, y.parse = t, y.unparse = n, y.BufferClass = u;
   var b = 0;
   if (y.countUp = function() {
    return b++;
   }, "function" == typeof define && define.amd) define(function() {
    return y;
   }); else if ("undefined" != typeof e && e.exports) e.exports = y; else {
    var w = s.uuid;
    y.noConflict = function() {
     return s.uuid = w, y;
    }, s.uuid = y;
   }
  }).call(this);
 }, {} ],
 190: [ function(t, e) {
  "use strict";
  e.exports = {
   isArray: function(t) {
    return t instanceof Array;
   },
   shuffle: function(t) {
    for (var e, n, i = t.length; i; e = Math.floor(Math.random() * i), n = t[--i], t[i] = t[e], 
    t[e] = n) ;
    return t;
   }
  };
 }, {} ],
 191: [ function(t, e) {
  "use strict";
  var n = null !== window.document.getElementsByTagName("html")[0].getAttribute("is-chrome-packaged");
  e.exports = {
   isChromePackagedApp: function() {
    return n;
   },
   cspLoadImage: function(t, e) {
    var n = new XMLHttpRequest();
    n.responseType = "blob", n.onload = function() {
     return 200 !== this.status ? void e("xhr status " + this.status) : void e(null, window.URL.createObjectURL(n.response), t);
    }, n.open("GET", t, !0), n.send();
   }
  };
 }, {} ],
 192: [ function(t, e) {
  "use strict";
  e.exports = {
   isCordova: function() {
    return "undefined" != typeof window.cordova;
   }
  };
 }, {} ],
 193: [ function(t, e) {
  "use strict";
  var n = function(t, e) {
   r(t, e) && (t.className = t.className.replace(new RegExp("(\\s|^)" + e + "(\\s|$)"), " ").replace(/^\s+|\s+$/g, ""));
  }, i = function(t, e) {
   r(t, e) || (t.className += (t.className ? " " : "") + e);
  }, r = function(t, e) {
   return new RegExp("(\\s|^)" + e + "(\\s|$)").test(t.className);
  }, o = function(t) {
   for (var e = document.getElementsByTagName("meta"), n = 0; n < e.length; n++) if (e[n].getAttribute("name") == t) return e[n].getAttribute("content");
   return void 0;
  };
  e.exports = {
   addClass: i,
   removeClass: n,
   hasClass: r,
   metaName: o
  };
 }, {} ],
 194: [ function(t, e) {
  "use strict";
  var n = 1e3, i = 60 * n, r = 60 * i, o = 24 * r, s = 30 * o, a = 12 * s;
  e.exports = {
   getTimeAgo: function(t) {
    var e = new Date().getTime() - t;
    0 > e && (e = 0);
    var c, u, l = Math.floor(e / a), h = Math.floor(e / s), p = Math.floor(e / o), f = Math.floor(e / r), d = Math.floor(e / i), v = Math.floor(e / n);
    return l > 0 ? (c = "year", u = l) : h > 0 ? (c = "month", u = h) : p > 0 ? (c = "day", 
    u = p) : f > 0 ? (c = "hour", u = f) : d > 0 ? (c = "minute", u = d) : (c = "second", 
    u = v), {
     type: c,
     value: u
    };
   }
  };
 }, {} ],
 195: [ function(t, e) {
  "use strict";
  e.exports = {
   gup: function(t) {
    t = t.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var e = new RegExp("[\\?&]" + t + "=([^&#]*)"), n = e.exec(location.search);
    return null === n ? void 0 : decodeURIComponent(n[1].replace(/\+/g, " "));
   },
   addParameterTo: function(t, e, n, i) {
    var r, o, s = !0;
    t.indexOf("#") > 0 ? (o = t.indexOf("#"), r = t.substring(t.indexOf("#"), t.length)) : (r = "", 
    o = t.length);
    var a = t.substring(0, o), c = a.split("?"), u = "";
    if (c.length > 1 && "" !== c[1]) for (var l = c[1].split("&"), h = 0; h < l.length; h++) {
     var p = l[h].split("=");
     s && p[0] === e || ("" === u ? u = "?" : u += "&", u += p[0] + "=" + (p[1] ? p[1] : ""));
    }
    return "" === u && (u = "?"), i ? u = "?" + e + "=" + n + (u.length > 1 ? "&" + u.substring(1) : "") : ("" !== u && "?" !== u && (u += "&"), 
    u += e + "=" + (n ? n : "")), c[0] + u + r;
   }
  };
 }, {} ],
 196: [ function(t, e) {
  e.exports = {
   sanitize: function(t, e, n) {
    return n = n || "[^a-zA-Z0-9:. \\(\\)\\[\\]&@*$]", t = t.replace(n, ""), t = t.replace(/(\r\n|\n|\r)/gm, ""), 
    void 0 !== e && (t = t.length > e ? t.substr(e) : t), t;
   },
   isEmail: function(t) {
    var e = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return e.test(t);
   }
  };
 }, {} ],
 197: [ function(t, e) {
  "use strict";
  e.exports = {
   isWaWindowsApp: function() {
    return window.waWindowsApp;
   },
   isWaWindowsPhoneApp: function() {
    return window.waWindowsApp && window.waWindowsApp.isPhone;
   }
  };
 }, {} ],
 198: [ function(t, e) {
  "use strict";
  var n = t("./Log"), i = t("./UtilsCordova"), r = t("./UtilsChrome"), o = t("./UtilsWebapp"), s = "UtilsWindow", a = 0;
  e.exports = {
   openInAppBrowser: function(t, e) {
    if (r.isChromePackagedApp()) {
     var c, u, l = {
      _listeners: {},
      addEventListener: function(t, e) {
       this._listeners[t] || (this._listeners[t] = []), this._listeners[t].push(e);
      },
      emit: function(t, e) {
       (this._listeners[t] || []).forEach(function(t) {
        t(e);
       });
      },
      close: function() {
       c && c.close();
      }
     }, h = chrome.app.window.current().innerBounds;
     return chrome.app.window.create("chrome.webview.html", {
      hidden: !0,
      outerBounds: {
       minWidth: 320,
       minHeight: 320,
       width: Math.floor(.78 * h.width),
       height: Math.floor(.85 * h.height)
      }
     }, function(e) {
      c = e, e.onClosed.addListener(function() {
       l.emit("exit", {});
      }), e.contentWindow.addEventListener("DOMContentLoaded", function() {
       u = e.contentWindow.document.querySelector("webview"), u.src = t, e.show(), u.addEventListener("loadstop", function(t) {
        l.emit("loadstop", {
         url: t.target.src
        });
       });
      });
     }), l;
    }
    if (o.isWaWindowsApp()) {
     var p = a++;
     window.external.notify(JSON.stringify({
      type: "popup",
      title: e,
      src: t,
      id: p
     }));
     var c = {
      closed: !1
     };
     return (window.waWindowsApp || (window.waWindowsApp = {
      popups: {}
     })).popups[p] = c, c;
    }
    return i.isCordova() ? (n.trace(s, "openInAppBrowser() cordova _blank"), window.open(t, "_blank", "location=yes,toolbar=yes,closebuttoncaption=done")) : (n.trace(s, "openInAppBrowser() default"), 
    window.open(t, e, "location=yes,toolbar=yes,closebuttoncaption=done,resizable=yes"));
   },
   openSystemBrowser: function(t) {
    i.isCordova() ? (n.trace(s, "openSystemBrowser() cordova _system"), window.open(t, "_system")) : (n.trace(s, "openSystemBrowser() default _blank"), 
    window.open(t, "_blank"));
   }
  };
 }, {
  "./Log": 187,
  "./UtilsChrome": 191,
  "./UtilsCordova": 192,
  "./UtilsWebapp": 197
 } ],
 199: [ function(t, e) {
  "use strict";
  e.exports = {}, function(t, e) {
   function n(t, n) {
    i.addType(t, function(o, s, a) {
     var c, u, l, h, p = s, f = new Date().getTime();
     if (!o) {
      p = {}, h = [], l = 0;
      try {
       for (o = n.length; o = n.key(l++); ) r.test(o) && (u = JSON.parse(n.getItem(o)), 
       u.expires && u.expires <= f ? h.push(o) : p[o.replace(r, "")] = u.data);
       for (;o = h.pop(); ) n.removeItem(o);
      } catch (d) {}
      return p;
     }
     if (o = "__amplify__" + o, s === e) {
      if (c = n.getItem(o), u = c ? JSON.parse(c) : {
       expires: -1
      }, !(u.expires && u.expires <= f)) return u.data;
      n.removeItem(o);
     } else if (null === s) n.removeItem(o); else {
      u = JSON.stringify({
       data: s,
       expires: a.expires ? f + a.expires : null
      });
      try {
       n.setItem(o, u);
      } catch (d) {
       i[t]();
       try {
        n.setItem(o, u);
       } catch (d) {
        throw i.error();
       }
      }
     }
     return p;
    });
   }
   var i = t.store = function(t, e, n) {
    var r = i.type;
    return n && n.type && n.type in i.types && (r = n.type), i.types[r](t, e, n || {});
   };
   i.types = {}, i.type = null, i.addType = function(t, e) {
    i.type || (i.type = t), i.types[t] = e, i[t] = function(e, n, r) {
     return r = r || {}, r.type = t, i(e, n, r);
    };
   }, i.error = function() {
    return "amplify.store quota exceeded";
   };
   var r = /^__amplify__/;
   for (var o in {
    localStorage: 1,
    sessionStorage: 1
   }) try {
    window[o].setItem("__amplify__", "x"), window[o].removeItem("__amplify__"), n(o, window[o]);
   } catch (s) {}
   if (!i.types.localStorage && window.globalStorage) try {
    n("globalStorage", window.globalStorage[window.location.hostname]), "sessionStorage" === i.type && (i.type = "globalStorage");
   } catch (s) {}
   !function() {
    if (!i.types.localStorage) {
     var t = document.createElement("div"), n = "amplify";
     t.style.display = "none", document.getElementsByTagName("head")[0].appendChild(t);
     try {
      t.addBehavior("#default#userdata"), t.load(n);
     } catch (r) {
      return void t.parentNode.removeChild(t);
     }
     i.addType("userData", function(r, o, s) {
      t.load(n);
      var a, c, u, l, h, p = o, f = new Date().getTime();
      if (!r) {
       for (p = {}, h = [], l = 0; a = t.XMLDocument.documentElement.attributes[l++]; ) c = JSON.parse(a.value), 
       c.expires && c.expires <= f ? h.push(a.name) : p[a.name] = c.data;
       for (;r = h.pop(); ) t.removeAttribute(r);
       return t.save(n), p;
      }
      if (r = r.replace(/[^\-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/g, "-"), 
      r = r.replace(/^-/, "_-"), o === e) {
       if (a = t.getAttribute(r), c = a ? JSON.parse(a) : {
        expires: -1
       }, !(c.expires && c.expires <= f)) return c.data;
       t.removeAttribute(r);
      } else null === o ? t.removeAttribute(r) : (u = t.getAttribute(r), c = JSON.stringify({
       data: o,
       expires: s.expires ? f + s.expires : null
      }), t.setAttribute(r, c));
      try {
       t.save(n);
      } catch (d) {
       null === u ? t.removeAttribute(r) : t.setAttribute(r, u), i.userData();
       try {
        t.setAttribute(r, c), t.save(n);
       } catch (d) {
        throw null === u ? t.removeAttribute(r) : t.setAttribute(r, u), i.error();
       }
      }
      return p;
     });
    }
   }(), function() {
    function t(t) {
     return t === e ? e : JSON.parse(JSON.stringify(t));
    }
    var n = {}, r = {};
    i.addType("memory", function(i, o, s) {
     return i ? o === e ? t(n[i]) : (r[i] && (clearTimeout(r[i]), delete r[i]), null === o ? (delete n[i], 
     null) : (n[i] = o, s.expires && (r[i] = setTimeout(function() {
      delete n[i], delete r[i];
     }, s.expires)), o)) : t(n);
    });
   }();
  }(e.exports);
 }, {} ],
 200: [ function(t, e) {
  (function() {
   "use strict";
   var t, e = e || {}, n = this, i = function(t) {
    return void 0 !== t;
   }, r = function() {}, o = function(t) {
    var e = typeof t;
    if ("object" == e) {
     if (!t) return "null";
     if (t instanceof Array) return "array";
     if (t instanceof Object) return e;
     var n = Object.prototype.toString.call(t);
     if ("[object Window]" == n) return "object";
     if ("[object Array]" == n || "number" == typeof t.length && "undefined" != typeof t.splice && "undefined" != typeof t.propertyIsEnumerable && !t.propertyIsEnumerable("splice")) return "array";
     if ("[object Function]" == n || "undefined" != typeof t.call && "undefined" != typeof t.propertyIsEnumerable && !t.propertyIsEnumerable("call")) return "function";
    } else if ("function" == e && "undefined" == typeof t.call) return "object";
    return e;
   }, s = function(t) {
    return "array" == o(t);
   }, a = function(t) {
    var e = o(t);
    return "array" == e || "object" == e && "number" == typeof t.length;
   }, c = function(t) {
    return "string" == typeof t;
   }, u = function(t) {
    return "number" == typeof t;
   }, l = function(t) {
    return "function" == o(t);
   }, h = function(t) {
    var e = typeof t;
    return "object" == e && null != t || "function" == e;
   }, p = function(t) {
    return t.call.apply(t.bind, arguments);
   }, f = function(t, e) {
    if (!t) throw Error();
    if (2 < arguments.length) {
     var n = Array.prototype.slice.call(arguments, 2);
     return function() {
      var i = Array.prototype.slice.call(arguments);
      return Array.prototype.unshift.apply(i, n), t.apply(e, i);
     };
    }
    return function() {
     return t.apply(e, arguments);
    };
   }, d = function() {
    return d = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? p : f, 
    d.apply(null, arguments);
   }, v = function(t) {
    var e = Array.prototype.slice.call(arguments, 1);
    return function() {
     var n = e.slice();
     return n.push.apply(n, arguments), t.apply(this, n);
    };
   }, g = Date.now || function() {
    return +new Date();
   }, m = function(t, e) {
    var r = t.split("."), o = n;
    r[0] in o || !o.execScript || o.execScript("var " + r[0]);
    for (var s; r.length && (s = r.shift()); ) !r.length && i(e) ? o[s] = e : o = o[s] ? o[s] : o[s] = {};
   }, y = function(t, e) {
    function n() {}
    n.prototype = e.prototype, t.P = e.prototype, t.prototype = new n(), t.ie = function(t, n) {
     for (var i = Array(arguments.length - 2), r = 2; r < arguments.length; r++) i[r - 2] = arguments[r];
     return e.prototype[n].apply(t, i);
    };
   };
   Function.prototype.bind = Function.prototype.bind || function(t) {
    if (1 < arguments.length) {
     var e = Array.prototype.slice.call(arguments, 1);
     return e.unshift(this, t), d.apply(null, e);
    }
    return d(this, t);
   };
   var b = function(t) {
    if (Error.captureStackTrace) Error.captureStackTrace(this, b); else {
     var e = Error().stack;
     e && (this.stack = e);
    }
    t && (this.message = String(t));
   };
   y(b, Error), b.prototype.name = "CustomError";
   var w = String.prototype.trim ? function(t) {
    return t.trim();
   } : function(t) {
    return t.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "");
   }, _ = function(t, e) {
    return e > t ? -1 : t > e ? 1 : 0;
   }, x = Array.prototype, $ = x.indexOf ? function(t, e, n) {
    return x.indexOf.call(t, e, n);
   } : function(t, e, n) {
    if (n = null == n ? 0 : 0 > n ? Math.max(0, t.length + n) : n, c(t)) return c(e) && 1 == e.length ? t.indexOf(e, n) : -1;
    for (;n < t.length; n++) if (n in t && t[n] === e) return n;
    return -1;
   }, k = x.forEach ? function(t, e, n) {
    x.forEach.call(t, e, n);
   } : function(t, e, n) {
    for (var i = t.length, r = c(t) ? t.split("") : t, o = 0; i > o; o++) o in r && e.call(n, r[o], o, t);
   }, S = x.some ? function(t, e, n) {
    return x.some.call(t, e, n);
   } : function(t, e, n) {
    for (var i = t.length, r = c(t) ? t.split("") : t, o = 0; i > o; o++) if (o in r && e.call(n, r[o], o, t)) return !0;
    return !1;
   }, E = x.every ? function(t, e, n) {
    return x.every.call(t, e, n);
   } : function(t, e, n) {
    for (var i = t.length, r = c(t) ? t.split("") : t, o = 0; i > o; o++) if (o in r && !e.call(n, r[o], o, t)) return !1;
    return !0;
   }, C = function(t) {
    var e;
    t: {
     e = Ei;
     for (var n = t.length, i = c(t) ? t.split("") : t, r = 0; n > r; r++) if (r in i && e.call(void 0, i[r], r, t)) {
      e = r;
      break t;
     }
     e = -1;
    }
    return 0 > e ? null : c(t) ? t.charAt(e) : t[e];
   }, T = function(t, e) {
    var n, i = $(t, e);
    return (n = i >= 0) && x.splice.call(t, i, 1), n;
   }, A = function() {
    return x.concat.apply(x, arguments);
   }, j = function(t, e, n) {
    return 2 >= arguments.length ? x.slice.call(t, e) : x.slice.call(t, e, n);
   }, P = "StopIteration" in n ? n.StopIteration : Error("StopIteration"), L = function() {};
   L.prototype.next = function() {
    throw P;
   }, L.prototype.Sb = function() {
    return this;
   };
   var O = function(t, e, n) {
    for (var i in t) e.call(n, t[i], i, t);
   }, M = function(t) {
    var e, n = [], i = 0;
    for (e in t) n[i++] = t[e];
    return n;
   }, N = function(t) {
    var e, n = [], i = 0;
    for (e in t) n[i++] = e;
    return n;
   }, R = function(t, e) {
    var n;
    t: {
     for (n in t) if (e.call(void 0, t[n], n, t)) break t;
     n = void 0;
    }
    return n && t[n];
   }, H = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "), D = function(t) {
    for (var e, n, i = 1; i < arguments.length; i++) {
     n = arguments[i];
     for (e in n) t[e] = n[e];
     for (var r = 0; r < H.length; r++) e = H[r], Object.prototype.hasOwnProperty.call(n, e) && (t[e] = n[e]);
    }
   }, B = function() {
    var t = arguments.length;
    if (1 == t && s(arguments[0])) return B.apply(null, arguments[0]);
    for (var e = {}, n = 0; t > n; n++) e[arguments[n]] = !0;
    return e;
   }, I = function(t) {
    this.p = {}, this.b = [], this.Ja = this.j = 0;
    var e = arguments.length;
    if (e > 1) {
     if (e % 2) throw Error("Uneven number of arguments");
     for (var n = 0; e > n; n += 2) this.set(arguments[n], arguments[n + 1]);
    } else t && this.ha(t);
   };
   I.prototype.t = function() {
    q(this);
    for (var t = [], e = 0; e < this.b.length; e++) t.push(this.p[this.b[e]]);
    return t;
   }, I.prototype.H = function() {
    return q(this), this.b.concat();
   }, I.prototype.T = function(t) {
    return U(this.p, t);
   }, I.prototype.remove = function(t) {
    return U(this.p, t) ? (delete this.p[t], this.j--, this.Ja++, this.b.length > 2 * this.j && q(this), 
    !0) : !1;
   };
   var q = function(t) {
    if (t.j != t.b.length) {
     for (var e = 0, n = 0; e < t.b.length; ) {
      var i = t.b[e];
      U(t.p, i) && (t.b[n++] = i), e++;
     }
     t.b.length = n;
    }
    if (t.j != t.b.length) {
     for (var r = {}, n = e = 0; e < t.b.length; ) i = t.b[e], U(r, i) || (t.b[n++] = i, 
     r[i] = 1), e++;
     t.b.length = n;
    }
   };
   t = I.prototype, t.get = function(t, e) {
    return U(this.p, t) ? this.p[t] : e;
   }, t.set = function(t, e) {
    U(this.p, t) || (this.j++, this.b.push(t), this.Ja++), this.p[t] = e;
   }, t.ha = function(t) {
    var e;
    t instanceof I ? (e = t.H(), t = t.t()) : (e = N(t), t = M(t));
    for (var n = 0; n < e.length; n++) this.set(e[n], t[n]);
   }, t.forEach = function(t, e) {
    for (var n = this.H(), i = 0; i < n.length; i++) {
     var r = n[i], o = this.get(r);
     t.call(e, o, r, this);
    }
   }, t.clone = function() {
    return new I(this);
   }, t.Nb = function() {
    q(this);
    for (var t = {}, e = 0; e < this.b.length; e++) {
     var n = this.b[e];
     t[n] = this.p[n];
    }
    return t;
   }, t.Sb = function(t) {
    q(this);
    var e = 0, n = this.b, i = this.p, r = this.Ja, o = this, s = new L();
    return s.next = function() {
     for (;;) {
      if (r != o.Ja) throw Error("The map has changed since the iterator was created");
      if (e >= n.length) throw P;
      var s = n[e++];
      return t ? s : i[s];
     }
    }, s;
   };
   var F, z, U = function(t, e) {
    return Object.prototype.hasOwnProperty.call(t, e);
   }, V = {
    id: "hitType",
    name: "t",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, W = {
    id: "sessionControl",
    name: "sc",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, G = {
    id: "description",
    name: "cd",
    valueType: "text",
    maxLength: 2048,
    defaultValue: void 0
   }, X = {
    id: "eventCategory",
    name: "ec",
    valueType: "text",
    maxLength: 150,
    defaultValue: void 0
   }, Y = {
    id: "eventAction",
    name: "ea",
    valueType: "text",
    maxLength: 500,
    defaultValue: void 0
   }, J = {
    id: "eventLabel",
    name: "el",
    valueType: "text",
    maxLength: 500,
    defaultValue: void 0
   }, K = {
    id: "eventValue",
    name: "ev",
    valueType: "integer",
    maxLength: void 0,
    defaultValue: void 0
   }, Q = {
    zd: V,
    $c: {
     id: "anonymizeIp",
     name: "aip",
     valueType: "boolean",
     maxLength: void 0,
     defaultValue: void 0
    },
    Kd: {
     id: "queueTime",
     name: "qt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    fd: {
     id: "cacheBuster",
     name: "z",
     valueType: "text",
     maxLength: void 0,
     defaultValue: void 0
    },
    Qd: W,
    Rd: {
     id: "sessionGroup",
     name: "sg",
     valueType: "text",
     maxLength: void 0,
     defaultValue: void 0
    },
    ge: {
     id: "userId",
     name: "uid",
     valueType: "text",
     maxLength: void 0,
     defaultValue: void 0
    },
    Hd: {
     id: "nonInteraction",
     name: "ni",
     valueType: "boolean",
     maxLength: void 0,
     defaultValue: void 0
    },
    qd: G,
    $d: {
     id: "title",
     name: "dt",
     valueType: "text",
     maxLength: 1500,
     defaultValue: void 0
    },
    bd: {
     id: "appId",
     name: "aid",
     valueType: "text",
     maxLength: 150,
     defaultValue: void 0
    },
    cd: {
     id: "appInstallerId",
     name: "aiid",
     valueType: "text",
     maxLength: 150,
     defaultValue: void 0
    },
    td: X,
    sd: Y,
    ud: J,
    vd: K,
    Td: {
     id: "socialNetwork",
     name: "sn",
     valueType: "text",
     maxLength: 50,
     defaultValue: void 0
    },
    Sd: {
     id: "socialAction",
     name: "sa",
     valueType: "text",
     maxLength: 50,
     defaultValue: void 0
    },
    Ud: {
     id: "socialTarget",
     name: "st",
     valueType: "text",
     maxLength: 2048,
     defaultValue: void 0
    },
    ce: {
     id: "transactionId",
     name: "ti",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    be: {
     id: "transactionAffiliation",
     name: "ta",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    de: {
     id: "transactionRevenue",
     name: "tr",
     valueType: "currency",
     maxLength: void 0,
     defaultValue: void 0
    },
    ee: {
     id: "transactionShipping",
     name: "ts",
     valueType: "currency",
     maxLength: void 0,
     defaultValue: void 0
    },
    fe: {
     id: "transactionTax",
     name: "tt",
     valueType: "currency",
     maxLength: void 0,
     defaultValue: void 0
    },
    od: {
     id: "currencyCode",
     name: "cu",
     valueType: "text",
     maxLength: 10,
     defaultValue: void 0
    },
    Dd: {
     id: "itemPrice",
     name: "ip",
     valueType: "currency",
     maxLength: void 0,
     defaultValue: void 0
    },
    Ed: {
     id: "itemQuantity",
     name: "iq",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Bd: {
     id: "itemCode",
     name: "ic",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    Cd: {
     id: "itemName",
     name: "in",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    Ad: {
     id: "itemCategory",
     name: "iv",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    md: {
     id: "campaignSource",
     name: "cs",
     valueType: "text",
     maxLength: 100,
     defaultValue: void 0
    },
    kd: {
     id: "campaignMedium",
     name: "cm",
     valueType: "text",
     maxLength: 50,
     defaultValue: void 0
    },
    ld: {
     id: "campaignName",
     name: "cn",
     valueType: "text",
     maxLength: 100,
     defaultValue: void 0
    },
    jd: {
     id: "campaignKeyword",
     name: "ck",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    gd: {
     id: "campaignContent",
     name: "cc",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    hd: {
     id: "campaignId",
     name: "ci",
     valueType: "text",
     maxLength: 100,
     defaultValue: void 0
    },
    yd: {
     id: "gclid",
     name: "gclid",
     valueType: "text",
     maxLength: void 0,
     defaultValue: void 0
    },
    pd: {
     id: "dclid",
     name: "dclid",
     valueType: "text",
     maxLength: void 0,
     defaultValue: void 0
    },
    Jd: {
     id: "pageLoadTime",
     name: "plt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    rd: {
     id: "dnsTime",
     name: "dns",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Vd: {
     id: "tcpConnectTime",
     name: "tcp",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Pd: {
     id: "serverResponseTime",
     name: "srt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Id: {
     id: "pageDownloadTime",
     name: "pdt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Ld: {
     id: "redirectResponseTime",
     name: "rrt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Wd: {
     id: "timingCategory",
     name: "utc",
     valueType: "text",
     maxLength: 150,
     defaultValue: void 0
    },
    Zd: {
     id: "timingVar",
     name: "utv",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    Yd: {
     id: "timingValue",
     name: "utt",
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    },
    Xd: {
     id: "timingLabel",
     name: "utl",
     valueType: "text",
     maxLength: 500,
     defaultValue: void 0
    },
    wd: {
     id: "exDescription",
     name: "exd",
     valueType: "text",
     maxLength: 150,
     defaultValue: void 0
    },
    xd: {
     id: "exFatal",
     name: "exf",
     valueType: "boolean",
     maxLength: void 0,
     defaultValue: "1"
    }
   }, Z = function(t) {
    if (1 > t || t > 200) throw Error("Expected dimension index range 1-200, but was : " + t);
    return {
     id: "dimension" + t,
     name: "cd" + t,
     valueType: "text",
     maxLength: 150,
     defaultValue: void 0
    };
   }, tt = function(t) {
    if (1 > t || t > 200) throw Error("Expected metric index range 1-200, but was : " + t);
    return {
     id: "metric" + t,
     name: "cm" + t,
     valueType: "integer",
     maxLength: void 0,
     defaultValue: void 0
    };
   }, et = function(t) {
    return 1 > t ? "0" : 3 > t ? "1-2" : (t = Math.floor(Math.log(t - 1) / Math.log(2)), 
    Math.pow(2, t) + 1 + "-" + Math.pow(2, t + 1));
   }, nt = function(t, e) {
    for (var n = 0, i = t.length - 1, r = 0; i >= n; ) {
     var o = Math.floor((n + i) / 2), r = t[o];
     if (r >= e) {
      if (i = 0 == o ? 0 : t[o - 1], e > i) return (i + 1).toString() + "-" + r.toString();
      i = o - 1;
     } else if (e > r) {
      if (o >= t.length - 1) return (t[t.length - 1] + 1).toString() + "+";
      n = o + 1;
     }
    }
    return "<= 0";
   }, it = function() {
    this.gb = [];
   }, rt = function() {
    return new it();
   };
   t = it.prototype, t.when = function(t) {
    return this.gb.push(t), this;
   }, t.Rb = function() {
    var t = arguments;
    return this.when(function(e) {
     return 0 <= $(t, e.ub());
    }), this;
   }, t.Yc = function(t) {
    var e = j(arguments, 1);
    return this.when(function(n) {
     return n = n.V().get(t), 0 <= $(e, n);
    }), this;
   }, t.mb = function(t, e) {
    if (h(this.e)) throw Error("Filter has already been set.");
    return this.e = h(e) ? d(t, e) : t, this;
   }, t.ia = function() {
    if (0 == this.gb.length) throw Error("Must specify at least one predicate using #when or a helper method.");
    if (!h(this.e)) throw Error("Must specify a delegate filter using #applyFilter.");
    return d(function(t) {
     E(this.gb, function(e) {
      return e(t);
     }) && this.e(t);
    }, this);
   };
   var ot = function() {
    this.lb = !1, this.zb = "", this.Kb = !1, this.ya = null;
   };
   ot.prototype.Wb = function(t) {
    return this.lb = !0, this.zb = t || " - ", this;
   }, ot.prototype.Sc = function() {
    return this.Kb = !0, this;
   }, ot.prototype.Dc = function() {
    return st(this, et);
   }, ot.prototype.Ec = function(t) {
    return st(this, v(nt, t));
   };
   var st = function(t, e) {
    if (null != t.ya) throw Error("LabelerBuilder: Only one labeling strategy may be used.");
    return t.ya = d(function(t) {
     var n = t.V().get(K), i = t.V().get(J);
     u(n) && (n = e(n), null != i && this.lb && (n = i + this.zb + n), t.V().set(J, n));
    }, t), t;
   };
   ot.prototype.ia = function() {
    if (null == this.ya) throw Error("LabelerBuilder: a labeling strategy must be specified prior to calling build().");
    return rt().Rb("event").mb(d(function(t) {
     this.ya(t), this.Kb && t.V().remove(K);
    }, this)).ia();
   };
   var at = function() {
    var t = Array.prototype.slice.call(arguments), e = t.shift();
    if ("undefined" == typeof e) throw Error("[goog.string.format] Template required");
    return e.replace(/%([0\-\ \+]*)(\d+)?(\.(\d+))?([%sfdiu])/g, function(e, n, i, r, o, s) {
     if ("%" == s) return "%";
     var a = t.shift();
     if ("undefined" == typeof a) throw Error("[goog.string.format] Not enough arguments");
     return arguments[0] = a, ct[s].apply(null, arguments);
    });
   }, ct = {
    s: function(t, e, n) {
     return isNaN(n) || "" == n || t.length >= n ? t : t = -1 < e.indexOf("-", 0) ? t + Array(n - t.length + 1).join(" ") : Array(n - t.length + 1).join(" ") + t;
    },
    f: function(t, e, n, i, r) {
     i = t.toString(), isNaN(r) || "" == r || (i = parseFloat(t).toFixed(r));
     var o;
     return o = 0 > t ? "-" : 0 <= e.indexOf("+") ? "+" : 0 <= e.indexOf(" ") ? " " : "", 
     t >= 0 && (i = o + i), isNaN(n) || i.length >= n ? i : (i = isNaN(r) ? Math.abs(t).toString() : Math.abs(t).toFixed(r), 
     t = n - i.length - o.length, i = 0 <= e.indexOf("-", 0) ? o + i + Array(t + 1).join(" ") : o + Array(t + 1).join(0 <= e.indexOf("0", 0) ? "0" : " ") + i);
    },
    d: function(t, e, n, i, r, o, s, a) {
     return ct.f(parseInt(t, 10), e, n, i, 0, o, s, a);
    }
   };
   ct.i = ct.d, ct.u = ct.d;
   var ut = function(t) {
    if ("function" == typeof t.t) return t.t();
    if (c(t)) return t.split("");
    if (a(t)) {
     for (var e = [], n = t.length, i = 0; n > i; i++) e.push(t[i]);
     return e;
    }
    return M(t);
   }, lt = function(t, e) {
    if ("function" == typeof t.forEach) t.forEach(e, void 0); else if (a(t) || c(t)) k(t, e, void 0); else {
     var n;
     if ("function" == typeof t.H) n = t.H(); else if ("function" != typeof t.t) if (a(t) || c(t)) {
      n = [];
      for (var i = t.length, r = 0; i > r; r++) n.push(r);
     } else n = N(t); else n = void 0;
     for (var i = ut(t), r = i.length, o = 0; r > o; o++) e.call(void 0, i[o], n && n[o], t);
    }
   }, ht = function() {
    if (this.w = new I(), 0 < arguments.length % 2) throw Error("Uneven number of arguments to ParameterMap constructor.");
    for (var t = arguments, e = 0; e < t.length; e += 2) this.set(t[e], t[e + 1]);
   };
   ht.prototype.set = function(t, e) {
    if (null == e) throw Error("undefined-or-null value for key: " + t.name);
    this.w.set(t.name, {
     key: t,
     value: e
    });
   }, ht.prototype.remove = function(t) {
    this.w.remove(t.name);
   }, ht.prototype.get = function(t) {
    return t = this.w.get(t.name, null), null === t ? null : t.value;
   }, ht.prototype.ha = function(t) {
    this.w.ha(t.w);
   };
   var pt = function(t, e) {
    k(t.w.t(), function(t) {
     e(t.key, t.value);
    });
   };
   ht.prototype.Nb = function() {
    var t = {};
    return pt(this, function(e, n) {
     t[e.id] = n;
    }), t;
   }, ht.prototype.clone = function() {
    var t = new ht();
    return t.w = this.w.clone(), t;
   }, ht.prototype.toString = function() {
    var t = {};
    return pt(this, function(e, n) {
     t[e.id] = n;
    }), JSON.stringify(t);
   };
   var ft = function(t) {
    this.e = t;
   };
   t = ft.prototype, t.Yb = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = X, e.Q = t, e;
   }, t.action = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = Y, e.Q = t, e;
   }, t.label = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = J, e.Q = t, e;
   }, t.value = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = K, e.Q = t, e;
   }, t.fc = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = Z(t.index), e.Q = t.value, e;
   }, t.vc = function(t) {
    var e = new ft(d(this.M, this));
    return e.I = tt(t.index), e.Q = t.value, e;
   }, t.send = function(t) {
    var e = new ht();
    return this.M(e), t.send("event", e);
   }, t.M = function(t) {
    null != this.I && null != this.Q && !t.w.T(this.I.name) && t.set(this.I, this.Q), 
    h(this.e) && this.e(t);
   };
   var dt = new ft(r), vt = function() {
    this.aa = this.aa, this.Ca = this.Ca;
   };
   vt.prototype.aa = !1, vt.prototype.ma = function() {
    this.aa || (this.aa = !0, this.o());
   }, vt.prototype.o = function() {
    if (this.Ca) for (;this.Ca.length; ) this.Ca.shift()();
   };
   var gt = function(t, e) {
    this.type = t, this.currentTarget = this.target = e, this.defaultPrevented = this.X = !1, 
    this.Hb = !0;
   };
   gt.prototype.preventDefault = function() {
    this.defaultPrevented = !0, this.Hb = !1;
   };
   var mt = function(t) {
    return mt[" "](t), t;
   };
   mt[" "] = r;
   var yt;
   t: {
    var bt = n.navigator;
    if (bt) {
     var wt = bt.userAgent;
     if (wt) {
      yt = wt;
      break t;
     }
    }
    yt = "";
   }
   var _t = function() {
    return -1 != yt.indexOf("Edge") || -1 != yt.indexOf("Trident") || -1 != yt.indexOf("MSIE");
   }, xt = function() {
    return -1 != yt.indexOf("Edge");
   }, $t = -1 != yt.indexOf("Opera") || -1 != yt.indexOf("OPR"), kt = _t(), St = !(-1 == yt.indexOf("Gecko") || -1 != yt.toLowerCase().indexOf("webkit") && !xt() || -1 != yt.indexOf("Trident") || -1 != yt.indexOf("MSIE") || xt()), Et = -1 != yt.toLowerCase().indexOf("webkit") && !xt(), Ct = function() {
    var t = yt;
    return St ? /rv\:([^\);]+)(\)|;)/.exec(t) : kt && xt() ? /Edge\/([\d\.]+)/.exec(t) : kt ? /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(t) : Et ? /WebKit\/(\S+)/.exec(t) : void 0;
   }, Tt = function() {
    var t = n.document;
    return t ? t.documentMode : void 0;
   }, At = function() {
    if ($t && n.opera) {
     var t = n.opera.version;
     return l(t) ? t() : t;
    }
    var t = "", e = Ct();
    return e && (t = e ? e[1] : ""), kt && !xt() && (e = Tt(), e > parseFloat(t)) ? String(e) : t;
   }(), jt = {}, Pt = function(t) {
    var e;
    if (!(e = jt[t])) {
     e = 0;
     for (var n = w(String(At)).split("."), i = w(String(t)).split("."), r = Math.max(n.length, i.length), o = 0; 0 == e && r > o; o++) {
      var s = n[o] || "", a = i[o] || "", c = /(\d*)(\D*)/g, u = /(\d*)(\D*)/g;
      do {
       var l = c.exec(s) || [ "", "", "" ], h = u.exec(a) || [ "", "", "" ];
       if (0 == l[0].length && 0 == h[0].length) break;
       e = _(0 == l[1].length ? 0 : parseInt(l[1], 10), 0 == h[1].length ? 0 : parseInt(h[1], 10)) || _(0 == l[2].length, 0 == h[2].length) || _(l[2], h[2]);
      } while (0 == e);
     }
     e = jt[t] = e >= 0;
    }
    return e;
   }, Lt = n.document, Ot = Tt(), Mt = !Lt || !kt || !Ot && xt() ? void 0 : Ot || ("CSS1Compat" == Lt.compatMode ? parseInt(At, 10) : 5), Nt = !kt || kt && (xt() || Mt >= 9), Rt = kt && !Pt("9"), Ht = !Et || Pt("528"), Dt = St && Pt("1.9b") || kt && Pt("8") || $t && Pt("9.5") || Et && Pt("528"), Bt = St && !Pt("8") || kt && !Pt("9"), It = function(t, e) {
    if (gt.call(this, t ? t.type : ""), this.relatedTarget = this.currentTarget = this.target = null, 
    this.charCode = this.keyCode = this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0, 
    this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = !1, this.sb = this.state = null, 
    t) {
     var n = this.type = t.type;
     this.target = t.target || t.srcElement, this.currentTarget = e;
     var i = t.relatedTarget;
     if (i) {
      if (St) {
       var r;
       t: {
        try {
         mt(i.nodeName), r = !0;
         break t;
        } catch (o) {}
        r = !1;
       }
       r || (i = null);
      }
     } else "mouseover" == n ? i = t.fromElement : "mouseout" == n && (i = t.toElement);
     this.relatedTarget = i, this.offsetX = Et || void 0 !== t.offsetX ? t.offsetX : t.layerX, 
     this.offsetY = Et || void 0 !== t.offsetY ? t.offsetY : t.layerY, this.clientX = void 0 !== t.clientX ? t.clientX : t.pageX, 
     this.clientY = void 0 !== t.clientY ? t.clientY : t.pageY, this.screenX = t.screenX || 0, 
     this.screenY = t.screenY || 0, this.button = t.button, this.keyCode = t.keyCode || 0, 
     this.charCode = t.charCode || ("keypress" == n ? t.keyCode : 0), this.ctrlKey = t.ctrlKey, 
     this.altKey = t.altKey, this.shiftKey = t.shiftKey, this.metaKey = t.metaKey, this.state = t.state, 
     this.sb = t, t.defaultPrevented && this.preventDefault();
    }
   };
   y(It, gt), It.prototype.preventDefault = function() {
    It.P.preventDefault.call(this);
    var t = this.sb;
    if (t.preventDefault) t.preventDefault(); else if (t.returnValue = !1, Rt) try {
     (t.ctrlKey || 112 <= t.keyCode && 123 >= t.keyCode) && (t.keyCode = -1);
    } catch (e) {}
   };
   var qt = "closure_listenable_" + (1e6 * Math.random() | 0), Ft = function(t) {
    return !(!t || !t[qt]);
   }, zt = 0, Ut = function(t, e, n, i, r) {
    this.O = t, this.proxy = null, this.src = e, this.type = n, this.ka = !!i, this.sa = r, 
    this.key = ++zt, this.removed = this.ja = !1;
   }, Vt = function(t) {
    t.removed = !0, t.O = null, t.proxy = null, t.src = null, t.sa = null;
   }, Wt = function(t) {
    this.src = t, this.k = {}, this.fa = 0;
   };
   Wt.prototype.add = function(t, e, n, i, r) {
    var o = t.toString();
    t = this.k[o], t || (t = this.k[o] = [], this.fa++);
    var s = Xt(t, e, i, r);
    return s > -1 ? (e = t[s], n || (e.ja = !1)) : (e = new Ut(e, this.src, o, !!i, r), 
    e.ja = n, t.push(e)), e;
   }, Wt.prototype.remove = function(t, e, n, i) {
    if (t = t.toString(), !(t in this.k)) return !1;
    var r = this.k[t];
    return e = Xt(r, e, n, i), e > -1 ? (Vt(r[e]), x.splice.call(r, e, 1), 0 == r.length && (delete this.k[t], 
    this.fa--), !0) : !1;
   };
   var Gt = function(t, e) {
    var n = e.type;
    if (!(n in t.k)) return !1;
    var i = T(t.k[n], e);
    return i && (Vt(e), 0 == t.k[n].length && (delete t.k[n], t.fa--)), i;
   };
   Wt.prototype.removeAll = function(t) {
    t = t && t.toString();
    var e, n = 0;
    for (e in this.k) if (!t || e == t) {
     for (var i = this.k[e], r = 0; r < i.length; r++) ++n, Vt(i[r]);
     delete this.k[e], this.fa--;
    }
    return n;
   }, Wt.prototype.ba = function(t, e, n, i) {
    t = this.k[t.toString()];
    var r = -1;
    return t && (r = Xt(t, e, n, i)), r > -1 ? t[r] : null;
   };
   var Xt = function(t, e, n, i) {
    for (var r = 0; r < t.length; ++r) {
     var o = t[r];
     if (!o.removed && o.O == e && o.ka == !!n && o.sa == i) return r;
    }
    return -1;
   }, Yt = "closure_lm_" + (1e6 * Math.random() | 0), Jt = {}, Kt = 0, Qt = function(t, e, n, i, r) {
    if (s(e)) {
     for (var o = 0; o < e.length; o++) Qt(t, e[o], n, i, r);
     return null;
    }
    return n = le(n), Ft(t) ? t.listen(e, n, i, r) : Zt(t, e, n, !1, i, r);
   }, Zt = function(t, e, n, i, r, o) {
    if (!e) throw Error("Invalid event type");
    var s = !!r, a = ce(t);
    return a || (t[Yt] = a = new Wt(t)), n = a.add(e, n, i, r, o), n.proxy ? n : (i = te(), 
    n.proxy = i, i.src = t, i.O = n, t.addEventListener ? t.addEventListener(e.toString(), i, s) : t.attachEvent(re(e.toString()), i), 
    Kt++, n);
   }, te = function() {
    var t = ae, e = Nt ? function(n) {
     return t.call(e.src, e.O, n);
    } : function(n) {
     return n = t.call(e.src, e.O, n), n ? void 0 : n;
    };
    return e;
   }, ee = function(t, e, n, i, r) {
    if (s(e)) {
     for (var o = 0; o < e.length; o++) ee(t, e[o], n, i, r);
     return null;
    }
    return n = le(n), Ft(t) ? t.cb(e, n, i, r) : Zt(t, e, n, !0, i, r);
   }, ne = function(t, e, n, i, r) {
    if (s(e)) for (var o = 0; o < e.length; o++) ne(t, e[o], n, i, r); else n = le(n), 
    Ft(t) ? t.jb(e, n, i, r) : t && (t = ce(t)) && (e = t.ba(e, n, !!i, r)) && ie(e);
   }, ie = function(t) {
    if (u(t) || !t || t.removed) return !1;
    var e = t.src;
    if (Ft(e)) return Gt(e.B, t);
    var n = t.type, i = t.proxy;
    return e.removeEventListener ? e.removeEventListener(n, i, t.ka) : e.detachEvent && e.detachEvent(re(n), i), 
    Kt--, (n = ce(e)) ? (Gt(n, t), 0 == n.fa && (n.src = null, e[Yt] = null)) : Vt(t), 
    !0;
   }, re = function(t) {
    return t in Jt ? Jt[t] : Jt[t] = "on" + t;
   }, oe = function(t, e, n, i) {
    var r = !0;
    if ((t = ce(t)) && (e = t.k[e.toString()])) for (e = e.concat(), t = 0; t < e.length; t++) {
     var o = e[t];
     o && o.ka == n && !o.removed && (o = se(o, i), r = r && !1 !== o);
    }
    return r;
   }, se = function(t, e) {
    var n = t.O, i = t.sa || t.src;
    return t.ja && ie(t), n.call(i, e);
   }, ae = function(t, e) {
    if (t.removed) return !0;
    if (!Nt) {
     var i;
     if (!(i = e)) t: {
      i = [ "window", "event" ];
      for (var r, o = n; r = i.shift(); ) {
       if (null == o[r]) {
        i = null;
        break t;
       }
       o = o[r];
      }
      i = o;
     }
     if (r = i, i = new It(r, this), o = !0, !(0 > r.keyCode || void 0 != r.returnValue)) {
      t: {
       var s = !1;
       if (0 == r.keyCode) try {
        r.keyCode = -1;
        break t;
       } catch (a) {
        s = !0;
       }
       (s || void 0 == r.returnValue) && (r.returnValue = !0);
      }
      for (r = [], s = i.currentTarget; s; s = s.parentNode) r.push(s);
      for (var s = t.type, c = r.length - 1; !i.X && c >= 0; c--) {
       i.currentTarget = r[c];
       var u = oe(r[c], s, !0, i), o = o && u;
      }
      for (c = 0; !i.X && c < r.length; c++) i.currentTarget = r[c], u = oe(r[c], s, !1, i), 
      o = o && u;
     }
     return o;
    }
    return se(t, new It(e, this));
   }, ce = function(t) {
    return t = t[Yt], t instanceof Wt ? t : null;
   }, ue = "__closure_events_fn_" + (1e9 * Math.random() >>> 0), le = function(t) {
    return l(t) ? t : (t[ue] || (t[ue] = function(e) {
     return t.handleEvent(e);
    }), t[ue]);
   }, he = function() {
    vt.call(this), this.B = new Wt(this), this.Tb = this, this.fb = null;
   };
   y(he, vt), he.prototype[qt] = !0, t = he.prototype, t.addEventListener = function(t, e, n, i) {
    Qt(this, t, e, n, i);
   }, t.removeEventListener = function(t, e, n, i) {
    ne(this, t, e, n, i);
   }, t.dispatchEvent = function(t) {
    var e, n = this.fb;
    if (n) {
     e = [];
     for (var i = 1; n; n = n.fb) e.push(n), ++i;
    }
    if (n = this.Tb, i = t.type || t, c(t)) t = new gt(t, n); else if (t instanceof gt) t.target = t.target || n; else {
     var r = t;
     t = new gt(i, n), D(t, r);
    }
    var o, r = !0;
    if (e) for (var s = e.length - 1; !t.X && s >= 0; s--) o = t.currentTarget = e[s], 
    r = pe(o, i, !0, t) && r;
    if (t.X || (o = t.currentTarget = n, r = pe(o, i, !0, t) && r, t.X || (r = pe(o, i, !1, t) && r)), 
    e) for (s = 0; !t.X && s < e.length; s++) o = t.currentTarget = e[s], r = pe(o, i, !1, t) && r;
    return r;
   }, t.o = function() {
    he.P.o.call(this), this.B && this.B.removeAll(void 0), this.fb = null;
   }, t.listen = function(t, e, n, i) {
    return this.B.add(String(t), e, !1, n, i);
   }, t.cb = function(t, e, n, i) {
    return this.B.add(String(t), e, !0, n, i);
   }, t.jb = function(t, e, n, i) {
    return this.B.remove(String(t), e, n, i);
   };
   var pe = function(t, e, n, i) {
    if (e = t.B.k[String(e)], !e) return !0;
    e = e.concat();
    for (var r = !0, o = 0; o < e.length; ++o) {
     var s = e[o];
     if (s && !s.removed && s.ka == n) {
      var a = s.O, c = s.sa || s.src;
      s.ja && Gt(t.B, s), r = !1 !== a.call(c, i) && r;
     }
    }
    return r && 0 != i.Hb;
   };
   he.prototype.ba = function(t, e, n, i) {
    return this.B.ba(String(t), e, n, i);
   };
   var fe = function(t, e, n) {
    this.tc = n, this.dc = t, this.Gc = e, this.Ba = 0, this.ta = null;
   };
   fe.prototype.get = function() {
    var t;
    return 0 < this.Ba ? (this.Ba--, t = this.ta, this.ta = t.next, t.next = null) : t = this.dc(), 
    t;
   }, fe.prototype.put = function(t) {
    this.Gc(t), this.Ba < this.tc && (this.Ba++, t.next = this.ta, this.ta = t);
   };
   var de, ve = function(t) {
    n.setTimeout(function() {
     throw t;
    }, 0);
   }, ge = function() {
    var t = n.MessageChannel;
    if ("undefined" == typeof t && "undefined" != typeof window && window.postMessage && window.addEventListener && -1 == yt.indexOf("Presto") && (t = function() {
     var t = document.createElement("IFRAME");
     t.style.display = "none", t.src = "", document.documentElement.appendChild(t);
     var e = t.contentWindow, t = e.document;
     t.open(), t.write(""), t.close();
     var n = "callImmediate" + Math.random(), i = "file:" == e.location.protocol ? "*" : e.location.protocol + "//" + e.location.host, t = d(function(t) {
      "*" != i && t.origin != i || t.data != n || this.port1.onmessage();
     }, this);
     e.addEventListener("message", t, !1), this.port1 = {}, this.port2 = {
      postMessage: function() {
       e.postMessage(n, i);
      }
     };
    }), "undefined" != typeof t && !_t()) {
     var e = new t(), r = {}, o = r;
     return e.port1.onmessage = function() {
      if (i(r.next)) {
       r = r.next;
       var t = r.ob;
       r.ob = null, t();
      }
     }, function(t) {
      o.next = {
       ob: t
      }, o = o.next, e.port2.postMessage(0);
     };
    }
    return "undefined" != typeof document && "onreadystatechange" in document.createElement("SCRIPT") ? function(t) {
     var e = document.createElement("SCRIPT");
     e.onreadystatechange = function() {
      e.onreadystatechange = null, e.parentNode.removeChild(e), e = null, t(), t = null;
     }, document.documentElement.appendChild(e);
    } : function(t) {
     n.setTimeout(t, 0);
    };
   }, me = function() {
    this.Ka = this.Z = null;
   }, ye = new fe(function() {
    return new be();
   }, function(t) {
    t.reset();
   }, 100);
   me.prototype.add = function(t, e) {
    var n = ye.get();
    n.set(t, e), this.Ka ? this.Ka.next = n : this.Z = n, this.Ka = n;
   }, me.prototype.remove = function() {
    var t = null;
    return this.Z && (t = this.Z, this.Z = this.Z.next, this.Z || (this.Ka = null), 
    t.next = null), t;
   };
   var be = function() {
    this.next = this.scope = this.Wa = null;
   };
   be.prototype.set = function(t, e) {
    this.Wa = t, this.scope = e, this.next = null;
   }, be.prototype.reset = function() {
    this.next = this.scope = this.Wa = null;
   };
   var we, _e = function(t, e) {
    we || xe(), $e || (we(), $e = !0), ke.add(t, e);
   }, xe = function() {
    if (n.Promise && n.Promise.resolve) {
     var t = n.Promise.resolve();
     we = function() {
      t.then(Se);
     };
    } else we = function() {
     var t = Se;
     !l(n.setImmediate) || n.Window && n.Window.prototype && n.Window.prototype.setImmediate == n.setImmediate ? (de || (de = ge()), 
     de(t)) : n.setImmediate(t);
    };
   }, $e = !1, ke = new me(), Se = function() {
    for (var t = null; t = ke.remove(); ) {
     try {
      t.Wa.call(t.scope);
     } catch (e) {
      ve(e);
     }
     ye.put(t);
    }
    $e = !1;
   }, Ee = function(t) {
    t.prototype.then = t.prototype.then, t.prototype.$goog_Thenable = !0;
   }, Ce = function(t) {
    if (!t) return !1;
    try {
     return !!t.$goog_Thenable;
    } catch (e) {
     return !1;
    }
   }, Te = function(t, e) {
    if (this.m = 0, this.D = void 0, this.S = this.G = this.l = null, this.ra = this.Va = !1, 
    t == Le) Re(this, 2, e); else try {
     var n = this;
     t.call(e, function(t) {
      Re(n, 2, t);
     }, function(t) {
      Re(n, 3, t);
     });
    } catch (i) {
     Re(this, 3, i);
    }
   }, Ae = function() {
    this.next = this.context = this.da = this.Da = this.L = null, this.Na = !1;
   };
   Ae.prototype.reset = function() {
    this.context = this.da = this.Da = this.L = null, this.Na = !1;
   };
   var je = new fe(function() {
    return new Ae();
   }, function(t) {
    t.reset();
   }, 100), Pe = function(t, e, n) {
    var i = je.get();
    return i.Da = t, i.da = e, i.context = n, i;
   }, Le = function() {};
   Te.prototype.then = function(t, e, n) {
    return Ne(this, l(t) ? t : null, l(e) ? e : null, n);
   }, Ee(Te), Te.prototype.cancel = function(t) {
    0 == this.m && _e(function() {
     var e = new ze(t);
     Oe(this, e);
    }, this);
   };
   var Oe = function(t, e) {
    if (0 == t.m) if (t.l) {
     var n = t.l;
     if (n.G) {
      for (var i = 0, r = null, o = null, s = n.G; s && (s.Na || (i++, s.L == t && (r = s), 
      !(r && i > 1))); s = s.next) r || (o = s);
      r && (0 == n.m && 1 == i ? Oe(n, e) : (o ? (i = o, i.next == n.S && (n.S = i), i.next = i.next.next) : Be(n), 
      Ie(n, r, 3, e)));
     }
     t.l = null;
    } else Re(t, 3, e);
   }, Me = function(t, e) {
    t.G || 2 != t.m && 3 != t.m || De(t), t.S ? t.S.next = e : t.G = e, t.S = e;
   }, Ne = function(t, e, n, r) {
    var o = Pe(null, null, null);
    return o.L = new Te(function(t, s) {
     o.Da = e ? function(n) {
      try {
       var i = e.call(r, n);
       t(i);
      } catch (o) {
       s(o);
      }
     } : t, o.da = n ? function(e) {
      try {
       var o = n.call(r, e);
       !i(o) && e instanceof ze ? s(e) : t(o);
      } catch (a) {
       s(a);
      }
     } : s;
    }), o.L.l = t, Me(t, o), o.L;
   };
   Te.prototype.Pb = function(t) {
    this.m = 0, Re(this, 2, t);
   }, Te.prototype.Qb = function(t) {
    this.m = 0, Re(this, 3, t);
   };
   var Re = function(t, e, n) {
    if (0 == t.m) {
     if (t == n) e = 3, n = new TypeError("Promise cannot resolve to itself"); else {
      if (Ce(n)) {
       t.m = 1, e = n, n = t.Pb;
       var i = t.Qb;
       return void (e instanceof Te ? Me(e, Pe(n || r, i || null, t)) : e.then(n, i, t));
      }
      if (h(n)) try {
       if (i = n.then, l(i)) return void He(t, n, i);
      } catch (o) {
       e = 3, n = o;
      }
     }
     t.D = n, t.m = e, t.l = null, De(t), 3 != e || n instanceof ze || qe(t, n);
    }
   }, He = function(t, e, n) {
    t.m = 1;
    var i = !1, r = function(e) {
     i || (i = !0, t.Pb(e));
    }, o = function(e) {
     i || (i = !0, t.Qb(e));
    };
    try {
     n.call(e, r, o);
    } catch (s) {
     o(s);
    }
   }, De = function(t) {
    t.Va || (t.Va = !0, _e(t.gc, t));
   }, Be = function(t) {
    var e = null;
    return t.G && (e = t.G, t.G = e.next, e.next = null), t.G || (t.S = null), e;
   };
   Te.prototype.gc = function() {
    for (var t = null; t = Be(this); ) Ie(this, t, this.m, this.D);
    this.Va = !1;
   };
   var Ie = function(t, e, n, i) {
    if (e.L && (e.L.l = null), 2 == n) e.Da.call(e.context, i); else if (null != e.da) {
     if (!e.Na) for (;t && t.ra; t = t.l) t.ra = !1;
     e.da.call(e.context, i);
    }
    je.put(e);
   }, qe = function(t, e) {
    t.ra = !0, _e(function() {
     t.ra && Fe.call(null, e);
    });
   }, Fe = ve, ze = function(t) {
    b.call(this, t);
   };
   y(ze, b), ze.prototype.name = "cancel";
   var Ue = function(t, e) {
    this.Fa = [], this.Cb = t, this.rb = e || null, this.ca = this.C = !1, this.D = void 0, 
    this.hb = this.Xb = this.Oa = !1, this.Ia = 0, this.l = null, this.Qa = 0;
   };
   Ue.prototype.cancel = function(t) {
    if (this.C) this.D instanceof Ue && this.D.cancel(); else {
     if (this.l) {
      var e = this.l;
      delete this.l, t ? e.cancel(t) : (e.Qa--, 0 >= e.Qa && e.cancel());
     }
     this.Cb ? this.Cb.call(this.rb, this) : this.hb = !0, this.C || this.A(new tn());
    }
   }, Ue.prototype.qb = function(t, e) {
    this.Oa = !1, Ve(this, t, e);
   };
   var Ve = function(t, e, n) {
    t.C = !0, t.D = n, t.ca = !e, Je(t);
   }, We = function(t) {
    if (t.C) {
     if (!t.hb) throw new Ze();
     t.hb = !1;
    }
   };
   Ue.prototype.v = function(t) {
    We(this), Ve(this, !0, t);
   }, Ue.prototype.A = function(t) {
    We(this), Ve(this, !1, t);
   }, Ue.prototype.n = function(t, e) {
    return Ge(this, t, null, e);
   };
   var Ge = function(t, e, n, i) {
    return t.Fa.push([ e, n, i ]), t.C && Je(t), t;
   };
   Ue.prototype.then = function(t, e, n) {
    var i, r, o = new Te(function(t, e) {
     i = t, r = e;
    });
    return Ge(this, i, function(t) {
     t instanceof tn ? o.cancel() : r(t);
    }), o.then(t, e, n);
   }, Ee(Ue);
   var Xe = function(t) {
    var e = new Ue();
    return Ge(t, e.v, e.A, e), e;
   }, Ye = function(t) {
    return S(t.Fa, function(t) {
     return l(t[1]);
    });
   }, Je = function(t) {
    if (t.Ia && t.C && Ye(t)) {
     var e = t.Ia, r = nn[e];
     r && (n.clearTimeout(r.ua), delete nn[e]), t.Ia = 0;
    }
    t.l && (t.l.Qa--, delete t.l);
    for (var e = t.D, o = r = !1; t.Fa.length && !t.Oa; ) {
     var s = t.Fa.shift(), a = s[0], c = s[1], s = s[2];
     if (a = t.ca ? c : a) try {
      var u = a.call(s || t.rb, e);
      i(u) && (t.ca = t.ca && (u == e || u instanceof Error), t.D = e = u), Ce(e) && (o = !0, 
      t.Oa = !0);
     } catch (l) {
      e = l, t.ca = !0, Ye(t) || (r = !0);
     }
    }
    t.D = e, o && (u = d(t.qb, t, !0), o = d(t.qb, t, !1), e instanceof Ue ? (Ge(e, u, o), 
    e.Xb = !0) : e.then(u, o)), r && (e = new en(e), nn[e.ua] = e, t.Ia = e.ua);
   }, Ke = function(t) {
    var e = new Ue();
    return e.v(t), e;
   }, Qe = function() {
    var t = ii, e = new Ue();
    return e.A(t), e;
   }, Ze = function() {
    b.call(this);
   };
   y(Ze, b), Ze.prototype.message = "Deferred has already fired", Ze.prototype.name = "AlreadyCalledError";
   var tn = function() {
    b.call(this);
   };
   y(tn, b), tn.prototype.message = "Deferred was canceled", tn.prototype.name = "CanceledError";
   var en = function(t) {
    this.ua = n.setTimeout(d(this.Tc, this), 0), this.na = t;
   };
   en.prototype.Tc = function() {
    throw delete nn[this.ua], this.na;
   };
   var nn = {}, rn = function(t) {
    this.qa = [], this.e = t;
   };
   rn.prototype.R = function(t) {
    if (!l(t)) throw Error("Invalid filter. Must be a function.");
    this.qa.push(t);
   }, rn.prototype.send = function(t, e) {
    if (0 == this.qa.length) return this.e.send(t, e);
    var n = new sn(t, e);
    return on(this, 0, n).n(function() {
     return n.Sa ? void 0 : this.e.send(t, e);
    }, this);
   };
   var on = function(t, e, n) {
    return Ke().n(function() {
     return this.qa[e](n);
    }, t).n(function() {
     return ++e < this.qa.length && !n.Sa ? on(this, e, n) : void 0;
    }, t);
   }, sn = function(t, e) {
    this.Wc = t, this.Cc = e, this.Sa = !1;
   };
   sn.prototype.ub = function() {
    return this.Wc;
   }, sn.prototype.V = function() {
    return this.Cc;
   }, sn.prototype.cancel = function() {
    this.Sa = !0;
   }, B("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));
   var an = function(t, e) {
    this.width = t, this.height = e;
   };
   an.prototype.clone = function() {
    return new an(this.width, this.height);
   }, an.prototype.floor = function() {
    return this.width = Math.floor(this.width), this.height = Math.floor(this.height), 
    this;
   }, !St && !kt || kt && kt && (xt() || Mt >= 9) || St && Pt("1.9.1"), kt && Pt("9");
   var cn = {
    id: "apiVersion",
    name: "v",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, un = {
    id: "appName",
    name: "an",
    valueType: "text",
    maxLength: 100,
    defaultValue: void 0
   }, ln = {
    id: "appVersion",
    name: "av",
    valueType: "text",
    maxLength: 100,
    defaultValue: void 0
   }, hn = {
    id: "clientId",
    name: "cid",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, pn = {
    id: "language",
    name: "ul",
    valueType: "text",
    maxLength: 20,
    defaultValue: void 0
   }, fn = {
    id: "libVersion",
    name: "_v",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, dn = {
    id: "sampleRateOverride",
    name: "usro",
    valueType: "integer",
    maxLength: void 0,
    defaultValue: void 0
   }, vn = {
    id: "screenColors",
    name: "sd",
    valueType: "text",
    maxLength: 20,
    defaultValue: void 0
   }, gn = {
    id: "screenResolution",
    name: "sr",
    valueType: "text",
    maxLength: 20,
    defaultValue: void 0
   }, mn = {
    id: "trackingId",
    name: "tid",
    valueType: "text",
    maxLength: void 0,
    defaultValue: void 0
   }, yn = {
    id: "viewportSize",
    name: "vp",
    valueType: "text",
    maxLength: 20,
    defaultValue: void 0
   }, bn = {
    ad: cn,
    dd: un,
    ed: ln,
    nd: hn,
    Fd: pn,
    Gd: fn,
    Md: dn,
    Nd: vn,
    Od: gn,
    ae: mn,
    he: yn
   }, wn = function(t) {
    if (!c(t)) return t;
    var e = _n(t, Q);
    if (h(e)) return e;
    if (e = _n(t, bn), h(e)) return e;
    if (e = /^dimension(\d+)$/.exec(t), null !== e) return Z(parseInt(e[1], 10));
    if (e = /^metric(\d+)$/.exec(t), null !== e) return tt(parseInt(e[1], 10));
    throw Error(t + " is not a valid parameter name.");
   }, _n = function(t, e) {
    var n = R(e, function(e) {
     return e.id == t && "metric" != t && "dimension" != t;
    });
    return h(n) ? n : null;
   }, xn = function(t, e) {
    this.ac = e, this.q = e.Xa(), this.Fb = new ht(), this.ib = !1;
   };
   t = xn.prototype, t.set = function(t, e) {
    if (null == e) throw Error("Value must be defined and not null. Parameter=" + t.id);
    var n = wn(t);
    this.Fb.set(n, e);
   }, t.R = function(t) {
    this.ac.R(t);
   }, t.send = function(t, e) {
    if (t instanceof ft) return t.send(this);
    var n = this.Fb.clone();
    return e instanceof ht ? n.ha(e) : h(e) && O(e, function(t, e) {
     null != t && n.set(wn(e), t);
    }, this), this.ib && (this.ib = !1, n.set(W, "start")), this.q.send(t, n);
   }, t.Hc = function(t) {
    var e = {
     description: t
    };
    return this.set(G, t), this.send("appview", e);
   }, t.Ic = function(t, e, n, i) {
    return this.send("event", {
     eventCategory: t,
     eventAction: e,
     eventLabel: n,
     eventValue: i
    });
   }, t.Kc = function(t, e, n) {
    return this.send("social", {
     socialNetwork: t,
     socialAction: e,
     socialTarget: n
    });
   }, t.Jc = function(t, e) {
    return this.send("exception", {
     exDescription: t,
     exFatal: e
    });
   }, t.Ib = function(t, e, n, i, r) {
    return this.send("timing", {
     timingCategory: t,
     timingVar: e,
     timingLabel: i,
     timingValue: n,
     sampleRateOverride: r
    });
   }, t.jc = function() {
    this.ib = !0;
   }, t.Rc = function(t, e, n, i) {
    return new $n(this, t, e, n, i);
   };
   var $n = function(t, e, n, i, r) {
    this.Ob = t, this.Zb = e, this.Xc = n, this.rc = i, this.Ea = r, this.Qc = g();
   };
   $n.prototype.send = function() {
    var t = this.Ob.Ib(this.Zb, this.Xc, g() - this.Qc, this.rc, this.Ea);
    return this.Ob = null, t;
   };
   var kn = function(t, e, n, i, r) {
    this.sc = t, this.Ub = e, this.Vb = n, this.g = i, this.$b = r;
   };
   kn.prototype.mc = function(t) {
    var e = new xn(0, this.$b.create());
    return e.set(fn, this.sc), e.set(cn, 1), e.set(un, this.Ub), e.set(ln, this.Vb), 
    e.set(mn, t), (t = navigator.language || navigator.browserLanguage) && e.set(pn, t), 
    (t = screen.colorDepth + "-bit") && e.set(vn, t), (t = [ screen.width, screen.height ].join("x")) && e.set(gn, t), 
    t = window.document, t = "CSS1Compat" == t.compatMode ? t.documentElement : t.body, 
    t = new an(t.clientWidth, t.clientHeight), (t = [ t.width, t.height ].join("x")) && e.set(yn, t), 
    e;
   }, kn.prototype.kc = function() {
    return Xe(this.g.ea);
   };
   var Sn = function(t, e, n, i, r, o) {
    for (Ue.call(this, r, o), this.bb = t, this.Ta = [], this.tb = !!e, this.ic = !!n, 
    this.cc = !!i, e = this.Bb = 0; e < t.length; e++) Ge(t[e], d(this.vb, this, e, !0), d(this.vb, this, e, !1));
    0 != t.length || this.tb || this.v(this.Ta);
   };
   y(Sn, Ue), Sn.prototype.vb = function(t, e, n) {
    return this.Bb++, this.Ta[t] = [ e, n ], this.C || (this.tb && e ? this.v([ t, n ]) : this.ic && !e ? this.A(n) : this.Bb == this.bb.length && this.v(this.Ta)), 
    this.cc && !e && (n = null), n;
   }, Sn.prototype.A = function(t) {
    for (Sn.P.A.call(this, t), t = 0; t < this.bb.length; t++) this.bb[t].cancel();
   };
   var En = function(t) {
    return new Sn(t, !1, !0).n(function(t) {
     for (var e = [], n = 0; n < t.length; n++) e[n] = t[n][1];
     return e;
    });
   }, Cn = function() {
    for (var t = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""), e = 0, n = t.length; n > e; e++) switch (t[e]) {
    case "x":
     t[e] = Math.floor(16 * Math.random()).toString(16);
     break;

    case "y":
     t[e] = (Math.floor(4 * Math.random()) + 8).toString(16);
    }
    return t.join("");
   }, Tn = function(t) {
    this.J = t, this.Ea = 100, this.pb = [], this.W = this.ga = null, this.ea = An(this), 
    this.ea.n(function() {
     this.Jb = Qt(this.J, "a", d(this.nc, this));
    }, this);
   }, An = function(t) {
    return jn(t).n(function() {
     return this;
    }, t);
   }, jn = function(t) {
    return En([ Ln(t), Mn(t) ]);
   };
   Tn.prototype.nc = function() {
    Dn(this);
    var t = On(this), e = this.xa();
    jn(this).n(function() {
     t != On(this) && Hn(this, "analytics.user-id"), e != this.xa() && Hn(this, "analytics.tracking-permitted");
    }, this);
   };
   var Pn = function(t, e) {
    Dn(t), t.pb.push(e);
   };
   Tn.prototype.Oc = function(t) {
    Dn(this);
    var e = this.W != t;
    this.W = t, this.J.set("analytics.tracking-permitted", t.toString()), e && Hn(this, "analytics.tracking-permitted");
   }, Tn.prototype.xa = function() {
    Dn(this);
    var t;
    return (t = this.W) && (t = n._gaUserPrefs, t = !(t && t.ioo && t.ioo())), t;
   };
   var Ln = function(t) {
    return t.J.get("analytics.tracking-permitted").n(function(t) {
     if (this.W = !0, i(t)) switch (t) {
     case "true":
      this.W = !0;
      break;

     case "false":
      this.W = !1;
     }
    }, t);
   }, On = function(t) {
    if (Dn(t), !c(t.ga)) throw Error("Invalid state. UserID is not a string.");
    return t.ga;
   }, Mn = function(t) {
    return t.J.get("analytics.user-id").n(function(t) {
     i(t) ? this.ga = t : Nn(this);
    }, t);
   }, Nn = function(t) {
    return t.ga = Cn(), t.J.set("analytics.user-id", t.ga).n(function() {
     Hn(this, "analytics.user-id");
    }, t);
   };
   Tn.prototype.Nc = function(t) {
    Dn(this), this.Ea = t;
   };
   var Rn = function(t) {
    return Dn(t), t.Ea;
   };
   Tn.prototype.Fc = function() {
    return Nn(this);
   };
   var Hn = function(t, e) {
    k(t.pb, function(t) {
     t(e);
    });
   };
   Tn.prototype.ma = function() {
    null != this.Jb && ie(this.Jb);
   };
   var Dn = function(t) {
    if (!Xe(t.ea).C) throw Error("Settings object accessed prior to entering ready state.");
   }, Bn = function() {
    he.call(this), this.eb = "google-analytics", this.J = chrome.storage.local, chrome.storage.onChanged.addListener(d(this.Ac, this));
   };
   y(Bn, he), Bn.prototype.Ac = function(t) {
    In(this, t) && this.dispatchEvent("a");
   };
   var In = function(t, e) {
    return S(N(e), function(t) {
     return 0 == t.lastIndexOf(this.eb, 0);
    }, t);
   };
   Bn.prototype.get = function(t) {
    var e = new Ue(), n = this.eb + "." + t;
    return this.J.get(n, function(t) {
     chrome.runtime.lastError ? e.A(chrome.runtime.lastError) : (t = t[n], e.v(null != t ? t.toString() : void 0));
    }), e;
   }, Bn.prototype.set = function(t, e) {
    var n = new Ue(), i = {};
    return i[this.eb + "." + t] = e, this.J.set(i, function() {
     chrome.runtime.lastError ? n.A(chrome.runtime.lastError) : n.v();
    }), n;
   };
   var qn = function() {};
   qn.lc = function() {
    return qn.yb ? qn.yb : qn.yb = new qn();
   }, qn.prototype.send = function() {
    return Ke();
   };
   var Fn = function(t) {
    this.ec = t;
   };
   Fn.prototype.send = function(t, e) {
    return this.ec.push({
     pc: t,
     Bc: e
    }), Ke();
   };
   var zn = function(t, e, n) {
    this.g = t, this.U = [], this.K = {
     enabled: new Fn(this.U),
     disabled: n
    }, this.q = this.K.enabled, Ge(Xe(this.g.ea), v(this.zc, e), this.yc, this);
   };
   zn.prototype.zc = function(t) {
    if (null === this.U) throw Error("Channel setup already completed.");
    this.K.enabled = t(), Un(this), k(this.U, function(t) {
     this.send(t.pc, t.Bc);
    }, this), this.U = null, Pn(this.g, d(this.xc, this));
   }, zn.prototype.yc = function() {
    if (null === this.U) throw Error("Channel setup already completed.");
    this.q = this.K.enabled = this.K.disabled, this.U = null;
   }, zn.prototype.send = function(t, e) {
    return this.q.send(t, e);
   };
   var Un = function(t) {
    t.q = t.g.xa() ? t.K.enabled : t.K.disabled;
   };
   zn.prototype.xc = function(t) {
    switch (t) {
    case "analytics.tracking-permitted":
     Un(this);
    }
   };
   var Vn = function(t, e) {
    this.Ra = [];
    var n = d(function() {
     return this.pa = new rn(e.Xa()), k(this.Ra, function(t) {
      this.pa.R(t);
     }, this), this.Ra = null, this.pa;
    }, this);
    this.q = new zn(t, n, qn.lc());
   };
   Vn.prototype.Xa = function() {
    return this.q;
   }, Vn.prototype.R = function(t) {
    this.pa ? this.pa.R(t) : this.Ra.push(t);
   };
   var Wn = function(t, e) {
    this.g = t, this.Pc = e;
   };
   Wn.prototype.create = function() {
    return new Vn(this.g, this.Pc);
   };
   var Gn = function(t, e) {
    he.call(this), this.wa = t || 1, this.Y = e || n, this.Pa = d(this.Uc, this), this.ab = g();
   };
   y(Gn, he), t = Gn.prototype, t.enabled = !1, t.h = null, t.Uc = function() {
    if (this.enabled) {
     var t = g() - this.ab;
     t > 0 && t < .8 * this.wa ? this.h = this.Y.setTimeout(this.Pa, this.wa - t) : (this.h && (this.Y.clearTimeout(this.h), 
     this.h = null), this.dispatchEvent("tick"), this.enabled && (this.h = this.Y.setTimeout(this.Pa, this.wa), 
     this.ab = g()));
    }
   }, t.start = function() {
    this.enabled = !0, this.h || (this.h = this.Y.setTimeout(this.Pa, this.wa), this.ab = g());
   }, t.stop = function() {
    this.enabled = !1, this.h && (this.Y.clearTimeout(this.h), this.h = null);
   }, t.o = function() {
    Gn.P.o.call(this), this.stop(), delete this.Y;
   };
   var Xn = function(t, e, i) {
    if (l(t)) i && (t = d(t, i)); else {
     if (!t || "function" != typeof t.handleEvent) throw Error("Invalid listener argument");
     t = d(t.handleEvent, t);
    }
    return e > 2147483647 ? -1 : n.setTimeout(t, e || 0);
   }, Yn = function(t) {
    vt.call(this), this.Ya = t, this.b = {};
   };
   y(Yn, vt);
   var Jn = [];
   Yn.prototype.listen = function(t, e, n, i) {
    s(e) || (e && (Jn[0] = e.toString()), e = Jn);
    for (var r = 0; r < e.length; r++) {
     var o = Qt(t, e[r], n || this.handleEvent, i || !1, this.Ya || this);
     if (!o) break;
     this.b[o.key] = o;
    }
    return this;
   }, Yn.prototype.cb = function(t, e, n, i) {
    return Kn(this, t, e, n, i);
   };
   var Kn = function(t, e, n, i, r, o) {
    if (s(n)) for (var a = 0; a < n.length; a++) Kn(t, e, n[a], i, r, o); else {
     if (e = ee(e, n, i || t.handleEvent, r, o || t.Ya || t), !e) return t;
     t.b[e.key] = e;
    }
    return t;
   };
   Yn.prototype.jb = function(t, e, n, i, r) {
    if (s(e)) for (var o = 0; o < e.length; o++) this.jb(t, e[o], n, i, r); else n = n || this.handleEvent, 
    r = r || this.Ya || this, n = le(n), i = !!i, e = Ft(t) ? t.ba(e, n, i, r) : t && (t = ce(t)) ? t.ba(e, n, i, r) : null, 
    e && (ie(e), delete this.b[e.key]);
    return this;
   }, Yn.prototype.removeAll = function() {
    O(this.b, ie), this.b = {};
   }, Yn.prototype.o = function() {
    Yn.P.o.call(this), this.removeAll();
   }, Yn.prototype.handleEvent = function() {
    throw Error("EventHandler.handleEvent not implemented");
   };
   var Qn = function() {
    he.call(this), this.oa = new Yn(this), Ht && (Dt ? this.oa.listen(Bt ? document.body : window, [ "online", "offline" ], this.wb) : (this.Eb = Ht ? navigator.onLine : !0, 
    this.h = new Gn(250), this.oa.listen(this.h, "tick", this.oc), this.h.start()));
   };
   y(Qn, he), Qn.prototype.oc = function() {
    var t = Ht ? navigator.onLine : !0;
    t != this.Eb && (this.Eb = t, this.wb());
   }, Qn.prototype.wb = function() {
    this.dispatchEvent((Ht ? navigator.onLine : 1) ? "online" : "offline");
   }, Qn.prototype.o = function() {
    Qn.P.o.call(this), this.oa.ma(), this.oa = null, this.h && (this.h.ma(), this.h = null);
   };
   var Zn = function(t, e) {
    this.g = t, this.e = e;
   };
   Zn.prototype.send = function(t, e) {
    return e.set(hn, On(this.g)), this.e.send(t, e);
   };
   var ti = function(t) {
    this.e = t;
   };
   ti.prototype.send = function(t, e) {
    return ei(e), ni(e), this.e.send(t, e);
   };
   var ei = function(t) {
    pt(t, function(e, n) {
     i(e.maxLength) && "text" == e.valueType && 0 < e.maxLength && n.length > e.maxLength && t.set(e, n.substring(0, e.maxLength));
    });
   }, ni = function(t) {
    pt(t, function(e, n) {
     i(e.defaultValue) && n == e.defaultValue && t.remove(e);
    });
   }, ii = {
    status: "device-offline",
    la: void 0
   }, ri = {
    status: "rate-limited",
    la: void 0
   }, oi = {
    status: "sampled-out",
    la: void 0
   }, si = {
    status: "sent",
    la: void 0
   }, ai = function(t, e) {
    this.Vc = t, this.e = e;
   };
   ai.prototype.send = function(t, e) {
    var n;
    n = this.Vc;
    var i = n.Lb(), r = Math.floor((i - n.Ab) * n.hc);
    return r > 0 && (n.$ = Math.min(n.$ + r, n.uc), n.Ab = i), 1 > n.$ ? n = !1 : (--n.$, 
    n = !0), n || "item" == t || "transaction" == t ? this.e.send(t, e) : Ke(ri);
   };
   var ci = function() {
    this.$ = 60, this.uc = 500, this.hc = 5e-4, this.Lb = function() {
     return new Date().getTime();
    }, this.Ab = this.Lb();
   }, ui = function(t, e) {
    this.g = t, this.e = e;
   };
   ui.prototype.send = function(t, e) {
    var n, i = e.get(hn), i = parseInt(i.split("-")[1], 16);
    return "timing" != t ? n = Rn(this.g) : ((n = e.get(dn)) && e.remove(dn), n = n || Rn(this.g)), 
    655.36 * n > i ? this.e.send(t, e) : Ke(oi);
   };
   var li = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/, hi = function(t) {
    if (pi) {
     pi = !1;
     var e = n.location;
     if (e) {
      var i = e.href;
      if (i && (i = (i = hi(i)[3] || null) ? decodeURI(i) : i) && i != e.hostname) throw pi = !0, 
      Error();
     }
    }
    return t.match(li);
   }, pi = Et, fi = function(t, e) {
    for (var n = t.split("&"), i = 0; i < n.length; i++) {
     var r = n[i].indexOf("="), o = null, s = null;
     r >= 0 ? (o = n[i].substring(0, r), s = n[i].substring(r + 1)) : o = n[i], e(o, s ? decodeURIComponent(s.replace(/\+/g, " ")) : "");
    }
   }, di = function() {};
   di.prototype.nb = null;
   var vi, gi = function(t) {
    var e;
    return (e = t.nb) || (e = {}, bi(t) && (e[0] = !0, e[1] = !0), e = t.nb = e), e;
   }, mi = function() {};
   y(mi, di);
   var yi = function(t) {
    return (t = bi(t)) ? new ActiveXObject(t) : new XMLHttpRequest();
   }, bi = function(t) {
    if (!t.xb && "undefined" == typeof XMLHttpRequest && "undefined" != typeof ActiveXObject) {
     for (var e = [ "MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ], n = 0; n < e.length; n++) {
      var i = e[n];
      try {
       return new ActiveXObject(i), t.xb = i;
      } catch (r) {}
     }
     throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");
    }
    return t.xb;
   };
   vi = new mi();
   var wi = function(t) {
    he.call(this), this.headers = new I(), this.Ma = t || null, this.F = !1, this.La = this.a = null, 
    this.za = this.$a = "", this.N = this.Za = this.va = this.Ua = !1, this.Ha = 0, 
    this.Ga = null, this.Gb = "", this.kb = this.Zc = !1;
   };
   y(wi, he);
   var _i = /^https?$/i, xi = [ "POST", "PUT" ], $i = [], ki = function(t, e, n) {
    var i = new wi();
    $i.push(i), e && i.listen("complete", e), i.cb("ready", i.bc), i.send(t, "POST", n, void 0);
   };
   wi.prototype.bc = function() {
    this.ma(), T($i, this);
   }, wi.prototype.send = function(t, e, i, r) {
    if (this.a) throw Error("[goog.net.XhrIo] Object is active with another request=" + this.$a + "; newUri=" + t);
    e = e ? e.toUpperCase() : "GET", this.$a = t, this.za = "", this.Ua = !1, this.F = !0, 
    this.a = yi(this.Ma ? this.Ma : vi), this.La = gi(this.Ma ? this.Ma : vi), this.a.onreadystatechange = d(this.Db, this);
    try {
     this.Za = !0, this.a.open(e, String(t), !0), this.Za = !1;
    } catch (o) {
     return void this.na(5, o);
    }
    t = i || "";
    var s = this.headers.clone();
    r && lt(r, function(t, e) {
     s.set(e, t);
    }), r = C(s.H()), i = n.FormData && t instanceof n.FormData, !(0 <= $(xi, e)) || r || i || s.set("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"), 
    s.forEach(function(t, e) {
     this.a.setRequestHeader(e, t);
    }, this), this.Gb && (this.a.responseType = this.Gb), "withCredentials" in this.a && (this.a.withCredentials = this.Zc);
    try {
     ji(this), 0 < this.Ha && ((this.kb = Si(this.a)) ? (this.a.timeout = this.Ha, this.a.ontimeout = d(this.Mb, this)) : this.Ga = Xn(this.Mb, this.Ha, this)), 
     this.va = !0, this.a.send(t), this.va = !1;
    } catch (a) {
     this.na(5, a);
    }
   };
   var Si = function(t) {
    return kt && Pt(9) && u(t.timeout) && i(t.ontimeout);
   }, Ei = function(t) {
    return "content-type" == t.toLowerCase();
   };
   wi.prototype.Mb = function() {
    "undefined" != typeof e && this.a && (this.za = "Timed out after " + this.Ha + "ms, aborting", 
    this.dispatchEvent("timeout"), this.abort(8));
   }, wi.prototype.na = function(t, e) {
    this.F = !1, this.a && (this.N = !0, this.a.abort(), this.N = !1), this.za = e, 
    Ci(this), Ai(this);
   };
   var Ci = function(t) {
    t.Ua || (t.Ua = !0, t.dispatchEvent("complete"), t.dispatchEvent("error"));
   };
   wi.prototype.abort = function() {
    this.a && this.F && (this.F = !1, this.N = !0, this.a.abort(), this.N = !1, this.dispatchEvent("complete"), 
    this.dispatchEvent("abort"), Ai(this));
   }, wi.prototype.o = function() {
    this.a && (this.F && (this.F = !1, this.N = !0, this.a.abort(), this.N = !1), Ai(this, !0)), 
    wi.P.o.call(this);
   }, wi.prototype.Db = function() {
    this.aa || (this.Za || this.va || this.N ? Ti(this) : this.wc());
   }, wi.prototype.wc = function() {
    Ti(this);
   };
   var Ti = function(t) {
    if (t.F && "undefined" != typeof e && (!t.La[1] || 4 != Pi(t) || 2 != Li(t))) if (t.va && 4 == Pi(t)) Xn(t.Db, 0, t); else if (t.dispatchEvent("readystatechange"), 
    4 == Pi(t)) {
     t.F = !1;
     try {
      var n, i = Li(t);
      t: switch (i) {
      case 200:
      case 201:
      case 202:
      case 204:
      case 206:
      case 304:
      case 1223:
       n = !0;
       break t;

      default:
       n = !1;
      }
      var r;
      if (!(r = n)) {
       var o;
       if (o = 0 === i) {
        var s = hi(String(t.$a))[1] || null;
        if (!s && self.location) var a = self.location.protocol, s = a.substr(0, a.length - 1);
        o = !_i.test(s ? s.toLowerCase() : "");
       }
       r = o;
      }
      if (r) t.dispatchEvent("complete"), t.dispatchEvent("success"); else {
       var c;
       try {
        c = 2 < Pi(t) ? t.a.statusText : "";
       } catch (u) {
        c = "";
       }
       t.za = c + " [" + Li(t) + "]", Ci(t);
      }
     } finally {
      Ai(t);
     }
    }
   }, Ai = function(t, e) {
    if (t.a) {
     ji(t);
     var n = t.a, i = t.La[0] ? r : null;
     t.a = null, t.La = null, e || t.dispatchEvent("ready");
     try {
      n.onreadystatechange = i;
     } catch (o) {}
    }
   }, ji = function(t) {
    t.a && t.kb && (t.a.ontimeout = null), u(t.Ga) && (n.clearTimeout(t.Ga), t.Ga = null);
   }, Pi = function(t) {
    return t.a ? t.a.readyState : 0;
   }, Li = function(t) {
    try {
     return 2 < Pi(t) ? t.a.status : -1;
    } catch (e) {
     return -1;
    }
   }, Oi = function(t, e, n) {
    this.r = t || null, this.qc = !!n;
   }, Mi = function(t) {
    t.c || (t.c = new I(), t.j = 0, t.r && fi(t.r, function(e, n) {
     t.add(decodeURIComponent(e.replace(/\+/g, " ")), n);
    }));
   };
   t = Oi.prototype, t.c = null, t.j = null, t.add = function(t, e) {
    Mi(this), this.r = null, t = Ni(this, t);
    var n = this.c.get(t);
    return n || this.c.set(t, n = []), n.push(e), this.j++, this;
   }, t.remove = function(t) {
    return Mi(this), t = Ni(this, t), this.c.T(t) ? (this.r = null, this.j -= this.c.get(t).length, 
    this.c.remove(t)) : !1;
   }, t.T = function(t) {
    return Mi(this), t = Ni(this, t), this.c.T(t);
   }, t.H = function() {
    Mi(this);
    for (var t = this.c.t(), e = this.c.H(), n = [], i = 0; i < e.length; i++) for (var r = t[i], o = 0; o < r.length; o++) n.push(e[i]);
    return n;
   }, t.t = function(t) {
    Mi(this);
    var e = [];
    if (c(t)) this.T(t) && (e = A(e, this.c.get(Ni(this, t)))); else {
     t = this.c.t();
     for (var n = 0; n < t.length; n++) e = A(e, t[n]);
    }
    return e;
   }, t.set = function(t, e) {
    return Mi(this), this.r = null, t = Ni(this, t), this.T(t) && (this.j -= this.c.get(t).length), 
    this.c.set(t, [ e ]), this.j++, this;
   }, t.get = function(t, e) {
    var n = t ? this.t(t) : [];
    return 0 < n.length ? String(n[0]) : e;
   }, t.toString = function() {
    if (this.r) return this.r;
    if (!this.c) return "";
    for (var t = [], e = this.c.H(), n = 0; n < e.length; n++) for (var i = e[n], r = encodeURIComponent(String(i)), i = this.t(i), o = 0; o < i.length; o++) {
     var s = r;
     "" !== i[o] && (s += "=" + encodeURIComponent(String(i[o]))), t.push(s);
    }
    return this.r = t.join("&");
   }, t.clone = function() {
    var t = new Oi();
    return t.r = this.r, this.c && (t.c = this.c.clone(), t.j = this.j), t;
   };
   var Ni = function(t, e) {
    var n = String(e);
    return t.qc && (n = n.toLowerCase()), n;
   }, Ri = function(t, e) {
    this.Mc = t, this.Aa = e;
   };
   Ri.prototype.send = function(t, e) {
    if (Ht && !navigator.onLine) return Qe();
    var n = new Ue(), i = Hi(t, e);
    return i.length > this.Aa ? n.A({
     status: "payload-too-big",
     la: at("Encoded hit length == %s, but should be <= %s.", i.length, this.Aa)
    }) : ki(this.Mc, function() {
     n.v(si);
    }, i), n;
   };
   var Hi = function(t, e) {
    var n = new Oi();
    return n.add(V.name, t), pt(e, function(t, e) {
     n.add(t.name, e.toString());
    }), n.toString();
   }, Di = function(t, e, n) {
    this.g = t, this.Lc = e, this.Aa = n;
   };
   Di.prototype.Xa = function() {
    if (!this.q) {
     if (!Xe(this.g.ea).C) throw Error("Cannot construct shared channel prior to settings being ready.");
     new Qn();
     var t = new ti(new Ri(this.Lc, this.Aa)), e = new ci();
     this.q = new Zn(this.g, new ui(this.g, new ai(e, t)));
    }
    return this.q;
   };
   var Bi = new I(), Ii = function() {
    return F || (F = new Tn(new Bn())), F;
   };
   m("goog.async.Deferred", Ue), m("goog.async.Deferred.prototype.addCallback", Ue.prototype.n), 
   m("goog.async.Deferred.prototype.callback", Ue.prototype.v), m("goog.async.Deferred.prototype.then", Ue.prototype.then), 
   m("goog.events.EventTarget", he), m("goog.events.EventTarget.prototype.listen", he.prototype.listen), 
   m("analytics.getService", function(t, e) {
    var n = Bi.get(t, null), i = e || chrome.runtime.getManifest().version;
    if (null === n) {
     if (n = Ii(), !z) {
      var r = Ii();
      z = new Wn(r, new Di(r, "https://www.google-analytics.com/collect", 8192));
     }
     n = new kn("ca1.6.0", t, i, n, z), Bi.set(t, n);
    }
    return n;
   }), m("analytics.internal.GoogleAnalyticsService", kn), m("analytics.internal.GoogleAnalyticsService.prototype.getTracker", kn.prototype.mc), 
   m("analytics.internal.GoogleAnalyticsService.prototype.getConfig", kn.prototype.kc), 
   m("analytics.internal.ServiceSettings", Tn), m("analytics.internal.ServiceSettings.prototype.setTrackingPermitted", Tn.prototype.Oc), 
   m("analytics.internal.ServiceSettings.prototype.isTrackingPermitted", Tn.prototype.xa), 
   m("analytics.internal.ServiceSettings.prototype.setSampleRate", Tn.prototype.Nc), 
   m("analytics.internal.ServiceSettings.prototype.resetUserId", Tn.prototype.Fc), 
   m("analytics.internal.ServiceTracker", xn), m("analytics.internal.ServiceTracker.prototype.send", xn.prototype.send), 
   m("analytics.internal.ServiceTracker.prototype.sendAppView", xn.prototype.Hc), m("analytics.internal.ServiceTracker.prototype.sendEvent", xn.prototype.Ic), 
   m("analytics.internal.ServiceTracker.prototype.sendSocial", xn.prototype.Kc), m("analytics.internal.ServiceTracker.prototype.sendException", xn.prototype.Jc), 
   m("analytics.internal.ServiceTracker.prototype.sendTiming", xn.prototype.Ib), m("analytics.internal.ServiceTracker.prototype.startTiming", xn.prototype.Rc), 
   m("analytics.internal.ServiceTracker.Timing", $n), m("analytics.internal.ServiceTracker.Timing.prototype.send", $n.prototype.send), 
   m("analytics.internal.ServiceTracker.prototype.forceSessionStart", xn.prototype.jc), 
   m("analytics.internal.ServiceTracker.prototype.addFilter", xn.prototype.R), m("analytics.internal.FilterChannel.Hit", sn), 
   m("analytics.internal.FilterChannel.Hit.prototype.getHitType", sn.prototype.ub), 
   m("analytics.internal.FilterChannel.Hit.prototype.getParameters", sn.prototype.V), 
   m("analytics.internal.FilterChannel.Hit.prototype.cancel", sn.prototype.cancel), 
   m("analytics.ParameterMap", ht), m("analytics.ParameterMap.Entry", ht.Entry), m("analytics.ParameterMap.prototype.set", ht.prototype.set), 
   m("analytics.ParameterMap.prototype.get", ht.prototype.get), m("analytics.ParameterMap.prototype.remove", ht.prototype.remove), 
   m("analytics.ParameterMap.prototype.toObject", ht.prototype.Nb), m("analytics.HitTypes.APPVIEW", "appview"), 
   m("analytics.HitTypes.EVENT", "event"), m("analytics.HitTypes.SOCIAL", "social"), 
   m("analytics.HitTypes.TRANSACTION", "transaction"), m("analytics.HitTypes.ITEM", "item"), 
   m("analytics.HitTypes.TIMING", "timing"), m("analytics.HitTypes.EXCEPTION", "exception"), 
   O(Q, function(t) {
    var e = t.id.replace(/[A-Z]/, "_$&").toUpperCase();
    m("analytics.Parameters." + e, t);
   }), m("analytics.filters.EventLabelerBuilder", ot), m("analytics.filters.EventLabelerBuilder.prototype.appendToExistingLabel", ot.prototype.Wb), 
   m("analytics.filters.EventLabelerBuilder.prototype.stripValue", ot.prototype.Sc), 
   m("analytics.filters.EventLabelerBuilder.prototype.powersOfTwo", ot.prototype.Dc), 
   m("analytics.filters.EventLabelerBuilder.prototype.rangeBounds", ot.prototype.Ec), 
   m("analytics.filters.EventLabelerBuilder.prototype.build", ot.prototype.ia), m("analytics.filters.FilterBuilder", it), 
   m("analytics.filters.FilterBuilder.builder", rt), m("analytics.filters.FilterBuilder.prototype.when", it.prototype.when), 
   m("analytics.filters.FilterBuilder.prototype.whenHitType", it.prototype.Rb), m("analytics.filters.FilterBuilder.prototype.whenValue", it.prototype.Yc), 
   m("analytics.filters.FilterBuilder.prototype.applyFilter", it.prototype.mb), m("analytics.filters.FilterBuilder.prototype.build", it.prototype.ia), 
   m("analytics.EventBuilder", ft), m("analytics.EventBuilder.builder", function() {
    return dt;
   }), m("analytics.EventBuilder.prototype.category", ft.prototype.Yb), m("analytics.EventBuilder.prototype.action", ft.prototype.action), 
   m("analytics.EventBuilder.prototype.label", ft.prototype.label), m("analytics.EventBuilder.prototype.value", ft.prototype.value), 
   m("analytics.EventBuilder.prototype.dimension", ft.prototype.fc), m("analytics.EventBuilder.prototype.metric", ft.prototype.vc), 
   m("analytics.EventBuilder.prototype.send", ft.prototype.send);
  }).call(window), e.exports = analytics;
 }, {} ],
 201: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   if (this.tag = "BotNeural", this._pid = t, this._game = e, this._net = n, this._skill = 1, 
   !(n instanceof r)) throw Error("net wrong type");
   this._cbGameBot = function(t) {
    return this._game.ended === !0 ? void (a && i.debug(this.tag, "skip, game ended")) : void (t === this._pid && (a && i.debug(this.tag, "react on pid " + t), 
    this.makeMoveBest()));
   }.bind(this), this._game.on("launchbot", this._cbGameBot);
  }
  var i = t("jslib/utils/Log"), r = t("jslib/neural/Network"), o = t("./Game"), s = "BotNeural", a = !0;
  n.prototype.DELAY = 0, n.prototype.destroy = function() {
   this._game.off("launchbot", this._cbGameBot);
  }, n.prototype.makeMoveBest = function() {
   var t = 0, e = this._game.getNonEmptyHoles(this._pid), n = [];
   if (Math.random() > this._skill) return a && i.debug(s, "make random move, skill > " + this._skill), 
   void this._game.makeMove(this._pid, e[Math.floor(Math.random() * e.length)]);
   for (var r = 0; r < e.length; r++) {
    a && i.debug(this.tag, "test next move");
    var c = new o(this._game.players, this._game.opts, !1, this._game.exportStatus());
    c.makeMove(this._pid, e[r]);
    var u = this._net.exec(this.makeInputs(c));
    if (1 !== u.length) throw new Error("wrong len: " + u.length);
    n.push({
     index: r,
     out: u[0]
    });
   }
   if (n.sort(function(t, e) {
    return t.out < e.out ? -1 : t.out > e.out ? 1 : 0;
   }), t = n[n.length - 1].index, n.length > 1) {
    var l = n[n.length - 1], h = n[n.length - 2];
    h.out / l.out >= .91 && (a && i.trace(this.tag, "randomize best moves"), t = Math.random() > .5 ? l.index : h.index);
   }
   a && i.trace(this.tag, "moves " + e.length + ", best move hole-index " + t, n), 
   this._game.makeMove(this._pid, e[t]);
  }, n.prototype.makeInputs = function(t) {
   var e, n = this._pid, i = [];
   for (e = 0; e < t.holeCount; e++) i.push(t.getStoneHoleCount(n, e));
   i.push(t.getStoreCount(n));
   var r = t.getOtherPid(n);
   for (e = 0; e < t.holeCount; e++) i.push(t.getStoneHoleCount(r, e));
   return i.push(t.getStoreCount(r)), i;
  }, n.prototype.setSkill = function(t) {
   if (this._skill = parseFloat(t, 10), i.trace(s, "skill set to " + this._skill), 
   "number" != typeof this._skill || this._skill < 0 || this._skill > 1) throw new Error("typeof _skill !== number or out of range: " + this._skill);
  }, e.exports = n;
 }, {
  "./Game": 202,
  "jslib/neural/Network": 178,
  "jslib/utils/Log": 187
 } ],
 202: [ function(t, e) {
  "use strict";
  function n(t, e, n, i) {
   if (r.call(this, t, e, n), this.tag = "MancalaGame", this.players.length > 2) throw new Error("max players is 2");
   this.holeCount = 6, this.stoneCountInit = 4, this._pidIndex0 = this.players[0].id, 
   this.playersMin = 2, this.on("drain", function(t) {
    for (var e = t.length - 1; e >= 0; e--) this.setPidWin(t[e].id);
   }.bind(this)), void 0 !== i ? this.restoreStatus(i) : this.init();
  }
  var i = t("jslib/utils/Log"), r = t("jsgames/Game"), o = !1;
  n.prototype = Object.create(r.prototype), n.prototype.MS_TURN = 3e4, n.prototype.init = function() {
   this._holes = {}, this._stores = {};
   for (var t = 0, e = this.players.length; e > t; t++) {
    var n = this.players[t].id, i = [];
    this._holes[n] = i, this._stores[n] = 0;
    for (var r = 0, o = this.holeCount; o > r; r++) i.push(this.stoneCountInit);
   }
   this.emit("reset"), this.setPidCurr(this.players[0].id);
  }, n.prototype.ready = function() {
   r.prototype.ready.call(this);
  }, n.prototype.makeMove = function(t, e, n) {
   var r;
   if (t !== this.getPidCurr()) return i.error(this.tag, "not current player '" + t + "', is '" + this.getPidCurr() + "'"), 
   !1;
   if (this.ended === !0) return i.error(this.tag, "makeMove() bot game.ended"), !1;
   if (0 === this.getStoneHoleCount(t, e)) return i.error(this.tag, "no stones in hole: " + e), 
   !1;
   var s = this.getStoneHoleCount(t, e);
   o && i.debug(this.tag, "player " + t + " make move hole " + e), this.emit("move", t, e, s, n);
   for (var a = t, c = e, u = !0, l = 0; s > 0; ) c++, s--, a !== t || c !== this.holeCount ? (c >= this.holeCount && (c = 0, 
   a = this.getOtherPid(a)), this.stoneSow(a, c, t, e), o && i.debug(this.tag, "player " + t + ", sow stone into " + c + " of player " + a)) : (this.stoneCapture(t, t, e, !1), 
   l++);
   if (a === t && c === this.holeCount) o && i.debug(this.tag, "player " + t + ", ended in his store, allow to make next move"), 
   u = !1; else if (a === t && 1 === this.getStoneHoleCount(t, c)) {
    var h = this.getOtherPid(t), p = this.holeCount - 1 - c, f = this.getStoneHoleCount(h, p);
    if (f > 0) {
     for (r = f - 1; r >= 0; r--) this.stoneCapture(t, h, p, !0), l++;
     this.stoneCapture(t, t, c, !0), o && i.debug(this.tag, "player " + t + ", ended empty hole on his side, capture 123 from other");
    }
   }
   this.emit("mcomplete", t, e, l, u);
   var d = !1;
   for (r = this.players.length - 1; r >= 0; r--) {
    var v = this.players[r].id;
    if (0 === this.getStonePlayerCount(v)) {
     o && i.debug(this.tag, "player " + v + " holes empty, end game"), d = !0;
     break;
    }
   }
   return d === !1 ? u === !0 ? this._nextPlayer() : this.keep() : this._captureAndEnd(), 
   !0;
  }, n.prototype.stoneSow = function(t, e, n, i) {
   this._holes[t][e]++, this._holes[n][i]--, this.emit("sow", t, e, n, i);
  }, n.prototype.stoneCapture = function(t, e, n, r) {
   this._holes[e][n]--, this._stores[t]++, o && i.debug(this.tag, "player " + t + " capture stone"), 
   this.emit("capture", t, e, n, r);
  }, n.prototype._captureAndEnd = function() {
   for (var t = -1, e = this.players.length - 1; e >= 0; e--) for (var n = this.players[e].id, r = this.holeCount - 1; r >= 0; r--) for (var o = this.getStoneHoleCount(n, r) - 1; o >= 0; o--) this.stoneCapture(n, n, r, !0);
   var s = this.players[0].id, a = this.players[1].id, c = this.getStoreCount(s), u = this.getStoreCount(a);
   i.debug(this.tag, "store player " + s + ": " + c), i.debug(this.tag, "store player " + a + ": " + u), 
   c === u ? i.trace(this.tag, "_captureAndEnd() draw") : (t = c > u ? s : a, this.setPidWin(t)), 
   i.trace(this.tag, "_captureAndEnd() pidWin " + t), this.end();
  }, n.prototype.getStonePlayerCount = function(t) {
   for (var e = 0, n = this._holes[t], i = n.length - 1; i >= 0; i--) e += n[i];
   return e;
  }, n.prototype.getStoneHoleCount = function(t, e) {
   return this._holes[t][e];
  }, n.prototype.getStoreCount = function(t) {
   return this._stores[t];
  }, n.prototype.takeStones = function(t, e) {
   var n = this._holes[t], i = n[e];
   return n[e] = 0, i;
  }, n.prototype.getNonEmptyHoles = function(t) {
   for (var e = [], n = this.holeCount - 1; n >= 0; n--) 0 !== this.getStoneHoleCount(t, n) && e.push(n);
   return e;
  }, n.prototype.getOtherPid = function(t) {
   return this.players[t === this._pidIndex0 ? 1 : 0].id;
  }, n.prototype._nextPlayer = function() {
   var t = this.players.length, e = this.players.indexOf(this.getPlayerCurr());
   if (-1 === e) throw new Error("playerCurr not found");
   for (var n = 0; t > n; n++) {
    for (var i = e + 1 + n; i >= t; ) i -= t;
    var r = this.players[i];
    if (!r) throw new Error("not player at index " + i + " count " + t);
    return this.setPidCurr(r.id), !0;
   }
   throw new Error("could not set next player");
  }, n.prototype.makeRandomMove = function(t) {
   var e = this.getPidCurr(), n = this.getNonEmptyHoles(e);
   i.trace(this.tag, "makeRandomMove()"), this.makeMove(e, n[Math.floor(Math.random() * n.length)], t);
  }, n.prototype.exportStatus = function() {
   for (var t = {}, e = {}, n = this.getPidsWin().slice(0), i = this.players.length - 1; i >= 0; i--) {
    var r = this.players[i].id;
    t[r] = this._holes[r].slice(0), e[r] = this._stores[r];
   }
   return {
    holes: t,
    stores: e,
    pidCurr: this.getPidCurr(),
    ended: this.ended,
    pidsWin: n
   };
  }, n.prototype.restoreStatus = function(t) {
   this._holes = t.holes, this._stores = t.stores, this.setPidsWin(t.pidsWin), t.ended || this.setPidCurr(t.pidCurr), 
   this.emit("restore"), t.ended && !this.ended && this.end();
  }, e.exports = n;
 }, {
  "jsgames/Game": 162,
  "jslib/utils/Log": 187
 } ],
 203: [ function(t, e) {
  "use strict";
  function n(t, e, n) {
   r.call(this), this.room = t, this.game = e, this.sid = n, i.debug(o, "local sid " + this.sid), 
   this._msLaunchBot = 7e3, this._toLaunchBot = void 0, this._cbPlayer = function(t) {
    t && this.sid === t.id && (i.debug(o, "local player current turn, sid " + t.id), 
    clearTimeout(this._toLaunchBot), this._toLaunchBot = setTimeout(function() {
     i.trace(o, "run launchBot() for pid " + this.sid), this.game.ended || this.game.launchBot();
    }.bind(this), Math.ceil(this._msLaunchBot * (1 - .8 * Math.random()))));
   }.bind(this), this._cbMove = function(t, e, n, r) {
    return i.debug(o, "move, pid: " + t + " local " + this.sid), r === !0 ? void i.trace(o, "serverMove, do not send back") : void (this.sid === t && (i.debug(o, "local made move, hole: " + e + ", send to server"), 
    this.room.sendPkt({
     t: "move",
     hole: e
    })));
   }.bind(this), this._cbEnd = function() {
    this._toLaunchBot && clearTimeout(this._toLaunchBot), this.destroy();
   }.bind(this), this._cbRejoin = function(t) {
    0 === t && (i.debug(o, "rejoined groom, resync"), this.room.sendPkt({
     t: "reqstatus"
    }));
   }.bind(this), this.room.on("rejoin", this._cbRejoin), this.game.on("player", this._cbPlayer), 
   this.game.on("move", this._cbMove), this.game.on("end", this._cbEnd), this.game.getPidCurr() === this.sid && this.game.launchBot();
  }
  var i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = "MPHandlerMancala";
  n.prototype = Object.create(r.prototype), n.prototype.destroy = function() {
   this.room.off("rejoin", this._cbRejoin), this.game.off("player", this._cbPlayer), 
   this.game.off("move", this._cbMove), this.game.off("end", this._cbEnd);
  }, n.prototype.handle = function(t) {
   switch (t.t) {
   case "leave":
    this.game.leave(t.pid);
    break;

   case "move":
    this.game.makeMove(t.pid, t.hole, !0);
    break;

   case "status":
    i.trace(o, "got status", t.status), clearTimeout(this._toLaunchBot), this.emit("status", t.status), 
    this.game.restoreStatus(t.status);
   }
  }, n.prototype.sendExceed = function() {
   this.room.sendPkt({
    t: "exceed"
   });
  }, n.prototype.requestStatus = function() {
   this.room.sendPkt({
    t: "reqstatus"
   });
  }, e.exports = n;
 }, {
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 204: [ function(t, e) {
  "use strict";
  function n(t, e, n, r) {
   i.call(this, t, e, n, r);
  }
  var i = t("jsgames/Player");
  n.prototype = Object.create(i.prototype), e.exports = n;
 }, {
  "jsgames/Player": 164
 } ],
 205: [ function(t, e) {
  "use strict";
  function n(t, e) {
   this.room = t, this.game = e, this._cbMove = function(t, e, n, o) {
    i.trace(r, "move made, pid " + t + ", server " + o), this.room.sendRoomPkt({
     t: "move",
     pid: t,
     hole: e
    }, o === !0 ? void 0 : t);
   }.bind(this), this._cbPlayer = function(t) {
    i.trace(r, "current player " + t.id), this.game.startCountdown(this.game.MS_TURN + 3e4), 
    this._handlePlayer(t.id);
   }.bind(this), this._cbLeave = function(t) {
    i.trace(r, "player leave " + t.id), this._handleLeave(t.id);
   }.bind(this), this._cbExceed = function(t) {
    i.trace(r, "_cbExceed() " + t), this._handleExceed(t);
   }.bind(this), this._cbEnd = function() {}, this.game.on("move", this._cbMove), this.game.on("leave", this._cbLeave), 
   this.game.on("player", this._cbPlayer), this.game.on("exceed", this._cbExceed), 
   this.game.on("end", this._cbEnd), void 0 !== this.game.getPidCurr() && this.game.startCountdown(this.game.MS_TURN + 3e4);
  }
  var i = t("jslib/utils/Log"), r = "ServerHandlerMancala";
  n.prototype.destroy = function() {
   this.game.off("move", this._cbMove), this.game.off("leave", this._cbLeave), this.game.off("player", this._cbPlayer), 
   this.game.off("exceed", this._cbExceed), this.game.off("end", this._cbEnd);
  }, n.prototype._handleExceed = function(t) {
   if (this.game.getPidCurr() !== t) return void i.warn(r, "_handleExceed(), but is not pidCurr: " + t);
   for (var e = [], n = this.game.holeCount - 1; n >= 0; n--) this.game.getStoneHoleCount(t, n) > 0 && e.push(n);
   e.length > 0 && (i.trace(r, "_handleExceed(), random move by server for pid " + t), 
   this.game.makeMove(t, e[Math.floor(Math.random() * e.length)], !0));
  }, n.prototype._handlePlayer = function(t) {
   this.game.getPlayer(t).leftGame && (i.trace(r, "_handlePlayer() but has left game, make random move"), 
   this.game.makeRandomMove(!0));
  }, n.prototype._handleLeave = function(t) {
   this.game.getPidCurr() === t && (i.trace(r, "_handleLeave() is current player, make random move"), 
   this.game.makeRandomMove(!0));
  }, n.prototype._handleReqStatus = function(t) {
   this.room.sendRoomPktTo(t, {
    t: "status",
    status: this.game.exportStatus()
   });
  }, n.prototype.handle = function(t, e, n) {
   switch (n.t) {
   case "move":
    i.trace(r, "handle(), make move", t, n), this.game.makeMove(t, n.hole) || i.error(r, "handle(), error make move, send status json?");
    break;

   case "exceed":
    i.debug(r, "handle(), player exceed time '" + t + "'"), this._handleExceed(t);
    break;

   case "reqstatus":
    i.trace(r, "handle(), request status by " + t), this._handleReqStatus(t);
    break;

   default:
    i.error(r, "handle(), unhandled type: " + n.t);
   }
  }, e.exports = n;
 }, {
  "jslib/utils/Log": 187
 } ],
 206: [ function(t, e) {
  "use strict";
  var n = t("jslib/utils/UtilsArray"), i = t("jsgames/Registry"), r = t("jsgames/OptsParser2"), o = t("./Player"), s = t("./Game"), a = t("./MPHandler"), c = t("./ServerHandler"), u = t("./BotNeural"), l = t("./weights.json"), h = t("jslib/neural/Network"), p = t("jslib/neural/Layer"), f = "mancala";
  r.registerChain(f, {}), r.registerExtra(r.TYPE_EXTRA_DEFAULT, f, {
   size: [ "2" ]
  }), r.registerExtra(r.TYPE_EXTRA_SP, f, {
   opponent: [ "boteasy", "botmedium", "bothard", "local" ]
  }), r.registerDefaults(f, {
   size: "2",
   opponent: "botmedium"
  }), i.registerGameStarter([ f ], function(t, e, n) {
   for (var i = new s(t, e, n), r = 0; r < t.length; r++) if (t[r].isBot === !0) {
    for (var o = l, a = new h(), c = 1; c < o.layers.length; c++) a.addLayer(new p(o.layers[c - 1], o.layers[c]));
    a.setWeights(o.weights);
    var f = new u(t[r].id, i, a);
    f.setSkill(t[r].botSkill);
   }
   if (!i.online) {
    var d;
    i.on("player", function(t) {
     t && t.isBot && (clearTimeout(d), d = setTimeout(function() {
      i.launchBot();
     }, 1100));
    }), i.keep(), i.on("restore", function() {
     clearTimeout(d);
    }), i.on("end", function() {
     clearTimeout(d);
    });
   }
   return i;
  }), i.registerMPHandler([ f ], function(t, e, n) {
   return new a(t, e, n);
  }), i.registerServerHandler([ f ], function(t, e) {
   return new c(t, e);
  }), i.registerPlayerCreator([ f ], function(t) {
   var e = parseInt(t.size, 10), i = [], r = [], s = 1;
   switch (t.opponent) {
   case "boteasy":
    s = .5;
    break;

   case "botmedium":
    s = .85;
    break;

   case "bothard":
    s = 1;
   }
   for (var a = 0; e > a; a++) {
    var c = "" + (a + 1);
    if ("local" === t.opponent) r.push(c), i.push(new o(c, c, "Player " + c)); else if (0 === a) r.push(c), 
    i.push(new o(c, c, "Player " + c)); else {
     var u = new o(c, c, "Bot " + c, !0);
     u.botSkill = s, i.push(u);
    }
   }
   return i = n.shuffle(i);
  }), e.exports = f;
 }, {
  "./BotNeural": 201,
  "./Game": 202,
  "./MPHandler": 203,
  "./Player": 204,
  "./ServerHandler": 205,
  "./weights.json": 207,
  "jsgames/OptsParser2": 163,
  "jsgames/Registry": 165,
  "jslib/neural/Layer": 177,
  "jslib/neural/Network": 178,
  "jslib/utils/UtilsArray": 190
 } ],
 207: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n	"weights": [-0.2884507174603641, 0.3866732348687947, -0.7035779980942607, -0.3020654642023146, -0.14292092202231288, -0.24068300472572446, -0.05007234215736389, 0.9435856151394546, -0.9706815341487527, 0.15003323601558805, 0.2435049656778574, -0.7518121264874935, 0.7176074231974781, -0.9950910480692983, 0.7594591733068228, 0.9773086500354111, 0.37395829893648624, 0.6531890300102532, 0.8656430528499186, 0.9641266814433038, -0.0682955258525908, -0.5667841951362789, 0.19192488305270672, -0.3990659909322858, 0.6125283255241811, 0.4522339259274304, 0.19312590267509222, -0.7455835700966418, 0.08352871797978878, -0.9132414981722832, -0.33005751110613346, 0.544185874518007, -0.5260843643918633, 0.9706681435927749, -0.0719958059489727, 0.41942377714440227, 0.7397643812000751, 0.003338757436722517, -0.9971395963802934, 0.31994120636954904, 0.3319934941828251, 0.9346405724063516, -0.6062171305529773, 0.8479783036746085, 0.13915435643866658, -0.263292889110744, 0.5429650088772178, 0.6081932638771832, -0.4980973298661411, -0.9154503340832889, 0.5160937993787229, 0.5874111033044755, 0.5300733461044729, 0.6216876744292676, 0.2639486831612885, -0.5940688014961779, 0.49577134707942605, 0.16857430571690202, 0.03776630340144038, 0.6873127506114542, 0.11256978381425142, -0.3995588459074497, -0.8384459014050663, 0.06517247064039111, 0.712182444985956, 0.01799694634974003, -0.18840272538363934, -0.4903812767006457, 0.6805238863453269, -0.07771459128707647, -0.4455459415912628, 0.23369849426671863, -0.9766815062612295, 0.16010508313775063, 0.4692102284170687, -0.23903068900108337, -0.3929559839889407, 0.7537553617730737, 0.9640876809135079, 0.7830323087982833, 0.395298704970628, 0.898448150139302, -0.7917924621142447, 0.14379750564694405, -0.1603354699909687, 0.5641624885611236, 0.9210711419582367, 0.7920793774537742, 0.438381839543581, -0.2980977175757289, -0.9261721833609045, 0.46543711656704545, -0.6926362118683755, -0.19505035039037466, -0.3756478149443865, 0.14742542803287506, 0.712192275095731, 0.7634204742498696, 0.6686629448086023, 0.0009292978793382645, -0.32263766042888165, -0.017460389528423548, 0.1646393435075879, 0.07907555717974901, 0.16074201371520758, -0.15227816812694073, -0.9850369887426496, -0.6193144591525197, -0.2249390995129943, -0.6809039483778179, -0.5859413393773139, 0.8738098475150764, -0.24680877337232232, 0.9717451888136566, 0.415891217533499, -0.3061513719148934, -0.2759439432993531, -0.9155547535046935, -0.933485119137913, 0.8166303774341941, -0.3851496879942715, 0.0018269224092364311, 0.23138885525986552, 0.07348199468106031, 0.4837923338636756, -0.9850207115523517, -0.88586729997769, 0.08784121507778764, -0.20203627878800035, -0.5531760235317051, 0.41794241964817047, 0.8151360023766756, 0.5400180127471685, -0.23589313868433237, -0.36299736564978957, 0.7117378134280443, -0.6983357178978622, 0.648624483961612, -0.42640530224889517, -0.07986166467890143, -0.7727098637260497, -0.5765777574852109, -0.12201046198606491, 0.8262827033177018, 0.6039904584176838, -0.7793756327591836, 0.8136612051166594, -0.41247276263311505, -0.4352265754714608, 0.8189022270962596, 0.3289084658026695, -0.4993502162396908, -0.7216864242218435, -0.8818543064408004, -0.9348320476710796, -0.2262991345487535, -0.34570458764210343, -0.5368460612371564, -0.3534338604658842, -0.2341699404641986, -0.2811337038874626, -0.19231439288705587, -0.8168479753658175, -0.30780202290043235, -0.5365990889258683, -0.10354004567489028, 0.02403680281713605, 0.6933499709703028, 0.8026002426631749, -0.8256332078017294, 0.9296154929324985, 0.2344202222302556, -0.6654251981526613, -0.8110690503381193, 0.4553866609930992, -0.12648088112473488, -0.9494800828397274, -0.5936953690834343, 0.2840659935027361, -0.550355227664113, 0.013351860456168652, -0.555916357319802, 0.4914996172301471, -0.8748743594624102, -0.637657952029258, 0.3396542281843722, 0.18065650947391987, 0.007751316763460636, 0.43325559608638287, 0.37106617633253336, 0.8163323868066072, -0.7396913128904998, 0.6810725429095328, -0.28446525475010276, 0.6857439242303371, 0.09810608997941017, 0.5640142355114222, -0.6942535531707108, -0.36117384349927306, -0.4366261437535286, 0.37128541711717844, 0.10907183028757572, -0.4126584604382515, -0.029327670577913523, 0.08719194633886218, 0.9368392429314554, 0.934198419097811, -0.008372439537197351, 0.5531559833325446, -0.38595219515264034, -0.7203948670066893, 0.12549132481217384, 0.22741817263886333, -0.30833188677206635, -0.726445478387177, -0.7380969962105155, 0.8926574657671154, -0.7692957972176373, -0.45617853524163365, 0.6279499744996428, 0.547667259350419, -0.5972793488763273, 0.16979556856676936, 0.5987594062462449, -0.8945494242943823, 0.771663861349225, 0.7022039541043341, 0.3378597549162805, 0.8544915509410203, 0.6322944490239024, 0.6070907549001276, -0.6804302213713527, -0.6012779767625034, -0.10543532529845834, 0.23231215868145227, -0.21088394336402416, -0.1700088526122272, -0.26584453880786896, 0.7812457359395921, 0.3219435792416334, 0.6680502770468593, 0.8843778255395591, 0.9011281221173704, 0.3279597242362797, -0.6381170861423016, -0.5532815204933286, 0.7303742174990475, 0.9421327211894095, 0.3837144747376442, 0.8529261960648, -0.4511352777481079, 0.10280170617625117, -0.29868617933243513, 0.6309125158004463, 0.731987087521702, 0.8776325434446335, 0.47950112959370017, -0.4279163284227252, 0.2959806197322905, 0.570071161724627, -0.3886046842671931, -0.08365795575082302, 0.9807050540111959, -0.5400365414097905, 0.26544078160077333, -0.018565531354397535, 0.33636694960296154, 0.06221369141712785, -0.6526367156766355, 0.7171747144311666, -0.01485658111050725, -0.24371436797082424, 0.1324919736944139, -0.07786421058699489, -0.1908763158135116, -0.757587555795908, 0.4313513138331473, -0.4914326402358711, 0.8437180467881262, 0.010375204030424356, -0.7874960200861096, 0.110794838052243, -0.25963203236460686, -0.11661021877080202, 0.7717227446846664, 0.9083427186124027, 0.32084115874022245, 0.751773371361196, 0.4574860157445073, 0.970579432323575, -0.9891524841077626, -0.783972155302763, 0.0007798578590154648, 0.4558534170500934, -0.7626259229145944, 0.5521744815632701, -0.35818344075232744, 0.3516073008067906, 0.2591557218693197, -0.6874182019382715, -0.9360783961601555, -0.12308419682085514, 0.17639371706172824, 0.1980992997996509, -0.7839819178916514, 0.045057331677526236, 0.276847907807678, 0.4372293488122523, 0.026331449393182993, 0.2763997777365148, -0.5496171955019236, -0.30428117932751775, 0.9845144120045006, 0.6073620156385005, -0.9143177140504122, 0.5394022958353162, 0.34358316380530596, 0.7613225039094687, -0.9668955951929092, -0.16642058454453945, 0.3211428914219141, 0.9306604801677167, 0.8004871299490333, -0.5189954666420817, -0.013027440290898085, -0.39763863990083337, 0.5029066577553749, -0.5388073683716357, -0.2021248727105558, -0.691011221613735, -0.9833428836427629, -0.4570931843481958, -0.5177534422837198, 0.35611866787075996, -0.022283801343291998, 0.6076058009639382, 0.8715676199644804, -0.02414672914892435, -0.06938308849930763, -0.1061334265395999, -0.12581922626122832, -0.45419301837682724, 0.6818102244287729, 0.03057813923805952, -0.5788618177175522, 0.04158836090937257, -0.340446206741035, 0.29494953202083707, 0.40665019443258643, -0.054829332046210766, -0.5031959288753569, -0.2556113237515092, -0.18789830058813095, 0.80135109834373, -0.00046258047223091125, -0.16341591300442815, 0.14191844081506133, -0.8297762740403414, -0.7270768065936863, -0.8881983235478401, 0.25473131937906146, -0.2632374302484095, -0.1952919140458107, -0.5675511416047812, 0.14740919740870595, 0.8581594931893051, 0.7682534987106919, 0.3899193429388106, -0.48114103451371193, 0.552281585521996, 0.985903269611299, 0.10723168589174747, 0.7950955820269883, -0.4213624862022698, 0.780971516855061, -0.963690790347755, -0.9269739068113267, -0.7537085190415382, -0.9927307101897895, -0.8422337556257844, 0.06753252586349845, 0.7160127805545926, -0.42677072202786803, 0.7811218751594424, -0.6574452142231166, -0.012325052171945572, 0.17129067378118634, 0.0877642659470439, 0.3381287441588938, 0.15143752237781882, -0.18749611917883158, -0.1318147610872984, 0.7813967829570174, -0.4662686260417104, -0.665547498036176, 0.8017544592730701, 0.8201407198794186, 0.6642856686376035, -0.3519781716167927, 0.5381959490478039, 0.9474746715277433, 0.2799161709845066, 0.026889861095696688, -0.6487276223488152, 0.10007407795637846, -0.633534683380276, 0.4145929766818881, -0.1500569898635149, -0.945939080324024, 0.04212259966880083, 0.5713397306390107, -0.8788273194804788, 0.9294728366658092, -0.9072004030458629, -0.6205096635967493, -0.7001428999938071, -0.3872435796074569, 0.9935193518176675, 0.2091444255784154, 0.3314971891231835, 0.044374128337949514, 0.19414555793628097, -0.36730027105659246, -0.5041398671455681, 0.27991532208397985, -0.2915053623728454, 0.32787069864571095, 0.908282139338553, -0.29325396195054054, -0.6475852485746145, -0.6343821194022894, -0.7308965516276658, -0.49964284244924784, 0.8182762139476836, 0.3430068679153919, -0.42352338461205363, 0.5427791406400502, -0.43982096621766686, 0.20703378831967711, 0.9355167364701629, 0.5750777670182288, -0.9479276817291975, 0.16033487301319838, 0.6797341983765364, 0.6614341801032424, 0.3725704266689718, 0.753832409158349, -0.5971416486427188, -0.4662006814032793, -0.5820310702547431, -0.4646559222601354, 0.9249450624920428, -0.9463150389492512, 0.40148456767201424, -0.7400441076606512, 0.15921273780986667, -0.5420367307960987, -0.4575617308728397, 0.7845064080320299, -0.8544072499498725, 0.07534471293911338, -0.45824382128193974, -0.8544458979740739, -0.06809315038844943, 0.878443640191108, 0.828793628141284, 0.6961463098414242, -0.9872845388017595, 0.09574533207342029, 0.45043095014989376, 0.18162814574316144, 0.7786315935663879, -0.6487989877350628, -0.1501746792346239, 0.6228052508085966, 0.17670909501612186, -0.7644597999751568, -0.38203981006518006, -0.7990726819261909, -0.44890516018494964, 0.8310622740536928, 0.1664549051783979, 0.4455336546525359, 0.42180052027106285, 0.016587094869464636, -0.8379752594046295, 0.7224882859736681, -0.6735065900720656, 0.39972202852368355, 0.08994442131370306, -0.7432427443563938, -0.48505541728809476, 0.6806756909936666, 0.7335010324604809, -0.45507929706946015, -0.22307653771713376, 0.7741841096431017, 0.361251141410321, 0.16067664604634047, -0.6325999973341823, 0.9334478215314448, 0.3935658293776214, 0.4942333255894482, 0.8715605256147683, 0.7349416236393154, 0.48160282149910927, 0.5019875043071806, -0.0382669884711504, 0.45552208879962564, -0.008978921920061111, 0.5963592445477843, 0.23683798732236028, 0.40390933165326715, 0.6396666327491403, -0.737616372294724, -0.1367923365905881, 0.7656895550899208, -0.05198265751823783, -0.7244954803027213, 0.9675283874385059, 0.6494615860283375, 0.03779741749167442, -0.8784617725759745, 0.28713894030079246, 0.2747358805499971, 0.7782961125485599, -0.14347682613879442, 0.27667420729994774, 0.19923728005960584, -0.2693983754143119, -0.08314683986827731, -0.8022395730949938, 0.1427455684170127, 0.6860687555745244, -0.20183807192370296, 0.32115832529962063, 0.5517362742684782, 0.19404876651242375, -0.48741923039779067, -0.12629559077322483, -0.6346233892254531, -0.09425437031313777, 0.00014731520786881447, -0.46597437746822834, -0.7483755387365818, 0.48960303235799074, 0.7350606126710773, 0.46846303762868047, -0.16228996869176626, -0.07186664780601859, 0.45564061775803566, 0.23963289288803935, -0.6083486452698708, -0.5794366160407662, 0.037096165120601654, 0.5062527335248888, -0.8874319572933018, 0.8948977910913527, 0.09462508885189891, -0.24449032032862306, 0.8751905593089759, 0.855650651268661, -0.06764173321425915, 0.5397556531243026, -0.4492040858604014, 0.08045551460236311, -0.7556377584114671, -0.37439572997391224, -0.9062112681567669, -0.34926805598661304, -0.25887284241616726, 0.7526761959306896, 0.036047238390892744, -0.6544506824575365, 0.41400938434526324, 0.17948085255920887, -0.27652336098253727, 0.026463326066732407, -0.6174412230029702, 0.970804104115814, -0.33577169897034764, -0.17696536239236593, 0.8157373587600887, -0.1217468730174005, 0.9515980235300958, -0.7479779697023332, -0.31988109555095434, 0.3200585441663861, 0.06128999451175332, 0.32645436516031623, 0.8187018730677664, 0.019029939081519842, -0.770798300858587, 0.6661857306025922, -0.929037640336901, -0.3975301026366651, -0.7880793074145913, -0.597131809219718, -0.46741949720308185, 0.6908826683647931, -0.39292819891124964, 0.5718636023811996, 0.01839956594631076, -0.327740790322423, -0.16440852545201778, -0.6257206527516246, 0.6034374935552478, -0.10648699011653662, -0.8371817823499441, 0.0707537173293531, -0.7188067920506, 0.31153393164277077, 0.4059301782399416, -0.8240740983746946, -0.3425955744460225, 0.45516853500157595, 0.957932217977941, -0.054919437039643526, 0.7123195985332131, 0.31780124315992, 0.032442094292491674, -0.250769997946918, -0.44309195782989264, -0.3369050915353, -0.7067467826418579, 0.17119333893060684, 0.2985480073839426, 0.6067696665413678, -0.6121969199739397, 0.4431237317621708, 0.2826481247320771, 0.6114524570293725, 0.4040983943268657, 0.30794265726581216, 0.2521758652292192, -0.2003748449496925, -0.9442220567725599, -0.5484945769421756, 0.2226328575052321, -0.29661507438868284, 0.014417046681046486, 0.6719649042934179, 0.05833538481965661, 0.3266618982888758, 0.026431165635585785, -0.09253898076713085, -0.7972162356600165, -0.68444883543998, -0.4789106883108616, -0.32481926726177335, -0.6413308903574944, -0.2552359262481332, -0.5348574118688703, -0.15143864136189222, 0.4274798515252769, 0.4610999175347388, -0.06100304890424013, 0.03138665575534105, 0.2636383855715394, 0.35700412932783365, 0.20317745860666037, -0.738309629727155, 0.5318504767492414, -0.06452112970873713, -0.49629362346604466, 0.48217617394402623, 0.14115123078227043, -0.3127285144291818, 0.2725029229186475, -0.2598793259821832, 0.2638070583343506, 0.33811922185122967, 0.8951828680001199, -0.6114433920010924, -0.30427676113322377, 0.5022962084040046, -0.2926030377857387, -0.9119398784823716, 0.28602705895900726, 0.8625864032655954, -0.48818506859242916, -0.22421942418441176, 0.737086724024266, 0.46819925121963024, 0.9204555838368833, -0.39855644293129444, 0.5807740073651075, -0.09752007760107517, 0.26018746942281723, 0.23342826357111335, 0.3591288588941097, 0.2477327799424529, -0.0992789613083005, 0.6122521837241948, -0.5782596068456769, -0.01690585073083639, -0.18014742899686098, -0.6989082489162683, 0.06824876926839352, -0.8344964478164911, 0.2797059095464647, -0.06311885360628366, -0.3296011588536203, -0.3587129577063024, 0.0866062818095088, 0.9418705841526389, -0.7245089253410697, 0.19049747614189982, 0.3121829475276172, -0.6200679652392864, -0.13153961393982172, 0.6657861112616956, 0.21604876965284348, -0.7832227377220988, -0.9822421665303409, 0.5483143609017134, 0.4993914058431983, -0.6593290879391134, 0.1421805457212031, -0.3077561133541167, -0.06259776139631867, -0.3521581357344985, 0.30884581385180354, 0.6077842623926699, -0.4562808657065034, 0.9992925552651286, 0.0675200023688376, -0.16959749720990658, -0.9574816711246967, -0.24168676976114511, 0.1407117247581482, 0.7321032271720469, -0.6347418241202831, 0.6092515541240573, 0.13519249204546213, 0.724928215611726, -0.8224210385233164, 0.15777290565893054, -0.471085318364203, -0.06411815760657191, -0.8955162414349616, -0.09258864400908351, 0.723148625344038, -0.7066743667237461, -0.025610793381929398, -0.13331558648496866, -0.5276163225062191, -0.5059468625113368, 0.30361924413591623, -0.49392865085974336, 0.2349379318766296, -0.7281120233237743, -0.8291903724893928, -0.3534813541918993, -0.5606926288455725, -0.2134261536411941, 0.49552530888468027, -0.7169062900356948, 0.4063978651538491, 0.8341406276449561, -0.6531569473445415, -0.16843975288793445, -0.7003726307302713, -0.7421072483994067, 0.3333572819828987, 0.4641129351221025, 0.37806134950369596, 0.7313784440048039, 0.969499914906919, 0.3278969400562346, 0.9316548961214721, -0.5324744395911694, -0.8324240650981665, 0.60018404526636, 0.6168568921275437, 0.033715485129505396, 0.9621773832477629, -0.2467047064565122, 0.548758567776531, 0.16216311464086175, 0.05497166886925697, 0.7268355311825871, -0.2754584182985127, 0.6899357624351978, -0.9701070999726653, -0.3495921711437404, 0.7552104550413787, 0.2144683781079948, 0.5248488113284111, -0.07532104570418596, -0.868410486727953, -0.7117077657021582, 0.3641850226558745, -0.9641847088932991, -0.666098240762949, -0.47844381257891655, -0.3911333838477731, -0.8227485259994864, 0.24005358945578337, 0.47994763031601906, -0.6906607574783266, 0.8438495639711618, -0.029500001575797796, 0.2658913400955498, 0.0678708041086793, 0.6406337590888143, 0.6511795646511018, 0.4666077406145632, -0.31452430272474885, -0.5918806926347315, 0.4436273965984583, -0.7513677747920156, -0.6740419170819223, -0.1673607244156301, -0.774559985846281, 0.9365828079171479, 0.9820354511030018, 0.30061867414042354, -0.9620626168325543, -0.7811269965022802, -0.5969380191527307, 0.3902717879973352, -0.9438650272786617, 0.902737039141357, 0.5423839050345123, -0.9461928396485746, -0.23313919315114617, -0.878083411604166, 0.7042939811944962, 0.33892867155373096, -0.16278676921501756, 0.7432675990276039, -0.1672291443683207, -0.5290886615402997, 0.814946764614433, 0.9858777322806418, -0.28708369517698884, -0.8110738825052977, 0.40093862963840365, 0.3281063502654433, 0.31030696956440806, -0.35414614994078875, -0.3773646615445614, 0.5276330388151109, -0.6448639519512653, -0.8693549046292901, -0.11553564574569464, -0.5805445211008191, -0.17287032352760434, 0.2749630892649293, -0.7840083134360611, -0.39678894681856036, 0.8051329920999706, 0.650218219961971, 0.6113677807152271, -0.019542541820555925, -0.8229150963015854, 0.5166616970673203, -0.16695561027154326, -0.6664859815500677, 0.6508131776936352, 0.7787923631258309, 0.6357166799716651, 0.26711417082697153, -0.8570594289340079, -0.3384256809949875, 0.8729417491704226, -0.1048699370585382, -0.6735955229960382, -0.8902365136891603, -0.07602860545739532, 0.9377160281874239, -0.5492924274876714, -0.9565459792502224, 0.332891627214849, -0.8952900185249746, 0.7740965476259589, -0.6098822969943285, -0.6439753430895507, 0.27943112002685666, 0.06432091491296887, -0.9408602034673095, 0.6583987702615559, -0.5747797787189484, -0.7743348856456578, -0.3085885434411466, -0.9527395656332374, -0.4547449336387217, 0.11373621923848987, 0.05331885814666748, 0.9938157871365547, 0.8095891918055713, 0.4364689290523529, -0.22007620614022017, -0.14944692375138402, 0.7073412095196545, -0.20355314994230866, 0.9999125003814697, -0.3259614435955882, 0.6117363073863089, -0.9803693075664341, 0.9149657618254423, 0.5532359136268497, -0.07722161756828427, -0.8281619162298739, 0.35075639840215445, -0.9986683311872184, 0.0845715650357306, 0.2891755155287683, -0.9596727159805596, 0.7876819302327931, 0.9194939616136253, 0.8231357666663826, -0.2514155558310449, 0.7186215263791382, -0.6071202279999852, -0.5412465380504727, -0.050729469396173954, -0.31175051955506206, -0.3217156231403351, -0.4440404842607677, -0.03142649959772825, -0.13275718735530972, 0.101163265760988, 0.08886455791071057, -0.9975954820401967, -0.38164304615929723, -0.9555174936540425, -0.41960955038666725, -0.09367664018645883, 0.5392324323765934, -0.9578628242015839, 0.032887779641896486, 0.15110704163089395, 0.591769767459482, 0.3229599380865693, -0.7772727245464921, 0.5454141777008772, 0.7044923179782927, -0.6644591381773353, 0.7549569080583751, -0.5189569867216051, -0.9595750570297241, 0.175034967251122, -0.2646884466521442, -0.5303581962361932, -0.8334748456254601, -0.32647852459922433, 0.47655918961390853, 0.13244185084477067, 0.5549915535375476, -0.8567119226790965, 0.13002431159839034, -0.3716306113637984, 0.36506966268643737, 0.9383484404534101, 0.385673338547349, -0.12406940944492817, 0.9870009897276759, -0.9397584185935557, -0.4706973475404084, 0.47412741370499134, -0.22285708785057068, 0.03283401858061552, 0.8957940046675503, 0.730896467808634, -0.7273339573293924, 0.6370385433547199, -0.9273833502084017, -0.9439549571834505, -0.21162422420457006, 0.8488244535401464, -0.8971804613247514, -0.8504222091287374, 0.24463414773344994, 0.2128885188139975, -0.45863615302369, -0.6361608500592411, 0.6638339627534151, -0.30709863314405084, 0.580281799659133, -0.45948547776788473, 0.5532927825115621, -0.05455767968669534, -0.3825273080728948, 0.7120733130723238, 0.49376419372856617, -0.6638565747998655, 0.00961070554330945, -0.6531860940158367, -0.6088886861689389, 0.5335802142508328, -0.2843167749233544, 0.44143971614539623, -0.9954388798214495, -0.8589872508309782, -0.031575942412018776, 0.2343173986300826, 0.7532562064006925, 0.17241812497377396, -0.10059062438085675, -0.18718677014112473, -0.004561614245176315, 0.8035902976989746, -0.47322809556499124, -0.869453280698508, 0.07631492102518678, -0.5677478569559753, 0.17239883821457624, -0.06814987352117896, -0.5294206077232957, -0.24360170541331172, -0.1547377724200487, -0.5192819139920175, -0.6256333496421576, 0.23031124426051974, 0.3361947205848992, -0.7091653761453927, -0.9608748988248408, -0.5237717437557876, -0.6209419681690633, -0.1262767924927175, -0.3554511764086783, -0.5291429059579968, -0.9733312358148396, -0.986084736417979, 0.23705487698316574, -0.7868302795104682, 0.41717604734003544, -0.656441917642951, 0.5229710852727294, -0.20391504559665918, -0.9992526900023222, -0.8370421794243157, 0.12500755861401558, 0.9307052153162658, 0.8207375444471836, -0.7409192393533885, 0.5157653917558491, 0.31291620898991823, 0.7368268328718841, 0.6193169923499227, 0.18744348222389817, 0.8485019574873149, -0.601893100887537, -0.9287473117001355, 0.03230614913627505, -0.5555672398768365, -0.27367475302889943, 0.1719887782819569, 0.1009946926496923, 0.6065532984212041, 0.5787610737606883, 0.9842393067665398, -0.3527512550354004, 0.46952634071931243, -0.9844143381342292, 0.07590953633189201, -0.4414144344627857, 0.21166420495137572, -0.7136908797547221, 0.40257454942911863, 0.2123252311721444, -0.20024361880496144, 0.6869941102340817, 0.5168294962495565, 0.9970151619054377, 0.7044083205983043, -0.03193289693444967, -0.9135853480547667, -0.7621919484809041, -0.44945481326431036, -0.8936141077429056, -0.9666415983811021, 0.34500562539324164, 0.1874792268499732, -0.35484133660793304, 0.8802245641127229, -0.014591473154723644, -0.3985695946030319, 0.18510041432455182, -0.665678036864847, 0.8782762964256108, -0.23627300327643752, -0.9350903136655688, 0.8653741963207722, -0.6549520525150001, -0.1061551827006042, -0.24137359391897917, -0.2947316225618124, 0.13823223346844316, -0.28494701720774174, 0.9877066649496555, -0.11778688058257103, 0.41533000208437443, -0.37878419179469347, -0.8739185491576791, -0.2594664292410016, -0.19630118226632476, -0.34228300862014294, 0.9538939385674894, -0.08000446297228336, 0.25888613518327475, -0.4611027231439948, 0.5603589285165071, -0.5947407763451338, 0.5148915695026517, -0.6427730438299477, -0.5153372511267662, -0.9599715443328023, 0.605672013014555, -0.4355802955105901, -0.25210783164948225, 0.7296245056204498, 0.6579351760447025, -0.07860014401376247, -0.7047612895257771, 0.5140849305316806, -0.25538172014057636, 0.09156045224517584, 0.5279273823834956, -0.38938327599316835, 0.905123402364552, 0.9754442838020623, -0.9274002173915505, 0.9825816946104169, 0.7254044753499329, 0.5362104303203523, 0.9317819732241333, -0.983005793299526, 0.9276927136816084, 0.0831753397360444, 0.22631070669740438, 0.5713139669969678, 0.481269349809736, -0.8755715331062675, 0.42406157264485955, 0.06394329341128469, 0.30143460212275386, 0.10780217964202166, -0.8714992213062942, -0.4230973976664245, -0.474549766164273, -0.6616957518272102, -0.05167708033695817, -0.612292024306953, 0.7946757860481739, -0.13591026980429888, 0.346731289755553, 0.4183790562674403, -0.4451710432767868, 0.7428574031218886, -0.27343972539529204, -0.0414306023158133, 0.715432838536799, -0.7606610371731222, 0.40093204844743013, -0.7683604857884347, -0.7391164395958185, -0.8718981961719692, -0.4486415572464466, -0.5856558862142265, -0.808425915427506, -0.13004039088264108, -0.6525846719741821, 0.1634039874188602, 0.907210432458669, 0.04845553217455745, -0.35520003316923976, -0.5571585572324693, 0.6694880318827927, -0.7977526606991887, 0.3516338816843927, 0.8513538995757699, -0.7485297075472772, -0.8786388514563441, 0.16403741063550115, -0.9978473638184369, -0.3949347026646137, 0.25132509833201766, -0.7611372242681682, -0.9187475414946675, -0.05892638769000769, 0.9917523758485913, -0.3362002386711538, -0.9077353556640446, -0.7853381312452257, 0.8856206997297704, -0.6334853172302246, -0.8251794460229576, 0.9499415345489979, 0.33896986907348037, 0.2680445658043027, 0.8506881170906126, -0.6607408737763762, 0.21445320267230272, -0.3163436050526798, 0.7327925371937454, -0.384148680139333, 0.9343675174750388, -0.7018464542925358, -0.7985343094915152, 0.10266564460471272, 0.9674773877486587, 0.16204095259308815, -0.6727654398418963, 0.09973589237779379, -0.2485966137610376, -0.17965762503445148, -0.9485226268880069, -0.3383980616927147, -0.05597160058096051, 0.2221782272681594, -0.4327616863884032, -0.12587280850857496, -0.22352235158905387, 0.4573862226679921, 0.7284972234629095, 0.03082793578505516, -0.7486198600381613, -0.026631925720721483, 0.23114895774051547, 0.2826790721155703, -0.8838913952931762, -0.6366705056279898, 0.7638755398802459, -0.6937867025844753, 0.5091869123280048, 0.7734611462801695, 0.7575261918827891, 0.9749323185533285, 0.6241648667491972, 0.30251529114320874, 0.2667792895808816, 0.42488586297258735, -0.5356282526627183, -0.126810806337744, -0.45200191298499703, -0.061654440592974424, 0.888004488311708, 0.7809502277523279, -0.8115054867230356, 0.6366617996245623, 0.13151530409231782, -0.37276472756639123, 0.8867005449719727, -0.7110053398646414, 0.2986875702627003, -0.04154737899079919, 0.10828298609703779, 0.4236609428189695, 0.5722753941081464, 0.5490509448572993, -0.2630122830159962, -0.10165830468758941, -0.3011443689465523, -0.239358551800251, 0.2512730583548546, -0.9384057521820068, -0.39038330176845193, 0.46942203352227807, -0.1868417877703905, -0.4042698936536908, -0.9457064960151911, 0.20501212310045958, 0.22592978738248348, 0.9536228412762284, 0.9928213553503156, -0.36032690200954676, -0.6282082949765027, -0.2682260568253696, -0.11137582454830408, -0.8324286262504756, -0.3575993301346898, -0.7103334725834429, 0.8058235165663064, 0.8677270878106356, -0.021032769698649645, 0.7111637969501317, -0.10902770422399044, -0.5715331602841616, 0.064937274903059, 0.4956070901826024, 0.9288389468565583, 0.4331202614121139, 0.4370768591761589, -0.598173885140568, -0.7731421552598476, 0.7277185642160475, 0.9119603950530291, 0.251687403768301, 0.13695536833256483, 0.5409926944412291, 0.7012922968715429, 0.7010309407487512, 0.2595436703413725, -0.7188013857230544, -0.9504446908831596, -0.658210585359484, 0.43515490368008614, -0.812047234736383, 0.0751770087517798, 0.5285727269947529, 0.09874429740011692, 0.9673813860863447, 0.8023451464250684, 0.8795926524326205, 0.17637015460059047, -0.6770769548602402, 0.4237012751400471, 0.4836893663741648, -0.36193659948185086, -0.691903764847666, 0.28179285023361444, -0.35602369625121355, 0.14059918746352196, 0.9218629701063037, 0.4675792041234672, -0.6105328695848584, 0.9486047988757491, 0.8848008289933205, -0.1946288589388132, 0.2151535814628005, -0.5996154882013798, 0.5398396966047585, 0.2719645341858268, -0.4798763822764158, -0.45722387032583356, -0.3628527862019837, 0.08911723783239722, -0.22196934325620532, -0.2878107875585556, 0.8213891764171422, -0.522619754076004, 0.6150092212483287, -0.9865469527430832, 0.7608526381663978, 0.8783695171587169, -0.6029751775786281, -0.8069765362888575, 0.14675450697541237, 0.6326808822341263, 0.8724617417901754, 0.14926461596041918, -0.9202332687564194, 0.8542597321793437, -0.3859562734141946, -0.9875370818190277, 0.35067808954045177, 0.8305899500846863, 0.18896324699744582, -0.10843145521357656, -0.6298661227338016, -0.49304322618991137, 0.10638558818027377, -0.8567666858434677, 0.6951961028389633, 0.18522668490186334, 0.3046602997928858, 0.6148194712586701, 0.5450900811702013, -0.893095875158906, -0.5174284209497273, 0.29697244241833687, -0.8301183450967073, 0.08499136427417397, 0.8536829645745456, 0.02998768864199519, 0.1615670737810433, 0.04647759115323424, 0.5691464194096625, 0.7982344892807305, 0.6722263623960316, -0.5101146013475955, -0.6339242029935122, -0.7140493439510465, 0.831632933113724, -0.6052542864345014, -0.900450321380049, 0.5406556469388306, 0.16079554008319974, 0.33727684477344155, 0.09414615668356419, 0.862035752274096, 0.2826715842820704, 0.5331467604264617, 0.26818153262138367, 0.760770624037832, -0.775951789226383, 0.03956048144027591, -0.11304905032739043, -0.9557968550361693, 0.680435108486563, 0.6230466673150659, -0.8648381386883557, 0.9272643197327852, 0.5485543543472886],\n	"layers": [ 14, 44, 16, 1 ]\n}');
 }, {} ],
 208: [ function(t, e, n) {
  (function(t) {
   !function(t) {
    "use strict";
    if ("function" == typeof bootstrap) bootstrap("promise", t); else if ("object" == typeof n && "object" == typeof e) e.exports = t(); else if ("function" == typeof define && define.amd) define(t); else if ("undefined" != typeof ses) {
     if (!ses.ok()) return;
     ses.makeQ = t;
    } else {
     if ("undefined" == typeof self) throw new Error("This environment was not anticipated by Q. Please file a bug.");
     self.Q = t();
    }
   }(function() {
    "use strict";
    function e(t) {
     return function() {
      return Y.apply(t, arguments);
     };
    }
    function n(t) {
     return t === Object(t);
    }
    function i(t) {
     return "[object StopIteration]" === it(t) || t instanceof V;
    }
    function r(t, e) {
     if (F && e.stack && "object" == typeof t && null !== t && t.stack && -1 === t.stack.indexOf(rt)) {
      for (var n = [], i = e; i; i = i.source) i.stack && n.unshift(i.stack);
      n.unshift(t.stack);
      var r = n.join("\n" + rt + "\n");
      t.stack = o(r);
     }
    }
    function o(t) {
     for (var e = t.split("\n"), n = [], i = 0; i < e.length; ++i) {
      var r = e[i];
      c(r) || s(r) || !r || n.push(r);
     }
     return n.join("\n");
    }
    function s(t) {
     return -1 !== t.indexOf("(module.js:") || -1 !== t.indexOf("(node.js:");
    }
    function a(t) {
     var e = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);
     if (e) return [ e[1], Number(e[2]) ];
     var n = /at ([^ ]+):(\d+):(?:\d+)$/.exec(t);
     if (n) return [ n[1], Number(n[2]) ];
     var i = /.*@(.+):(\d+)$/.exec(t);
     return i ? [ i[1], Number(i[2]) ] : void 0;
    }
    function c(t) {
     var e = a(t);
     if (!e) return !1;
     var n = e[0], i = e[1];
     return n === U && i >= W && ct >= i;
    }
    function u() {
     if (F) try {
      throw new Error();
     } catch (t) {
      var e = t.stack.split("\n"), n = e[0].indexOf("@") > 0 ? e[1] : e[2], i = a(n);
      if (!i) return;
      return U = i[0], i[1];
     }
    }
    function l(t, e, n) {
     return function() {
      return "undefined" != typeof console && "function" == typeof console.warn && console.warn(e + " is deprecated, use " + n + " instead.", new Error("").stack), 
      t.apply(t, arguments);
     };
    }
    function h(t) {
     return t instanceof v ? t : b(t) ? T(t) : C(t);
    }
    function p() {
     function t(t) {
      e = t, o.source = t, K(n, function(e, n) {
       h.nextTick(function() {
        t.promiseDispatch.apply(t, n);
       });
      }, void 0), n = void 0, i = void 0;
     }
     var e, n = [], i = [], r = tt(p.prototype), o = tt(v.prototype);
     if (o.promiseDispatch = function(t, r, o) {
      var s = J(arguments);
      n ? (n.push(s), "when" === r && o[1] && i.push(o[1])) : h.nextTick(function() {
       e.promiseDispatch.apply(e, s);
      });
     }, o.valueOf = function() {
      if (n) return o;
      var t = m(e);
      return y(t) && (e = t), t;
     }, o.inspect = function() {
      return e ? e.inspect() : {
       state: "pending"
      };
     }, h.longStackSupport && F) try {
      throw new Error();
     } catch (s) {
      o.stack = s.stack.substring(s.stack.indexOf("\n") + 1);
     }
     return r.promise = o, r.resolve = function(n) {
      e || t(h(n));
     }, r.fulfill = function(n) {
      e || t(C(n));
     }, r.reject = function(n) {
      e || t(E(n));
     }, r.notify = function(t) {
      e || K(i, function(e, n) {
       h.nextTick(function() {
        n(t);
       });
      }, void 0);
     }, r;
    }
    function f(t) {
     if ("function" != typeof t) throw new TypeError("resolver must be a function.");
     var e = p();
     try {
      t(e.resolve, e.reject, e.notify);
     } catch (n) {
      e.reject(n);
     }
     return e.promise;
    }
    function d(t) {
     return f(function(e, n) {
      for (var i = 0, r = t.length; r > i; i++) h(t[i]).then(e, n);
     });
    }
    function v(t, e, n) {
     void 0 === e && (e = function(t) {
      return E(new Error("Promise does not support operation: " + t));
     }), void 0 === n && (n = function() {
      return {
       state: "unknown"
      };
     });
     var i = tt(v.prototype);
     if (i.promiseDispatch = function(n, r, o) {
      var s;
      try {
       s = t[r] ? t[r].apply(i, o) : e.call(i, r, o);
      } catch (a) {
       s = E(a);
      }
      n && n(s);
     }, i.inspect = n, n) {
      var r = n();
      "rejected" === r.state && (i.exception = r.reason), i.valueOf = function() {
       var t = n();
       return "pending" === t.state || "rejected" === t.state ? i : t.value;
      };
     }
     return i;
    }
    function g(t, e, n, i) {
     return h(t).then(e, n, i);
    }
    function m(t) {
     if (y(t)) {
      var e = t.inspect();
      if ("fulfilled" === e.state) return e.value;
     }
     return t;
    }
    function y(t) {
     return t instanceof v;
    }
    function b(t) {
     return n(t) && "function" == typeof t.then;
    }
    function w(t) {
     return y(t) && "pending" === t.inspect().state;
    }
    function _(t) {
     return !y(t) || "fulfilled" === t.inspect().state;
    }
    function x(t) {
     return y(t) && "rejected" === t.inspect().state;
    }
    function $() {
     ot.length = 0, st.length = 0, at || (at = !0);
    }
    function k(t, e) {
     at && (st.push(t), ot.push(e && "undefined" != typeof e.stack ? e.stack : "(no stack) " + e));
    }
    function S(t) {
     if (at) {
      var e = Q(st, t);
      -1 !== e && (st.splice(e, 1), ot.splice(e, 1));
     }
    }
    function E(t) {
     var e = v({
      when: function(e) {
       return e && S(this), e ? e(t) : this;
      }
     }, function() {
      return this;
     }, function() {
      return {
       state: "rejected",
       reason: t
      };
     });
     return k(e, t), e;
    }
    function C(t) {
     return v({
      when: function() {
       return t;
      },
      get: function(e) {
       return t[e];
      },
      set: function(e, n) {
       t[e] = n;
      },
      "delete": function(e) {
       delete t[e];
      },
      post: function(e, n) {
       return null === e || void 0 === e ? t.apply(void 0, n) : t[e].apply(t, n);
      },
      apply: function(e, n) {
       return t.apply(e, n);
      },
      keys: function() {
       return nt(t);
      }
     }, void 0, function() {
      return {
       state: "fulfilled",
       value: t
      };
     });
    }
    function T(t) {
     var e = p();
     return h.nextTick(function() {
      try {
       t.then(e.resolve, e.reject, e.notify);
      } catch (n) {
       e.reject(n);
      }
     }), e.promise;
    }
    function A(t) {
     return v({
      isDef: function() {}
     }, function(e, n) {
      return N(t, e, n);
     }, function() {
      return h(t).inspect();
     });
    }
    function j(t, e, n) {
     return h(t).spread(e, n);
    }
    function P(t) {
     return function() {
      function e(t, e) {
       var s;
       if ("undefined" == typeof StopIteration) {
        try {
         s = n[t](e);
        } catch (a) {
         return E(a);
        }
        return s.done ? h(s.value) : g(s.value, r, o);
       }
       try {
        s = n[t](e);
       } catch (a) {
        return i(a) ? h(a.value) : E(a);
       }
       return g(s, r, o);
      }
      var n = t.apply(this, arguments), r = e.bind(e, "next"), o = e.bind(e, "throw");
      return r();
     };
    }
    function L(t) {
     h.done(h.async(t)());
    }
    function O(t) {
     throw new V(t);
    }
    function M(t) {
     return function() {
      return j([ this, R(arguments) ], function(e, n) {
       return t.apply(e, n);
      });
     };
    }
    function N(t, e, n) {
     return h(t).dispatch(e, n);
    }
    function R(t) {
     return g(t, function(t) {
      var e = 0, n = p();
      return K(t, function(i, r, o) {
       var s;
       y(r) && "fulfilled" === (s = r.inspect()).state ? t[o] = s.value : (++e, g(r, function(i) {
        t[o] = i, 0 === --e && n.resolve(t);
       }, n.reject, function(t) {
        n.notify({
         index: o,
         value: t
        });
       }));
      }, void 0), 0 === e && n.resolve(t), n.promise;
     });
    }
    function H(t) {
     if (0 === t.length) return h.resolve();
     var e = h.defer(), n = 0;
     return K(t, function(i, r, o) {
      function s(t) {
       e.resolve(t);
      }
      function a() {
       n--, 0 === n && e.reject(new Error("Can't get fulfillment value from any promise, all promises were rejected."));
      }
      function c(t) {
       e.notify({
        index: o,
        value: t
       });
      }
      var u = t[o];
      n++, g(u, s, a, c);
     }, void 0), e.promise;
    }
    function D(t) {
     return g(t, function(t) {
      return t = Z(t, h), g(R(Z(t, function(t) {
       return g(t, G, G);
      })), function() {
       return t;
      });
     });
    }
    function B(t) {
     return h(t).allSettled();
    }
    function I(t, e) {
     return h(t).then(void 0, void 0, e);
    }
    function q(t, e) {
     return h(t).nodeify(e);
    }
    var F = !1;
    try {
     throw new Error();
    } catch (z) {
     F = !!z.stack;
    }
    var U, V, W = u(), G = function() {}, X = function() {
     function e() {
      for (;n.next; ) {
       n = n.next;
       var t = n.task;
       n.task = void 0;
       var i = n.domain;
       i && (n.domain = void 0, i.enter());
       try {
        t();
       } catch (o) {
        if (s) throw i && i.exit(), setTimeout(e, 0), i && i.enter(), o;
        setTimeout(function() {
         throw o;
        }, 0);
       }
       i && i.exit();
      }
      r = !1;
     }
     var n = {
      task: void 0,
      next: null
     }, i = n, r = !1, o = void 0, s = !1;
     if (X = function(e) {
      i = i.next = {
       task: e,
       domain: s && t.domain,
       next: null
      }, r || (r = !0, o());
     }, "undefined" != typeof t && t.nextTick) s = !0, o = function() {
      t.nextTick(e);
     }; else if ("function" == typeof setImmediate) o = "undefined" != typeof window ? setImmediate.bind(window, e) : function() {
      setImmediate(e);
     }; else if ("undefined" != typeof MessageChannel) {
      var a = new MessageChannel();
      a.port1.onmessage = function() {
       o = c, a.port1.onmessage = e, e();
      };
      var c = function() {
       a.port2.postMessage(0);
      };
      o = function() {
       setTimeout(e, 0), c();
      };
     } else o = function() {
      setTimeout(e, 0);
     };
     return X;
    }(), Y = Function.call, J = e(Array.prototype.slice), K = e(Array.prototype.reduce || function(t, e) {
     var n = 0, i = this.length;
     if (1 === arguments.length) for (;;) {
      if (n in this) {
       e = this[n++];
       break;
      }
      if (++n >= i) throw new TypeError();
     }
     for (;i > n; n++) n in this && (e = t(e, this[n], n));
     return e;
    }), Q = e(Array.prototype.indexOf || function(t) {
     for (var e = 0; e < this.length; e++) if (this[e] === t) return e;
     return -1;
    }), Z = e(Array.prototype.map || function(t, e) {
     var n = this, i = [];
     return K(n, function(r, o, s) {
      i.push(t.call(e, o, s, n));
     }, void 0), i;
    }), tt = Object.create || function(t) {
     function e() {}
     return e.prototype = t, new e();
    }, et = e(Object.prototype.hasOwnProperty), nt = Object.keys || function(t) {
     var e = [];
     for (var n in t) et(t, n) && e.push(n);
     return e;
    }, it = e(Object.prototype.toString);
    V = "undefined" != typeof ReturnValue ? ReturnValue : function(t) {
     this.value = t;
    };
    var rt = "From previous event:";
    h.resolve = h, h.nextTick = X, h.longStackSupport = !1, "object" == typeof t && t && t.env && t.env.Q_DEBUG && (h.longStackSupport = !0), 
    h.defer = p, p.prototype.makeNodeResolver = function() {
     var t = this;
     return function(e, n) {
      e ? t.reject(e) : t.resolve(arguments.length > 2 ? J(arguments, 1) : n);
     };
    }, h.Promise = f, h.promise = f, f.race = d, f.all = R, f.reject = E, f.resolve = h, 
    h.passByCopy = function(t) {
     return t;
    }, v.prototype.passByCopy = function() {
     return this;
    }, h.join = function(t, e) {
     return h(t).join(e);
    }, v.prototype.join = function(t) {
     return h([ this, t ]).spread(function(t, e) {
      if (t === e) return t;
      throw new Error("Can't join: not the same: " + t + " " + e);
     });
    }, h.race = d, v.prototype.race = function() {
     return this.then(h.race);
    }, h.makePromise = v, v.prototype.toString = function() {
     return "[object Promise]";
    }, v.prototype.then = function(t, e, n) {
     function i(e) {
      try {
       return "function" == typeof t ? t(e) : e;
      } catch (n) {
       return E(n);
      }
     }
     function o(t) {
      if ("function" == typeof e) {
       r(t, a);
       try {
        return e(t);
       } catch (n) {
        return E(n);
       }
      }
      return E(t);
     }
     function s(t) {
      return "function" == typeof n ? n(t) : t;
     }
     var a = this, c = p(), u = !1;
     return h.nextTick(function() {
      a.promiseDispatch(function(t) {
       u || (u = !0, c.resolve(i(t)));
      }, "when", [ function(t) {
       u || (u = !0, c.resolve(o(t)));
      } ]);
     }), a.promiseDispatch(void 0, "when", [ void 0, function(t) {
      var e, n = !1;
      try {
       e = s(t);
      } catch (i) {
       if (n = !0, !h.onerror) throw i;
       h.onerror(i);
      }
      n || c.notify(e);
     } ]), c.promise;
    }, h.tap = function(t, e) {
     return h(t).tap(e);
    }, v.prototype.tap = function(t) {
     return t = h(t), this.then(function(e) {
      return t.fcall(e).thenResolve(e);
     });
    }, h.when = g, v.prototype.thenResolve = function(t) {
     return this.then(function() {
      return t;
     });
    }, h.thenResolve = function(t, e) {
     return h(t).thenResolve(e);
    }, v.prototype.thenReject = function(t) {
     return this.then(function() {
      throw t;
     });
    }, h.thenReject = function(t, e) {
     return h(t).thenReject(e);
    }, h.nearer = m, h.isPromise = y, h.isPromiseAlike = b, h.isPending = w, v.prototype.isPending = function() {
     return "pending" === this.inspect().state;
    }, h.isFulfilled = _, v.prototype.isFulfilled = function() {
     return "fulfilled" === this.inspect().state;
    }, h.isRejected = x, v.prototype.isRejected = function() {
     return "rejected" === this.inspect().state;
    };
    var ot = [], st = [], at = !0;
    h.resetUnhandledRejections = $, h.getUnhandledReasons = function() {
     return ot.slice();
    }, h.stopUnhandledRejectionTracking = function() {
     $(), at = !1;
    }, $(), h.reject = E, h.fulfill = C, h.master = A, h.spread = j, v.prototype.spread = function(t, e) {
     return this.all().then(function(e) {
      return t.apply(void 0, e);
     }, e);
    }, h.async = P, h.spawn = L, h["return"] = O, h.promised = M, h.dispatch = N, v.prototype.dispatch = function(t, e) {
     var n = this, i = p();
     return h.nextTick(function() {
      n.promiseDispatch(i.resolve, t, e);
     }), i.promise;
    }, h.get = function(t, e) {
     return h(t).dispatch("get", [ e ]);
    }, v.prototype.get = function(t) {
     return this.dispatch("get", [ t ]);
    }, h.set = function(t, e, n) {
     return h(t).dispatch("set", [ e, n ]);
    }, v.prototype.set = function(t, e) {
     return this.dispatch("set", [ t, e ]);
    }, h.del = h["delete"] = function(t, e) {
     return h(t).dispatch("delete", [ e ]);
    }, v.prototype.del = v.prototype["delete"] = function(t) {
     return this.dispatch("delete", [ t ]);
    }, h.mapply = h.post = function(t, e, n) {
     return h(t).dispatch("post", [ e, n ]);
    }, v.prototype.mapply = v.prototype.post = function(t, e) {
     return this.dispatch("post", [ t, e ]);
    }, h.send = h.mcall = h.invoke = function(t, e) {
     return h(t).dispatch("post", [ e, J(arguments, 2) ]);
    }, v.prototype.send = v.prototype.mcall = v.prototype.invoke = function(t) {
     return this.dispatch("post", [ t, J(arguments, 1) ]);
    }, h.fapply = function(t, e) {
     return h(t).dispatch("apply", [ void 0, e ]);
    }, v.prototype.fapply = function(t) {
     return this.dispatch("apply", [ void 0, t ]);
    }, h["try"] = h.fcall = function(t) {
     return h(t).dispatch("apply", [ void 0, J(arguments, 1) ]);
    }, v.prototype.fcall = function() {
     return this.dispatch("apply", [ void 0, J(arguments) ]);
    }, h.fbind = function(t) {
     var e = h(t), n = J(arguments, 1);
     return function() {
      return e.dispatch("apply", [ this, n.concat(J(arguments)) ]);
     };
    }, v.prototype.fbind = function() {
     var t = this, e = J(arguments);
     return function() {
      return t.dispatch("apply", [ this, e.concat(J(arguments)) ]);
     };
    }, h.keys = function(t) {
     return h(t).dispatch("keys", []);
    }, v.prototype.keys = function() {
     return this.dispatch("keys", []);
    }, h.all = R, v.prototype.all = function() {
     return R(this);
    }, h.any = H, v.prototype.any = function() {
     return H(this);
    }, h.allResolved = l(D, "allResolved", "allSettled"), v.prototype.allResolved = function() {
     return D(this);
    }, h.allSettled = B, v.prototype.allSettled = function() {
     return this.then(function(t) {
      return R(Z(t, function(t) {
       function e() {
        return t.inspect();
       }
       return t = h(t), t.then(e, e);
      }));
     });
    }, h.fail = h["catch"] = function(t, e) {
     return h(t).then(void 0, e);
    }, v.prototype.fail = v.prototype["catch"] = function(t) {
     return this.then(void 0, t);
    }, h.progress = I, v.prototype.progress = function(t) {
     return this.then(void 0, void 0, t);
    }, h.fin = h["finally"] = function(t, e) {
     return h(t)["finally"](e);
    }, v.prototype.fin = v.prototype["finally"] = function(t) {
     return t = h(t), this.then(function(e) {
      return t.fcall().then(function() {
       return e;
      });
     }, function(e) {
      return t.fcall().then(function() {
       throw e;
      });
     });
    }, h.done = function(t, e, n, i) {
     return h(t).done(e, n, i);
    }, v.prototype.done = function(e, n, i) {
     var o = function(t) {
      h.nextTick(function() {
       if (r(t, s), !h.onerror) throw t;
       h.onerror(t);
      });
     }, s = e || n || i ? this.then(e, n, i) : this;
     "object" == typeof t && t && t.domain && (o = t.domain.bind(o)), s.then(void 0, o);
    }, h.timeout = function(t, e, n) {
     return h(t).timeout(e, n);
    }, v.prototype.timeout = function(t, e) {
     var n = p(), i = setTimeout(function() {
      e && "string" != typeof e || (e = new Error(e || "Timed out after " + t + " ms"), 
      e.code = "ETIMEDOUT"), n.reject(e);
     }, t);
     return this.then(function(t) {
      clearTimeout(i), n.resolve(t);
     }, function(t) {
      clearTimeout(i), n.reject(t);
     }, n.notify), n.promise;
    }, h.delay = function(t, e) {
     return void 0 === e && (e = t, t = void 0), h(t).delay(e);
    }, v.prototype.delay = function(t) {
     return this.then(function(e) {
      var n = p();
      return setTimeout(function() {
       n.resolve(e);
      }, t), n.promise;
     });
    }, h.nfapply = function(t, e) {
     return h(t).nfapply(e);
    }, v.prototype.nfapply = function(t) {
     var e = p(), n = J(t);
     return n.push(e.makeNodeResolver()), this.fapply(n).fail(e.reject), e.promise;
    }, h.nfcall = function(t) {
     var e = J(arguments, 1);
     return h(t).nfapply(e);
    }, v.prototype.nfcall = function() {
     var t = J(arguments), e = p();
     return t.push(e.makeNodeResolver()), this.fapply(t).fail(e.reject), e.promise;
    }, h.nfbind = h.denodeify = function(t) {
     var e = J(arguments, 1);
     return function() {
      var n = e.concat(J(arguments)), i = p();
      return n.push(i.makeNodeResolver()), h(t).fapply(n).fail(i.reject), i.promise;
     };
    }, v.prototype.nfbind = v.prototype.denodeify = function() {
     var t = J(arguments);
     return t.unshift(this), h.denodeify.apply(void 0, t);
    }, h.nbind = function(t, e) {
     var n = J(arguments, 2);
     return function() {
      function i() {
       return t.apply(e, arguments);
      }
      var r = n.concat(J(arguments)), o = p();
      return r.push(o.makeNodeResolver()), h(i).fapply(r).fail(o.reject), o.promise;
     };
    }, v.prototype.nbind = function() {
     var t = J(arguments, 0);
     return t.unshift(this), h.nbind.apply(void 0, t);
    }, h.nmapply = h.npost = function(t, e, n) {
     return h(t).npost(e, n);
    }, v.prototype.nmapply = v.prototype.npost = function(t, e) {
     var n = J(e || []), i = p();
     return n.push(i.makeNodeResolver()), this.dispatch("post", [ t, n ]).fail(i.reject), 
     i.promise;
    }, h.nsend = h.nmcall = h.ninvoke = function(t, e) {
     var n = J(arguments, 2), i = p();
     return n.push(i.makeNodeResolver()), h(t).dispatch("post", [ e, n ]).fail(i.reject), 
     i.promise;
    }, v.prototype.nsend = v.prototype.nmcall = v.prototype.ninvoke = function(t) {
     var e = J(arguments, 1), n = p();
     return e.push(n.makeNodeResolver()), this.dispatch("post", [ t, e ]).fail(n.reject), 
     n.promise;
    }, h.nodeify = q, v.prototype.nodeify = function(t) {
     return t ? void this.then(function(e) {
      h.nextTick(function() {
       t(null, e);
      });
     }, function(e) {
      h.nextTick(function() {
       t(e);
      });
     }) : this;
    };
    var ct = u();
    return h;
   });
  }).call(this, t("_process"));
 }, {
  _process: 1
 } ],
 209: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = (t("jslib/utils/Log"), "waBack");
  e.directive(n, [ t("../services/Back"), function(t) {
   return {
    restrict: "A",
    link: function(e, n) {
     n.on("click", function() {
      e.$apply(function() {
       t.back();
      });
     });
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../services/Back": 219,
  "jslib/utils/Log": 187
 } ],
 210: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = "catchBack";
  e.directive(i, [ "$rootScope", "$parse", t("../services/Hashstack"), t("../services/Back"), function(t, e, r, o) {
   return {
    restrict: "A",
    link: function(s, a, c) {
     var u = e(c[i]), l = function() {
      if (!t.$$phase) throw new Error("not digesting?");
      var e = u(s, {});
      n.trace(i, "result", e), r.remove(l), "keep" === e && r.push(l), "continue" === e && o.back();
     };
     r.push(l), s.$on("$destroy", function() {
      r.remove(l);
     });
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../services/Back": 219,
  "../services/Hashstack": 225,
  "jslib/utils/Log": 187
 } ],
 211: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = t("jslib/utils/UtilsArray");
  t("jslib/ui/RequestAnimationFrame");
  var r = "center", o = "centerWatch";
  e.directive(r, [ function() {
   return {
    restrict: "A",
    link: function(t, e, s) {
     var a, c, u = e[0], l = e.parent()[0];
     u.style.opacity = 0;
     var h = function(t) {
      n.trace(r, "queueCenter instant: " + t), clearTimeout(a), t ? (window.cancelAnimationFrame(c), 
      c = window.requestAnimationFrame(f.bind(this))) : a = setTimeout(function() {
       window.cancelAnimationFrame(c), c = window.requestAnimationFrame(f.bind(this));
      }, 20);
     }, p = h.bind(this, !1), f = function() {
      if (a = void 0, n.trace(r, "center() run"), l) {
       var t = l.clientWidth, e = l.clientHeight, i = u.offsetWidth, o = u.offsetHeight, s = Math.round((t - i) / 2), c = Math.round((e - o) / 2);
       u.style.opacity = "", u.style.left = s + "px", u.style.top = c + "px", n.trace(r, "center() left " + s + ", parent w " + t + " dialog w " + i);
      }
     };
     if (t.$on("$destroy", function() {
      window.removeEventListener("resize", p), window.cancelAnimationFrame(c), clearTimeout(a);
     }), s[r].length > 0) t.$watch(r, h.bind(this, !0), !0); else if (s[o]) {
      var d = t.$eval(s[o]);
      if (!i.isArray(d)) throw new Error("attrs.attrWatch !== array, is: " + typeof d);
      n.trace(r, "attrWatch: " + d.join(" + ")), t.$watch(d.join(" + "), h.bind(this, !0), !0);
     } else h(!0);
     window.addEventListener("resize", p, !1);
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/ui/RequestAnimationFrame": 182,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsArray": 190
 } ],
 212: [ function(t) {
  "use strict";
  var e = t("jslib/utils/Log"), n = t("../ngmodule"), i = "enterSubmit";
  n.directive(i, [ "$parse", function(t) {
   return {
    restrict: "A",
    link: function(n, r, o) {
     var s = t(o[i]), a = function(t) {
      if (13 === t.which && !t.shiftKey) {
       e.trace(i, "enter key pressed");
       var r = t.target;
       r.blur(), r.focus(), setTimeout(function() {
        n.$apply(function() {
         s(n, {});
        });
       }, 10);
      }
     };
     r.on("keydown", a), n.$on("$destroy", function() {
      r.off("keydown", a);
     });
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/utils/Log": 187
 } ],
 213: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("../vendor/iscroll-carlhopf"), i = t("jslib/utils/Log");
  t("jslib/ui/RequestAnimationFrame");
  var r = "iscroll", o = "iscrollAutoscroll", s = "iscrollWatch", a = "iscrollDelay", c = "bind";
  e.directive(r, [ "$timeout", "$window", function(t, e) {
   return {
    restrict: "A",
    link: function(t, u, l) {
     var h, p, f, d, v, g, m, y = angular.element(e), b = !1, w = "true" === l[o], _ = parseInt(l[a], 10) || 0, x = {
      mouseWheel: !0,
      scrollbars: "false" === l.iscrollScrollbars ? !1 : !0,
      fadeScrollbars: "true" === l.iscrollFadeScrollbars ? !0 : !1,
      bounce: !1,
      preventDefaultException: {
       tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|LABEL)$/
      }
     }, $ = function() {
      C(300);
     }, k = function() {
      if (!f) return !1;
      var t = f.wrapperHeight - f.scrollerHeight;
      return 0 > t && f.y > t ? !1 : !0;
     };
     t.$on("iscroll.refresh", function(t) {
      i.trace(r, "$on iscroll.refresh"), f && (t.stopPropagation && t.stopPropagation(), 
      C());
     }), t.$on("iscroll.disable", function() {
      i.trace(r, "$on iscroll.disable"), f && f.disable();
     }), t.$on("iscroll.enable", function() {
      i.trace(r, "$on iscroll.enable"), f && f.enable();
     });
     var S = function() {
      w = !1, b = !0, i.debug(r, "scrollStart");
     }, E = function() {
      b && (b = !1, w = k() && "true" === l[o], i.debug(r, "scrollEnd, autoscroll " + w));
     }, C = function(t) {
      i.trace(r, "invokeRefresh()"), t = t || _, clearTimeout(g), window.cancelAnimationFrame(d), 
      d = window.requestAnimationFrame(function() {
       L(), t > 0 ? g = setTimeout(function() {
        T();
       }, t) : T();
      });
     }, T = function() {
      window.cancelAnimationFrame(v), v = window.requestAnimationFrame(function() {
       if (i.trace(r, "refresh()"), f) {
        if (!h.offsetParent) return void i.trace(r, "iscroll element not visible, skip runRefresh");
        if (0 === h.clientWidth || 0 === h.clientHeight) return void i.trace(r, "iscroll element not visible, skip runRefresh");
        f.refresh(), A();
       }
      });
     }, A = function(t) {
      i.trace(r, "invokeAutoscroll()"), f && (w && !b ? (clearTimeout(m), m = setTimeout(function() {
       return m = void 0, 0 === p.children.length ? void i.trace(r, "not enough children for autoscroll scroll") : void f.scrollToElement(p.children[p.children.length - 1], t ? 0 : 300, null, !0);
      }, 10)) : i.trace(r, "refresh, but autoscroll disabled"));
     };
     if (l[s]) {
      var j = t.$eval(l[s]);
      if (!(j && j instanceof Array)) throw new Error("iscrollWatch cannot be parsed as array, " + j);
      t.$watch(j.join(" + "), function() {
       i.trace(r, "watched key changed, refresh() next tick"), C();
      }, !0), i.trace(r, "watch: " + j.join(" + "));
     }
     l.$observe(c, function(t) {
      i.trace(r, "bind observe", t), C();
     });
     var P = function() {
      clearTimeout(m), clearTimeout(g), window.cancelAnimationFrame(v), window.cancelAnimationFrame(d), 
      f && (f.off("scrollStart", S), f.off("scrollEnd", E), f.destroy(), f = void 0);
     }, L = function() {
      if (!f) {
       if (h = u[0], p = h.children[0], !p) throw new Error("inner element undefined");
       if (!h) throw new Error("outer element undefined");
       i.trace(r, "create scroller", h, p), f = new n(h, x), f.on("scrollStart", S), f.on("scrollEnd", E);
      }
     };
     t.$on("$destroy", function() {
      P(), y.unbind("resize", $);
     }), y.bind("resize", $), i.trace(r, "create, attrBind " + l[c]);
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../vendor/iscroll-carlhopf": 230,
  "jslib/ui/RequestAnimationFrame": 182,
  "jslib/utils/Log": 187
 } ],
 214: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = "waPopup";
  t("./Center"), e.directive(n, [ function() {
   return {
    restrict: "E",
    template: t("../views/popup.html"),
    transclude: !0,
    scope: {
     bind: "@?",
     contentClass: "@"
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../views/popup.html": 232,
  "./Center": 211
 } ],
 215: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = e.exports = "lcze";
  n.filter(i, [ t("../services/Lcze"), function(t) {
   return function(e) {
    return t.get(e);
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../services/Lcze": 226
 } ],
 216: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/UtilsDate");
  e.config([ t("../services/Lcze") + "Provider", function(e) {
   e.json("en", t("../strings/timeago.json"));
  } ]), e.filter("timeago", [ "$filter", function(t) {
   return function(e) {
    var i = parseInt(e, 10) || 0;
    if (isNaN(i)) throw new Error("invalid input: " + e);
    var r = n.getTimeAgo(i), o = r.value > 1 || 0 === r.value ? "timeago_multi_" : "timeago_";
    switch (r.type) {
    case "second":
     return t("lcze")("timeago_justnow");

    default:
     return r.value + " " + t("lcze")(o + r.type);
    }
   };
  } ]), e.filter("timeagoshort", [ "$filter", function(t) {
   return function(e) {
    var i = parseInt(e, 10) || 0;
    if (isNaN(i)) throw new Error("invalid input: " + e);
    var r = n.getTimeAgo(i), o = r.value;
    switch (r.type) {
    case "second":
     return t("lcze")("timeago_justnow");

    case "minute":
     return o + "m";

    case "hour":
     return o + "h";

    case "day":
     return o + "d";

    case "year":
     return o + "y";

    default:
     return "error";
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "../services/Lcze": 226,
  "../strings/timeago.json": 228,
  "jslib/utils/UtilsDate": 194
 } ],
 217: [ function(t, e) {
  "use strict";
  var n = t("angular/angular"), i = "webapp";
  n.module(i, []), e.exports = n.module(i);
 }, {
  "angular/angular": 22
 } ],
 218: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = (t("jslib/utils/Log"), t("jslib/utils/UUID"), t("jslib/utils/UtilsDOM"), 
  e.exports = "waAnalytics");
  n.factory(i, [ function() {
   return t("jslib/utils/Analytics");
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/utils/Analytics": 185,
  "jslib/utils/Log": 187,
  "jslib/utils/UUID": 189,
  "jslib/utils/UtilsDOM": 193
 } ],
 219: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/UtilsChrome"), r = t("jslib/utils/UtilsCordova"), o = e.exports = "waBack";
  n.factory(o, [ t("./Hashstack"), function(t) {
   var e = (i.isChromePackagedApp() || navigator.userAgent.match(/Windows Phone/i) && r.isCordova(), 
   function() {
    t.back();
   });
   return {
    back: e
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "./Hashstack": 225,
  "jslib/utils/UtilsChrome": 191,
  "jslib/utils/UtilsCordova": 192
 } ],
 220: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/Store"), r = e.exports = "compatStorage";
  n.factory(r, [ function() {
   return i;
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/utils/Store": 188
 } ],
 221: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/event/EventEmitter"), o = e.exports = "waDebugConsole";
  n.factory(o, [ function() {
   var t = new r();
   return window.debugEmit = function() {
    return i.debug(o, "debugEmit", arguments), t.emit.apply(t, arguments), "(emit return value)";
   }, t;
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/event/EventEmitter": 172,
  "jslib/utils/Log": 187
 } ],
 222: [ function(t) {
  "use strict";
  var e, n = t("../ngmodule"), i = t("../vendor/stacktrace"), r = t("jslib/utils/UtilsDOM"), o = r.metaName("emery-vcint") || "vc-unset", s = (r.metaName("emery-version") || "version-unset", 
  {}), a = function(t, e, n) {
   var r = i({
    e: n
   }).join(" ### "), a = e + r;
   s[a] !== !0 && (console.log("sending error report (version " + o + ") '" + e + "', trace: " + JSON.stringify(r)), 
   t.exec("send", "event", "exception-vc" + o, "vc-" + o + " " + e, r), t.exec("send", "event", "exception-count", "counter-" + o), 
   s[a] = !0);
  }, c = window.onerror;
  window.onerror = function(t, n, i, r, o) {
   c && c.apply(window, arguments), console.log("window.onerror: " + t, o), t = t + " " + n + ":" + i, 
   o ? a(e || {
    exec: window.ga
   }, t, o) : a(e || {
    exec: window.ga
   }, t, new Error("window.onerror no stacktrace"));
  }, n.provider("$exceptionHandler", {
   $get: [ "errorLogService", function(t) {
    return t;
   } ]
  }), n.factory("errorLogService", [ "$log", "$window", t("./Analytics"), function(t, e, n) {
   return function(e, i) {
    t.error.apply(t, arguments);
    try {
     var r = e.toString();
     a(n, r + " (ng, caused by: " + i + ")", e);
    } catch (o) {
     t.warn("Error logging failed"), t.log(o);
    }
   };
  } ]), n.run([ t("./Analytics"), t("./DebugConsole"), function(t, n) {
   e = t, n.on("wa.thrownull", function() {
    var t = function() {
     console.log("test"), e();
    }, e = function() {
     console.log("test");
     var t = null;
     t.e();
    };
    setTimeout(function() {
     t();
    }, 100);
   });
  } ]);
 }, {
  "../ngmodule": 217,
  "../vendor/stacktrace": 231,
  "./Analytics": 218,
  "./DebugConsole": 221,
  "jslib/utils/UtilsDOM": 193
 } ],
 223: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/Log"), r = t("jslib/utils/UtilsChrome"), o = t("jslib/utils/UtilsCordova"), s = e.exports = "waExit";
  n.factory(s, [ t("./Hashstack"), function(t) {
   return {
    exit: function() {
     o.isCordova() && navigator.app && navigator.app.exitApp ? (i.debug(s, "exit app using cordova"), 
     navigator.app.exitApp()) : r.isChromePackagedApp() ? i.debug(s, "chrome packaged app, do nothing") : (i.debug(s, "history.back() once more to leave app"), 
     history.back());
    },
    listenDrain: function() {
     t.ondrain(this.exit.bind(this));
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "./Hashstack": 225,
  "jslib/utils/Log": 187,
  "jslib/utils/UtilsChrome": 191,
  "jslib/utils/UtilsCordova": 192
 } ],
 224: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("../vendor/fastclick");
  e.run([ function() {
   n(document.body);
  } ]);
 }, {
  "../ngmodule": 217,
  "../vendor/fastclick": 229
 } ],
 225: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = t("jslib/utils/Log"), r = e.exports = "waHashstack";
  n.factory(r, [ "$rootScope", "$location", function(t, e) {
   var n, o = [], s = [], a = [], c = function() {
    i.trace(r, "bang");
    var t = new Date().getTime().toString(16), o = parseInt((Math.random() + "").substr(2), 10).toString(16);
    n = "/" + t + o, e.path(n);
   }, u = function(t) {
    if (-1 !== s.indexOf(t)) throw new Error("callback already in stack");
    s.push(t), i.trace(r, "push, hashes " + o.length + ", callbacks " + s.length), s.length > o.length && c();
   }, l = function(t) {
    var e = s.indexOf(t);
    -1 !== e && (i.trace(r, "remove callback", e), s.splice(e, 1));
   }, h = function() {
    if (!t.$$phase) throw new Error("back() but no digest running");
    return 0 === s.length ? (i.info(r, "callbacks.length === 0, you should now exit the app"), 
    void a.forEach(function(t) {
     t();
    })) : (i.trace(r, "pop and exec callback"), void s.pop()());
   };
   return t.$on("$locationChangeSuccess", function(t, s, a) {
    i.trace(r, "$locationChangeSuccess, new " + s + ", old " + a);
    var c = e.path();
    return s === a ? void i.trace(r, "newPath === oldPath", s) : c === n ? -1 !== o.indexOf(c) ? void i.trace(r, "skip new hash (created by bang) already in hashes[]") : (o.push(c), 
    void i.trace(r, "new hash (created by bang)")) : (o.length > 0 && (i.trace(r, "hash pop"), 
    o.pop()), void h());
   }), {
    push: u,
    remove: l,
    back: h,
    ondrain: function(t) {
     a.push(t);
    }
   };
  } ]);
 }, {
  "../ngmodule": 217,
  "jslib/utils/Log": 187
 } ],
 226: [ function(t, e) {
  "use strict";
  var n = t("../ngmodule"), i = e.exports = "localize";
  n.provider(i, function() {
   var t = {}, e = {}, n = "en", i = function(n, i, r) {
    var o;
    return void 0 !== n && "en" !== n && (o = e[n][i]), void 0 === o && (o = t[i]), 
    o || "" === o ? o : r ? r : "error:" + i;
   };
   this.$get = [ function() {
    return {
     get: function(t) {
      switch (typeof t) {
      case "undefined":
       return "error-undefined";

      case "string":
       return i(n, t);

      case "array":
       for (var e = [], r = t.length - 1; r >= 0; r--) e[r] = i(n, t[r]);
       return e;

      default:
       throw new Error("unhandled: " + typeof t);
      }
     },
     getArray: function(t) {
      for (var e = [], n = 0; n < t.length; n++) e.push(this.get(t[n]));
      return e;
     }
    };
   } ], this.json = function(n, i) {
    if ("en" === n || void 0 === n) for (var r in i) t[r] = i[r]; else for (var o in i) e[o] = i[o];
   };
  });
 }, {
  "../ngmodule": 217
 } ],
 227: [ function(t) {
  "use strict";
  var e = t("../ngmodule"), n = t("jslib/utils/Log"), i = "waMobileFixes";
  t("jslib/polyfill/Bind"), t("jslib/ui/RequestAnimationFrame"), t("./Fastclick"), 
  document.addEventListener("touchmove", function(t) {
   t.preventDefault();
  }, !1);
  var r = function() {
   throw new Error("handleBackbutton not yet initialized");
  };
  if (e.run([ "$rootScope", t("./Back"), t("./DebugConsole"), function(t, e, n) {
   r = function() {
    var n = document.activeElement;
    n && n.tagName && "input" == n.tagName.toLowerCase() && "text" == n.type.toLowerCase() ? (console.log("backbutton, input.blur() before go back"), 
    n.blur()) : (console.log("backbutton, waBack.back()"), t.$apply(function() {
     e.back();
    }));
   }, n.on("wa.backbutton", function() {
    r();
   });
  } ]), document.addEventListener("deviceready", function() {
   document.addEventListener("backbutton", function() {
    r();
   }, !1);
  }, !1), /(iPad|iPhone|iPod)/g.test(navigator.userAgent)) {
   var o = document.getElementsByTagName("html")[0], s = function() {
    var t = window.innerHeight, e = o.clientHeight;
    n.debug(i, "safari20pxFix, html h " + e + " win h " + t), e > t ? (n.debug(i, "safari20pxFix, html h " + e + " > window h " + t), 
    o.style.paddingBottom = e - t + "px") : o.style.paddingBottom = "";
   };
   window.addEventListener("resize", function() {
    window.requestAnimationFrame(function() {
     s();
    });
   }, !1), window.requestAnimationFrame(function() {
    s();
   });
  }
  e.config([ "$compileProvider", function(t) {
   var e = /^\s*((https?|ftp|file|blob):|data:image\/)/;
   if (t.imgSrcSanitizationWhitelist().toString() !== e.toString()) {
    var n = "default imgSrcSanitizationWhitelist changed to " + t.imgSrcSanitizationWhitelist().toString() + ", update to new from angular.js and append 'chrome-extension' and 'app'";
    throw console.error(n), new Error(n);
   }
   t.imgSrcSanitizationWhitelist(/^\s*((https?|ftp|file|blob|chrome-extension|app|ms-appx|x-wmapp0|ms-appx-web):|data:image\/)/);
  } ]), document.addEventListener("deviceready", function() {
   window.StatusBar && /(iPad|iPhone|iPod)/g.test(navigator.userAgent) && window.StatusBar.hide();
  });
 }, {
  "../ngmodule": 217,
  "./Back": 219,
  "./DebugConsole": 221,
  "./Fastclick": 224,
  "jslib/polyfill/Bind": 179,
  "jslib/ui/RequestAnimationFrame": 182,
  "jslib/utils/Log": 187
 } ],
 228: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n\n    "timeago_justnow": "just now",\n\n    "timeago_second": "second ago",\n    "timeago_multi_second": "seconds ago",\n\n    "timeago_minute": "minute ago",\n    "timeago_multi_minute": "minutes ago",\n\n    "timeago_hour": "hour ago",\n    "timeago_multi_hour": "hours ago",\n\n    "timeago_day": "day ago",\n    "timeago_multi_day": "days ago",\n\n    "timeago_month": "month ago",\n    "timeago_multi_month": "months ago",\n\n    "timeago_year": "year ago",\n    "timeago_multi_year": "years ago"\n\n}');
 }, {} ],
 229: [ function(t, e) {
  !function() {
   "use strict";
   function t(e, n) {
    function r(t, e) {
     return function() {
      return t.apply(e, arguments);
     };
    }
    var o;
    if (n = n || {}, this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, 
    this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = n.touchBoundary || 10, 
    this.layer = e, this.tapDelay = n.tapDelay || 200, this.tapTimeout = n.tapTimeout || 700, 
    !t.notNeeded(e)) {
     for (var s = [ "onMouse", "onClick", "onTouchStart", "onTouchMove", "onTouchEnd", "onTouchCancel" ], a = this, c = 0, u = s.length; u > c; c++) a[s[c]] = r(a[s[c]], a);
     i && (e.addEventListener("mouseover", this.onMouse, !0), e.addEventListener("mousedown", this.onMouse, !0), 
     e.addEventListener("mouseup", this.onMouse, !0)), e.addEventListener("click", this.onClick, !0), 
     e.addEventListener("touchstart", this.onTouchStart, !1), e.addEventListener("touchmove", this.onTouchMove, !1), 
     e.addEventListener("touchend", this.onTouchEnd, !1), e.addEventListener("touchcancel", this.onTouchCancel, !1), 
     Event.prototype.stopImmediatePropagation || (e.removeEventListener = function(t, n, i) {
      var r = Node.prototype.removeEventListener;
      "click" === t ? r.call(e, t, n.hijacked || n, i) : r.call(e, t, n, i);
     }, e.addEventListener = function(t, n, i) {
      var r = Node.prototype.addEventListener;
      "click" === t ? r.call(e, t, n.hijacked || (n.hijacked = function(t) {
       t.propagationStopped || n(t);
      }), i) : r.call(e, t, n, i);
     }), "function" == typeof e.onclick && (o = e.onclick, e.addEventListener("click", function(t) {
      o(t);
     }, !1), e.onclick = null);
    }
   }
   var n = navigator.userAgent.indexOf("Windows Phone") >= 0, i = navigator.userAgent.indexOf("Android") > 0 && !n, r = /iP(ad|hone|od)/.test(navigator.userAgent) && !n, o = r && /OS 4_\d(_\d)?/.test(navigator.userAgent), s = r && /OS [6-7]_\d/.test(navigator.userAgent), a = navigator.userAgent.indexOf("BB10") > 0;
   t.prototype.needsClick = function(t) {
    switch (t.nodeName.toLowerCase()) {
    case "button":
    case "select":
    case "textarea":
     if (t.disabled) return !0;
     break;

    case "input":
     if (r && "file" === t.type || t.disabled) return !0;
     break;

    case "label":
    case "iframe":
    case "video":
     return !0;
    }
    return /\bneedsclick\b/.test(t.className);
   }, t.prototype.needsFocus = function(t) {
    switch (t.nodeName.toLowerCase()) {
    case "textarea":
     return !0;

    case "select":
     return !i;

    case "input":
     switch (t.type) {
     case "button":
     case "checkbox":
     case "file":
     case "image":
     case "radio":
     case "submit":
      return !1;
     }
     return !t.disabled && !t.readOnly;

    default:
     return /\bneedsfocus\b/.test(t.className);
    }
   }, t.prototype.sendClick = function(t, e) {
    var n, i;
    document.activeElement && document.activeElement !== t && document.activeElement.blur(), 
    i = e.changedTouches[0], n = document.createEvent("MouseEvents"), n.initMouseEvent(this.determineEventType(t), !0, !0, window, 1, i.screenX, i.screenY, i.clientX, i.clientY, !1, !1, !1, !1, 0, null), 
    n.forwardedTouchEvent = !0, t.dispatchEvent(n);
   }, t.prototype.determineEventType = function(t) {
    return i && "select" === t.tagName.toLowerCase() ? "mousedown" : "click";
   }, t.prototype.focus = function(t) {
    var e;
    r && t.setSelectionRange && 0 !== t.type.indexOf("date") && "time" !== t.type && "month" !== t.type ? (e = t.value.length, 
    t.setSelectionRange(e, e)) : t.focus();
   }, t.prototype.updateScrollParent = function(t) {
    var e, n;
    if (e = t.fastClickScrollParent, !e || !e.contains(t)) {
     n = t;
     do {
      if (n.scrollHeight > n.offsetHeight) {
       e = n, t.fastClickScrollParent = n;
       break;
      }
      n = n.parentElement;
     } while (n);
    }
    e && (e.fastClickLastScrollTop = e.scrollTop);
   }, t.prototype.getTargetElementFromEventTarget = function(t) {
    return t.nodeType === Node.TEXT_NODE ? t.parentNode : t;
   }, t.prototype.onTouchStart = function(t) {
    var e, n, i;
    if (t.targetTouches.length > 1) return !0;
    if (e = this.getTargetElementFromEventTarget(t.target), n = t.targetTouches[0], 
    r) {
     if (i = window.getSelection(), i.rangeCount && !i.isCollapsed) return !0;
     if (!o) {
      if (n.identifier && n.identifier === this.lastTouchIdentifier) return t.preventDefault(), 
      !1;
      this.lastTouchIdentifier = n.identifier, this.updateScrollParent(e);
     }
    }
    return this.trackingClick = !0, this.trackingClickStart = t.timeStamp, this.targetElement = e, 
    this.touchStartX = n.pageX, this.touchStartY = n.pageY, t.timeStamp - this.lastClickTime < this.tapDelay && t.preventDefault(), 
    !0;
   }, t.prototype.touchHasMoved = function(t) {
    var e = t.changedTouches[0], n = this.touchBoundary;
    return Math.abs(e.pageX - this.touchStartX) > n || Math.abs(e.pageY - this.touchStartY) > n ? !0 : !1;
   }, t.prototype.onTouchMove = function(t) {
    return this.trackingClick ? ((this.targetElement !== this.getTargetElementFromEventTarget(t.target) || this.touchHasMoved(t)) && (this.trackingClick = !1, 
    this.targetElement = null), !0) : !0;
   }, t.prototype.findControl = function(t) {
    return void 0 !== t.control ? t.control : t.htmlFor ? document.getElementById(t.htmlFor) : t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea");
   }, t.prototype.onTouchEnd = function(t) {
    var e, n, a, c, u, l = this.targetElement;
    if (!this.trackingClick) return !0;
    if (t.timeStamp - this.lastClickTime < this.tapDelay) return this.cancelNextClick = !0, 
    !0;
    if (t.timeStamp - this.trackingClickStart > this.tapTimeout) return !0;
    if (this.cancelNextClick = !1, this.lastClickTime = t.timeStamp, n = this.trackingClickStart, 
    this.trackingClick = !1, this.trackingClickStart = 0, s && (u = t.changedTouches[0], 
    l = document.elementFromPoint(u.pageX - window.pageXOffset, u.pageY - window.pageYOffset) || l, 
    l.fastClickScrollParent = this.targetElement.fastClickScrollParent), a = l.tagName.toLowerCase(), 
    "label" === a) {
     if (e = this.findControl(l)) {
      if (this.focus(l), i) return !1;
      l = e;
     }
    } else if (this.needsFocus(l)) return t.timeStamp - n > 100 || r && window.top !== window && "input" === a ? (this.targetElement = null, 
    !1) : (this.focus(l), this.sendClick(l, t), r && "select" === a || (this.targetElement = null, 
    t.preventDefault()), !1);
    return r && !o && (c = l.fastClickScrollParent, c && c.fastClickLastScrollTop !== c.scrollTop) ? !0 : (this.needsClick(l) || (t.preventDefault(), 
    this.sendClick(l, t)), !1);
   }, t.prototype.onTouchCancel = function() {
    this.trackingClick = !1, this.targetElement = null;
   }, t.prototype.onMouse = function(t) {
    return this.targetElement ? t.forwardedTouchEvent ? !0 : t.cancelable && (!this.needsClick(this.targetElement) || this.cancelNextClick) ? (t.stopImmediatePropagation ? t.stopImmediatePropagation() : t.propagationStopped = !0, 
    t.stopPropagation(), t.preventDefault(), !1) : !0 : !0;
   }, t.prototype.onClick = function(t) {
    var e;
    return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, 
    !0) : "submit" === t.target.type && 0 === t.detail ? !0 : (e = this.onMouse(t), 
    e || (this.targetElement = null), e);
   }, t.prototype.destroy = function() {
    var t = this.layer;
    i && (t.removeEventListener("mouseover", this.onMouse, !0), t.removeEventListener("mousedown", this.onMouse, !0), 
    t.removeEventListener("mouseup", this.onMouse, !0)), t.removeEventListener("click", this.onClick, !0), 
    t.removeEventListener("touchstart", this.onTouchStart, !1), t.removeEventListener("touchmove", this.onTouchMove, !1), 
    t.removeEventListener("touchend", this.onTouchEnd, !1), t.removeEventListener("touchcancel", this.onTouchCancel, !1);
   }, t.notNeeded = function(t) {
    var e, n, r, o;
    if ("undefined" == typeof window.ontouchstart) return !0;
    if (n = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [ , 0 ])[1]) {
     if (!i) return !0;
     if (e = document.querySelector("meta[name=viewport]")) {
      if (-1 !== e.content.indexOf("user-scalable=no")) return !0;
      if (n > 31 && document.documentElement.scrollWidth <= window.outerWidth) return !0;
     }
    }
    if (a && (r = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/), r[1] >= 10 && r[2] >= 3 && (e = document.querySelector("meta[name=viewport]")))) {
     if (-1 !== e.content.indexOf("user-scalable=no")) return !0;
     if (document.documentElement.scrollWidth <= window.outerWidth) return !0;
    }
    return "none" === t.style.msTouchAction || "manipulation" === t.style.touchAction ? !0 : (o = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [ , 0 ])[1], 
    o >= 27 && (e = document.querySelector("meta[name=viewport]"), e && (-1 !== e.content.indexOf("user-scalable=no") || document.documentElement.scrollWidth <= window.outerWidth)) ? !0 : "none" === t.style.touchAction || "manipulation" === t.style.touchAction ? !0 : !1);
   }, t.attach = function(e, n) {
    return new t(e, n);
   }, "function" == typeof define && "object" == typeof define.amd && define.amd ? define(function() {
    return t;
   }) : "undefined" != typeof e && e.exports ? (e.exports = t.attach, e.exports.FastClick = t) : window.FastClick = t;
  }();
 }, {} ],
 230: [ function(t, e) {
  "use strict";
  !function(t, n, i) {
   function r(t, e) {
    this.wrapper = "string" == typeof t ? n.querySelector(t) : t, this.scroller = this.wrapper.children[0], 
    this.scrollerStyle = this.scroller.style, this.options = {
     resizeScrollbars: !0,
     mouseWheelSpeed: 20,
     snapThreshold: .334,
     startX: 0,
     startY: 0,
     scrollY: !0,
     directionLockThreshold: 5,
     momentum: !0,
     bounce: !0,
     bounceTime: 600,
     bounceEasing: "",
     preventDefault: !0,
     preventDefaultException: {
      tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/
     },
     HWCompositing: !0,
     useTransition: !0,
     useTransform: !0
    };
    for (var i in e) this.options[i] = e[i];
    this.translateZ = this.options.HWCompositing && c.hasPerspective ? " translateZ(0)" : "", 
    this.options.useTransition = c.hasTransition && this.options.useTransition, this.options.useTransform = c.hasTransform && this.options.useTransform, 
    this.options.eventPassthrough = this.options.eventPassthrough === !0 ? "vertical" : this.options.eventPassthrough, 
    this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault, 
    this.options.scrollY = "vertical" == this.options.eventPassthrough ? !1 : this.options.scrollY, 
    this.options.scrollX = "horizontal" == this.options.eventPassthrough ? !1 : this.options.scrollX, 
    this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough, 
    this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold, 
    this.options.bounceEasing = "string" == typeof this.options.bounceEasing ? c.ease[this.options.bounceEasing] || c.ease.circular : this.options.bounceEasing, 
    this.options.resizePolling = void 0 === this.options.resizePolling ? 60 : this.options.resizePolling, 
    this.options.tap === !0 && (this.options.tap = "tap"), "scale" == this.options.shrinkScrollbars && (this.options.useTransition = !1), 
    this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1, 
    this.x = 0, this.y = 0, this.directionX = 0, this.directionY = 0, this._events = {}, 
    this._init(), this.refresh(), this.scrollTo(this.options.startX, this.options.startY), 
    this.enable();
   }
   function o(t, e, i) {
    var r = n.createElement("div"), o = n.createElement("div");
    return i === !0 && (r.style.cssText = "position:absolute;z-index:9999", o.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px"), 
    o.className = "iScrollIndicator", "h" == t ? (i === !0 && (r.style.cssText += ";height:7px;left:2px;right:2px;bottom:0", 
    o.style.height = "100%"), r.className = "iScrollHorizontalScrollbar") : (i === !0 && (r.style.cssText += ";width:7px;bottom:2px;top:2px;right:1px", 
    o.style.width = "100%"), r.className = "iScrollVerticalScrollbar"), r.style.cssText += ";overflow:hidden", 
    e || (r.style.pointerEvents = "none"), r.appendChild(o), r;
   }
   function s(e, i) {
    this.wrapper = "string" == typeof i.el ? n.querySelector(i.el) : i.el, this.wrapperStyle = this.wrapper.style, 
    this.indicator = this.wrapper.children[0], this.indicatorStyle = this.indicator.style, 
    this.scroller = e, this.options = {
     listenX: !0,
     listenY: !0,
     interactive: !1,
     resize: !0,
     defaultScrollbars: !1,
     shrink: !1,
     fade: !1,
     speedRatioX: 0,
     speedRatioY: 0
    };
    for (var r in i) this.options[r] = i[r];
    this.sizeRatioX = 1, this.sizeRatioY = 1, this.maxPosX = 0, this.maxPosY = 0, this.options.interactive && (this.options.disableTouch || (c.addEvent(this.indicator, "touchstart", this), 
    c.addEvent(t, "touchend", this)), this.options.disablePointer || (c.addEvent(this.indicator, c.prefixPointerEvent("pointerdown"), this), 
    c.addEvent(t, c.prefixPointerEvent("pointerup"), this)), this.options.disableMouse || (c.addEvent(this.indicator, "mousedown", this), 
    c.addEvent(t, "mouseup", this))), this.options.fade && (this.wrapperStyle[c.style.transform] = this.scroller.translateZ, 
    this.wrapperStyle[c.style.transitionDuration] = c.isBadAndroid ? "0.001s" : "0ms", 
    this.wrapperStyle.opacity = "0");
   }
   var a = t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.oRequestAnimationFrame || t.msRequestAnimationFrame || function(e) {
    t.setTimeout(e, 1e3 / 60);
   }, c = function() {
    function e(t) {
     return s === !1 ? !1 : "" === s ? t : s + t.charAt(0).toUpperCase() + t.substr(1);
    }
    var r = {}, o = n.createElement("div").style, s = function() {
     for (var t, e = [ "t", "webkitT", "MozT", "msT", "OT" ], n = 0, i = e.length; i > n; n++) if (t = e[n] + "ransform", 
     t in o) return e[n].substr(0, e[n].length - 1);
     return !1;
    }();
    r.getTime = Date.now || function() {
     return new Date().getTime();
    }, r.extend = function(t, e) {
     for (var n in e) t[n] = e[n];
    }, r.addEvent = function(t, e, n, i) {
     t.addEventListener(e, n, !!i);
    }, r.removeEvent = function(t, e, n, i) {
     t.removeEventListener(e, n, !!i);
    }, r.prefixPointerEvent = function(e) {
     return t.MSPointerEvent ? "MSPointer" + e.charAt(9).toUpperCase() + e.substr(10) : e;
    }, r.momentum = function(t, e, n, r, o, s) {
     var a, c, u = t - e, l = i.abs(u) / n;
     return s = void 0 === s ? 6e-4 : s, a = t + l * l / (2 * s) * (0 > u ? -1 : 1), 
     c = l / s, r > a ? (a = o ? r - o / 2.5 * (l / 8) : r, u = i.abs(a - t), c = u / l) : a > 0 && (a = o ? o / 2.5 * (l / 8) : 0, 
     u = i.abs(t) + a, c = u / l), {
      destination: i.round(a),
      duration: c
     };
    };
    var a = e("transform");
    return r.extend(r, {
     hasTransform: a !== !1,
     hasPerspective: e("perspective") in o,
     hasTouch: "ontouchstart" in t,
     hasPointer: t.PointerEvent || t.MSPointerEvent,
     hasTransition: e("transition") in o
    }), r.isBadAndroid = /Android /.test(t.navigator.appVersion) && !/Chrome\/\d/.test(t.navigator.appVersion), 
    r.extend(r.style = {}, {
     transform: a,
     transitionTimingFunction: e("transitionTimingFunction"),
     transitionDuration: e("transitionDuration"),
     transitionDelay: e("transitionDelay"),
     transformOrigin: e("transformOrigin")
    }), r.hasClass = function(t, e) {
     var n = new RegExp("(^|\\s)" + e + "(\\s|$)");
     return n.test(t.className);
    }, r.addClass = function(t, e) {
     if (!r.hasClass(t, e)) {
      var n = t.className.split(" ");
      n.push(e), t.className = n.join(" ");
     }
    }, r.removeClass = function(t, e) {
     if (r.hasClass(t, e)) {
      var n = new RegExp("(^|\\s)" + e + "(\\s|$)", "g");
      t.className = t.className.replace(n, " ");
     }
    }, r.offset = function(t) {
     for (var e = -t.offsetLeft, n = -t.offsetTop; t = t.offsetParent; ) e -= t.offsetLeft, 
     n -= t.offsetTop;
     return {
      left: e,
      top: n
     };
    }, r.preventDefaultException = function(t, e) {
     if (t.getAttribute("ng-click")) return !0;
     for (var n in e) if (e[n].test(t[n])) return !0;
     return !1;
    }, r.extend(r.eventType = {}, {
     touchstart: 1,
     touchmove: 1,
     touchend: 1,
     mousedown: 2,
     mousemove: 2,
     mouseup: 2,
     pointerdown: 3,
     pointermove: 3,
     pointerup: 3,
     MSPointerDown: 3,
     MSPointerMove: 3,
     MSPointerUp: 3
    }), r.extend(r.ease = {}, {
     quadratic: {
      style: "cubic-bezier(0.25, 0.46, 0.45, 0.94)",
      fn: function(t) {
       return t * (2 - t);
      }
     },
     circular: {
      style: "cubic-bezier(0.1, 0.57, 0.1, 1)",
      fn: function(t) {
       return i.sqrt(1 - --t * t);
      }
     },
     back: {
      style: "cubic-bezier(0.175, 0.885, 0.32, 1.275)",
      fn: function(t) {
       var e = 4;
       return (t -= 1) * t * ((e + 1) * t + e) + 1;
      }
     },
     bounce: {
      style: "",
      fn: function(t) {
       return (t /= 1) < 1 / 2.75 ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
      }
     },
     elastic: {
      style: "",
      fn: function(t) {
       var e = .22, n = .4;
       return 0 === t ? 0 : 1 == t ? 1 : n * i.pow(2, -10 * t) * i.sin(2 * (t - e / 4) * i.PI / e) + 1;
      }
     }
    }), r.tap = function(t, e) {
     var i = n.createEvent("Event");
     i.initEvent(e, !0, !0), i.pageX = t.pageX, i.pageY = t.pageY, t.target.dispatchEvent(i);
    }, r.click = function(t) {
     var e, i = t.target;
     /(SELECT|INPUT|TEXTAREA)/i.test(i.tagName) || (e = n.createEvent("MouseEvents"), 
     e.initMouseEvent("click", !0, !0, t.view, 1, i.screenX, i.screenY, i.clientX, i.clientY, t.ctrlKey, t.altKey, t.shiftKey, t.metaKey, 0, null), 
     e._constructed = !0, i.dispatchEvent(e));
    }, r;
   }();
   r.prototype = {
    version: "5.1.3",
    _init: function() {
     this._initEvents(), (this.options.scrollbars || this.options.indicators) && this._initIndicators(), 
     this.options.mouseWheel && this._initWheel(), this.options.snap && this._initSnap(), 
     this.options.keyBindings && this._initKeys();
    },
    destroy: function() {
     this._initEvents(!0), this._execEvent("destroy");
    },
    _transitionEnd: function(t) {
     t.target == this.scroller && this.isInTransition && (this._transitionTime(), this.resetPosition(this.options.bounceTime) || (this.isInTransition = !1, 
     this._execEvent("scrollEnd")));
    },
    _start: function(t) {
     if (!(1 != c.eventType[t.type] && 0 !== t.button || !this.enabled || this.initiated && c.eventType[t.type] !== this.initiated)) {
      !this.options.preventDefault || c.isBadAndroid || c.preventDefaultException(t.target, this.options.preventDefaultException) || t.preventDefault();
      var e, n = t.touches ? t.touches[0] : t;
      this.initiated = c.eventType[t.type], this.moved = !1, this.distX = 0, this.distY = 0, 
      this.directionX = 0, this.directionY = 0, this.directionLocked = 0, this._transitionTime(), 
      this.startTime = c.getTime(), this.options.useTransition && this.isInTransition ? (this.isInTransition = !1, 
      e = this.getComputedPosition(), this._translate(i.round(e.x), i.round(e.y)), this._execEvent("scrollEnd")) : !this.options.useTransition && this.isAnimating && (this.isAnimating = !1, 
      this._execEvent("scrollEnd")), this.startX = this.x, this.startY = this.y, this.absStartX = this.x, 
      this.absStartY = this.y, this.pointX = n.pageX, this.pointY = n.pageY, this._execEvent("beforeScrollStart");
     }
    },
    _move: function(t) {
     if (this.enabled && c.eventType[t.type] === this.initiated) {
      this.options.preventDefault && t.preventDefault();
      var e, n, r, o, s = t.touches ? t.touches[0] : t, a = s.pageX - this.pointX, u = s.pageY - this.pointY, l = c.getTime();
      if (this.pointX = s.pageX, this.pointY = s.pageY, this.distX += a, this.distY += u, 
      r = i.abs(this.distX), o = i.abs(this.distY), !(l - this.endTime > 300 && 10 > r && 10 > o)) {
       if (this.directionLocked || this.options.freeScroll || (this.directionLocked = r > o + this.options.directionLockThreshold ? "h" : o >= r + this.options.directionLockThreshold ? "v" : "n"), 
       "h" == this.directionLocked) {
        if ("vertical" == this.options.eventPassthrough) t.preventDefault(); else if ("horizontal" == this.options.eventPassthrough) return void (this.initiated = !1);
        u = 0;
       } else if ("v" == this.directionLocked) {
        if ("horizontal" == this.options.eventPassthrough) t.preventDefault(); else if ("vertical" == this.options.eventPassthrough) return void (this.initiated = !1);
        a = 0;
       }
       a = this.hasHorizontalScroll ? a : 0, u = this.hasVerticalScroll ? u : 0, e = this.x + a, 
       n = this.y + u, (e > 0 || e < this.maxScrollX) && (e = this.options.bounce ? this.x + a / 3 : e > 0 ? 0 : this.maxScrollX), 
       (n > 0 || n < this.maxScrollY) && (n = this.options.bounce ? this.y + u / 3 : n > 0 ? 0 : this.maxScrollY), 
       this.directionX = a > 0 ? -1 : 0 > a ? 1 : 0, this.directionY = u > 0 ? -1 : 0 > u ? 1 : 0, 
       this.moved || this._execEvent("scrollStart"), this.moved = !0, this._translate(e, n), 
       l - this.startTime > 300 && (this.startTime = l, this.startX = this.x, this.startY = this.y);
      }
     }
    },
    _end: function(t) {
     if (this.enabled && c.eventType[t.type] === this.initiated) {
      this.options.preventDefault && !c.preventDefaultException(t.target, this.options.preventDefaultException) && t.preventDefault();
      var e, n, r = (t.changedTouches ? t.changedTouches[0] : t, c.getTime() - this.startTime), o = i.round(this.x), s = i.round(this.y), a = i.abs(o - this.startX), u = i.abs(s - this.startY), l = 0, h = "";
      if (this.isInTransition = 0, this.initiated = 0, this.endTime = c.getTime(), !this.resetPosition(this.options.bounceTime)) {
       if (this.scrollTo(o, s), !this.moved) return this.options.tap && c.tap(t, this.options.tap), 
       this.options.click && c.click(t), void this._execEvent("scrollCancel");
       if (this._events.flick && 200 > r && 100 > a && 100 > u) return void this._execEvent("flick");
       if (this.options.momentum && 300 > r && (e = this.hasHorizontalScroll ? c.momentum(this.x, this.startX, r, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {
        destination: o,
        duration: 0
       }, n = this.hasVerticalScroll ? c.momentum(this.y, this.startY, r, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {
        destination: s,
        duration: 0
       }, o = e.destination, s = n.destination, l = i.max(e.duration, n.duration), this.isInTransition = 1), 
       this.options.snap) {
        var p = this._nearestSnap(o, s);
        this.currentPage = p, l = this.options.snapSpeed || i.max(i.max(i.min(i.abs(o - p.x), 1e3), i.min(i.abs(s - p.y), 1e3)), 300), 
        o = p.x, s = p.y, this.directionX = 0, this.directionY = 0, h = this.options.bounceEasing;
       }
       return o != this.x || s != this.y ? ((o > 0 || o < this.maxScrollX || s > 0 || s < this.maxScrollY) && (h = c.ease.quadratic), 
       void this.scrollTo(o, s, l, h)) : void this._execEvent("scrollEnd");
      }
     }
    },
    _resize: function() {
     var t = this;
     clearTimeout(this.resizeTimeout), this.resizeTimeout = setTimeout(function() {
      t.refresh();
     }, this.options.resizePolling);
    },
    resetPosition: function(t) {
     var e = this.x, n = this.y;
     return t = t || 0, !this.hasHorizontalScroll || this.x > 0 ? e = 0 : this.x < this.maxScrollX && (e = this.maxScrollX), 
     !this.hasVerticalScroll || this.y > 0 ? n = 0 : this.y < this.maxScrollY && (n = this.maxScrollY), 
     e == this.x && n == this.y ? !1 : (this.scrollTo(e, n, t, this.options.bounceEasing), 
     !0);
    },
    disable: function() {
     this.enabled = !1;
    },
    enable: function() {
     this.enabled = !0;
    },
    refresh: function() {
     this.wrapper.offsetHeight;
     this.wrapperWidth = this.wrapper.clientWidth, this.wrapperHeight = this.wrapper.clientHeight, 
     this.scrollerWidth = this.scroller.offsetWidth, this.scrollerHeight = this.scroller.offsetHeight, 
     this.maxScrollX = this.wrapperWidth - this.scrollerWidth, this.maxScrollY = this.wrapperHeight - this.scrollerHeight, 
     this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0, this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0, 
     this.hasHorizontalScroll || (this.maxScrollX = 0, this.scrollerWidth = this.wrapperWidth), 
     this.hasVerticalScroll || (this.maxScrollY = 0, this.scrollerHeight = this.wrapperHeight), 
     this.endTime = 0, this.directionX = 0, this.directionY = 0, this.wrapperOffset = c.offset(this.wrapper), 
     this._execEvent("refresh"), this.resetPosition();
    },
    on: function(t, e) {
     this._events[t] || (this._events[t] = []), this._events[t].push(e);
    },
    off: function(t, e) {
     if (this._events[t]) {
      var n = this._events[t].indexOf(e);
      n > -1 && this._events[t].splice(n, 1);
     }
    },
    _execEvent: function(t) {
     if (this._events[t]) {
      var e = 0, n = this._events[t].length;
      if (n) for (;n > e; e++) this._events[t][e].apply(this, [].slice.call(arguments, 1));
     }
    },
    scrollBy: function(t, e, n, i) {
     t = this.x + t, e = this.y + e, n = n || 0, this.scrollTo(t, e, n, i);
    },
    scrollTo: function(t, e, n, i) {
     i = i || c.ease.circular, this.isInTransition = this.options.useTransition && n > 0, 
     !n || this.options.useTransition && i.style ? (this._transitionTimingFunction(i.style), 
     this._transitionTime(n), this._translate(t, e)) : this._animate(t, e, n, i.fn);
    },
    scrollToElement: function(t, e, n, r, o) {
     if (t = t.nodeType ? t : this.scroller.querySelector(t)) {
      var s = c.offset(t);
      s.left -= this.wrapperOffset.left, s.top -= this.wrapperOffset.top, n === !0 && (n = i.round(t.offsetWidth / 2 - this.wrapper.offsetWidth / 2)), 
      r === !0 && (r = i.round(t.offsetHeight / 2 - this.wrapper.offsetHeight / 2)), s.left -= n || 0, 
      s.top -= r || 0, s.left = s.left > 0 ? 0 : s.left < this.maxScrollX ? this.maxScrollX : s.left, 
      s.top = s.top > 0 ? 0 : s.top < this.maxScrollY ? this.maxScrollY : s.top, e = void 0 === e || null === e || "auto" === e ? i.max(i.abs(this.x - s.left), i.abs(this.y - s.top)) : e, 
      this.scrollTo(s.left, s.top, e, o);
     }
    },
    _transitionTime: function(t) {
     if (t = t || 0, this.scrollerStyle[c.style.transitionDuration] = t + "ms", !t && c.isBadAndroid && (this.scrollerStyle[c.style.transitionDuration] = "0.001s"), 
     this.indicators) for (var e = this.indicators.length; e--; ) this.indicators[e].transitionTime(t);
    },
    _transitionTimingFunction: function(t) {
     if (this.scrollerStyle[c.style.transitionTimingFunction] = t, this.indicators) for (var e = this.indicators.length; e--; ) this.indicators[e].transitionTimingFunction(t);
    },
    _translate: function(t, e) {
     if (this.options.useTransform ? this.scrollerStyle[c.style.transform] = "translate(" + t + "px," + e + "px)" + this.translateZ : (t = i.round(t), 
     e = i.round(e), this.scrollerStyle.left = t + "px", this.scrollerStyle.top = e + "px"), 
     this.x = t, this.y = e, this.indicators) for (var n = this.indicators.length; n--; ) this.indicators[n].updatePosition();
    },
    _initEvents: function(e) {
     var n = e ? c.removeEvent : c.addEvent, i = this.options.bindToWrapper ? this.wrapper : t;
     n(t, "orientationchange", this), n(t, "resize", this), this.options.click && n(this.wrapper, "click", this, !0), 
     this.options.disableMouse || (n(this.wrapper, "mousedown", this), n(i, "mousemove", this), 
     n(i, "mousecancel", this), n(i, "mouseup", this)), c.hasPointer && !this.options.disablePointer && (n(this.wrapper, c.prefixPointerEvent("pointerdown"), this), 
     n(i, c.prefixPointerEvent("pointermove"), this), n(i, c.prefixPointerEvent("pointercancel"), this), 
     n(i, c.prefixPointerEvent("pointerup"), this)), c.hasTouch && !this.options.disableTouch && (n(this.wrapper, "touchstart", this), 
     n(i, "touchmove", this), n(i, "touchcancel", this), n(i, "touchend", this)), n(this.scroller, "transitionend", this), 
     n(this.scroller, "webkitTransitionEnd", this), n(this.scroller, "oTransitionEnd", this), 
     n(this.scroller, "MSTransitionEnd", this);
    },
    getComputedPosition: function() {
     var e, n, i = t.getComputedStyle(this.scroller, null);
     return this.options.useTransform ? (i = i[c.style.transform].split(")")[0].split(", "), 
     e = +(i[12] || i[4]), n = +(i[13] || i[5])) : (e = +i.left.replace(/[^-\d.]/g, ""), 
     n = +i.top.replace(/[^-\d.]/g, "")), {
      x: e,
      y: n
     };
    },
    _initIndicators: function() {
     function t(t) {
      if (a.indicators) for (var e = a.indicators.length; e--; ) t.call(a.indicators[e]);
     }
     var e, n = this.options.interactiveScrollbars, i = "string" != typeof this.options.scrollbars, r = [], a = this;
     this.indicators = [], this.options.scrollbars && (this.options.scrollY && (e = {
      el: o("v", n, this.options.scrollbars),
      interactive: n,
      defaultScrollbars: !0,
      customStyle: i,
      resize: this.options.resizeScrollbars,
      shrink: this.options.shrinkScrollbars,
      fade: this.options.fadeScrollbars,
      listenX: !1
     }, this.wrapper.appendChild(e.el), r.push(e)), this.options.scrollX && (e = {
      el: o("h", n, this.options.scrollbars),
      interactive: n,
      defaultScrollbars: !0,
      customStyle: i,
      resize: this.options.resizeScrollbars,
      shrink: this.options.shrinkScrollbars,
      fade: this.options.fadeScrollbars,
      listenY: !1
     }, this.wrapper.appendChild(e.el), r.push(e))), this.options.indicators && (r = r.concat(this.options.indicators));
     for (var c = r.length; c--; ) this.indicators.push(new s(this, r[c]));
     this.options.fadeScrollbars && (this.on("scrollEnd", function() {
      t(function() {
       this.fade();
      });
     }), this.on("scrollCancel", function() {
      t(function() {
       this.fade();
      });
     }), this.on("scrollStart", function() {
      t(function() {
       this.fade(1);
      });
     }), this.on("beforeScrollStart", function() {
      t(function() {
       this.fade(1, !0);
      });
     })), this.on("refresh", function() {
      t(function() {
       this.refresh();
      });
     }), this.on("destroy", function() {
      t(function() {
       this.destroy();
      }), delete this.indicators;
     });
    },
    _initWheel: function() {
     c.addEvent(this.wrapper, "wheel", this), c.addEvent(this.wrapper, "mousewheel", this), 
     c.addEvent(this.wrapper, "DOMMouseScroll", this), this.on("destroy", function() {
      c.removeEvent(this.wrapper, "wheel", this), c.removeEvent(this.wrapper, "mousewheel", this), 
      c.removeEvent(this.wrapper, "DOMMouseScroll", this);
     });
    },
    _wheel: function(t) {
     if (this.enabled) {
      t.preventDefault(), t.stopPropagation();
      var e, n, r, o, s = this;
      if (void 0 === this.wheelTimeout && s._execEvent("scrollStart"), clearTimeout(this.wheelTimeout), 
      this.wheelTimeout = setTimeout(function() {
       s._execEvent("scrollEnd"), s.wheelTimeout = void 0;
      }, 400), "deltaX" in t) 1 === t.deltaMode ? (e = -t.deltaX * this.options.mouseWheelSpeed, 
      n = -t.deltaY * this.options.mouseWheelSpeed) : (e = -t.deltaX, n = -t.deltaY); else if ("wheelDeltaX" in t) e = t.wheelDeltaX / 120 * this.options.mouseWheelSpeed, 
      n = t.wheelDeltaY / 120 * this.options.mouseWheelSpeed; else if ("wheelDelta" in t) e = n = t.wheelDelta / 120 * this.options.mouseWheelSpeed; else {
       if (!("detail" in t)) return;
       e = n = -t.detail / 3 * this.options.mouseWheelSpeed;
      }
      if (e *= this.options.invertWheelDirection, n *= this.options.invertWheelDirection, 
      this.hasVerticalScroll || (e = n, n = 0), this.options.snap) return r = this.currentPage.pageX, 
      o = this.currentPage.pageY, e > 0 ? r-- : 0 > e && r++, n > 0 ? o-- : 0 > n && o++, 
      void this.goToPage(r, o);
      r = this.x + i.round(this.hasHorizontalScroll ? e : 0), o = this.y + i.round(this.hasVerticalScroll ? n : 0), 
      r > 0 ? r = 0 : r < this.maxScrollX && (r = this.maxScrollX), o > 0 ? o = 0 : o < this.maxScrollY && (o = this.maxScrollY), 
      this.scrollTo(r, o, 0);
     }
    },
    _initSnap: function() {
     this.currentPage = {}, "string" == typeof this.options.snap && (this.options.snap = this.scroller.querySelectorAll(this.options.snap)), 
     this.on("refresh", function() {
      var t, e, n, r, o, s, a = 0, c = 0, u = 0, l = this.options.snapStepX || this.wrapperWidth, h = this.options.snapStepY || this.wrapperHeight;
      if (this.pages = [], this.wrapperWidth && this.wrapperHeight && this.scrollerWidth && this.scrollerHeight) {
       if (this.options.snap === !0) for (n = i.round(l / 2), r = i.round(h / 2); u > -this.scrollerWidth; ) {
        for (this.pages[a] = [], t = 0, o = 0; o > -this.scrollerHeight; ) this.pages[a][t] = {
         x: i.max(u, this.maxScrollX),
         y: i.max(o, this.maxScrollY),
         width: l,
         height: h,
         cx: u - n,
         cy: o - r
        }, o -= h, t++;
        u -= l, a++;
       } else for (s = this.options.snap, t = s.length, e = -1; t > a; a++) (0 === a || s[a].offsetLeft <= s[a - 1].offsetLeft) && (c = 0, 
       e++), this.pages[c] || (this.pages[c] = []), u = i.max(-s[a].offsetLeft, this.maxScrollX), 
       o = i.max(-s[a].offsetTop, this.maxScrollY), n = u - i.round(s[a].offsetWidth / 2), 
       r = o - i.round(s[a].offsetHeight / 2), this.pages[c][e] = {
        x: u,
        y: o,
        width: s[a].offsetWidth,
        height: s[a].offsetHeight,
        cx: n,
        cy: r
       }, u > this.maxScrollX && c++;
       this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0), this.options.snapThreshold % 1 === 0 ? (this.snapThresholdX = this.options.snapThreshold, 
       this.snapThresholdY = this.options.snapThreshold) : (this.snapThresholdX = i.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold), 
       this.snapThresholdY = i.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold));
      }
     }), this.on("flick", function() {
      var t = this.options.snapSpeed || i.max(i.max(i.min(i.abs(this.x - this.startX), 1e3), i.min(i.abs(this.y - this.startY), 1e3)), 300);
      this.goToPage(this.currentPage.pageX + this.directionX, this.currentPage.pageY + this.directionY, t);
     });
    },
    _nearestSnap: function(t, e) {
     if (!this.pages.length) return {
      x: 0,
      y: 0,
      pageX: 0,
      pageY: 0
     };
     var n = 0, r = this.pages.length, o = 0;
     if (i.abs(t - this.absStartX) < this.snapThresholdX && i.abs(e - this.absStartY) < this.snapThresholdY) return this.currentPage;
     for (t > 0 ? t = 0 : t < this.maxScrollX && (t = this.maxScrollX), e > 0 ? e = 0 : e < this.maxScrollY && (e = this.maxScrollY); r > n; n++) if (t >= this.pages[n][0].cx) {
      t = this.pages[n][0].x;
      break;
     }
     for (r = this.pages[n].length; r > o; o++) if (e >= this.pages[0][o].cy) {
      e = this.pages[0][o].y;
      break;
     }
     return n == this.currentPage.pageX && (n += this.directionX, 0 > n ? n = 0 : n >= this.pages.length && (n = this.pages.length - 1), 
     t = this.pages[n][0].x), o == this.currentPage.pageY && (o += this.directionY, 0 > o ? o = 0 : o >= this.pages[0].length && (o = this.pages[0].length - 1), 
     e = this.pages[0][o].y), {
      x: t,
      y: e,
      pageX: n,
      pageY: o
     };
    },
    goToPage: function(t, e, n, r) {
     r = r || this.options.bounceEasing, t >= this.pages.length ? t = this.pages.length - 1 : 0 > t && (t = 0), 
     e >= this.pages[t].length ? e = this.pages[t].length - 1 : 0 > e && (e = 0);
     var o = this.pages[t][e].x, s = this.pages[t][e].y;
     n = void 0 === n ? this.options.snapSpeed || i.max(i.max(i.min(i.abs(o - this.x), 1e3), i.min(i.abs(s - this.y), 1e3)), 300) : n, 
     this.currentPage = {
      x: o,
      y: s,
      pageX: t,
      pageY: e
     }, this.scrollTo(o, s, n, r);
    },
    next: function(t, e) {
     var n = this.currentPage.pageX, i = this.currentPage.pageY;
     n++, n >= this.pages.length && this.hasVerticalScroll && (n = 0, i++), this.goToPage(n, i, t, e);
    },
    prev: function(t, e) {
     var n = this.currentPage.pageX, i = this.currentPage.pageY;
     n--, 0 > n && this.hasVerticalScroll && (n = 0, i--), this.goToPage(n, i, t, e);
    },
    _initKeys: function() {
     var e, n = {
      pageUp: 33,
      pageDown: 34,
      end: 35,
      home: 36,
      left: 37,
      up: 38,
      right: 39,
      down: 40
     };
     if ("object" == typeof this.options.keyBindings) for (e in this.options.keyBindings) "string" == typeof this.options.keyBindings[e] && (this.options.keyBindings[e] = this.options.keyBindings[e].toUpperCase().charCodeAt(0)); else this.options.keyBindings = {};
     for (e in n) this.options.keyBindings[e] = this.options.keyBindings[e] || n[e];
     c.addEvent(t, "keydown", this), this.on("destroy", function() {
      c.removeEvent(t, "keydown", this);
     });
    },
    _key: function(t) {
     if (this.enabled) {
      var e, n = this.options.snap, r = n ? this.currentPage.pageX : this.x, o = n ? this.currentPage.pageY : this.y, s = c.getTime(), a = this.keyTime || 0, u = .25;
      switch (this.options.useTransition && this.isInTransition && (e = this.getComputedPosition(), 
      this._translate(i.round(e.x), i.round(e.y)), this.isInTransition = !1), this.keyAcceleration = 200 > s - a ? i.min(this.keyAcceleration + u, 50) : 0, 
      t.keyCode) {
      case this.options.keyBindings.pageUp:
       this.hasHorizontalScroll && !this.hasVerticalScroll ? r += n ? 1 : this.wrapperWidth : o += n ? 1 : this.wrapperHeight;
       break;

      case this.options.keyBindings.pageDown:
       this.hasHorizontalScroll && !this.hasVerticalScroll ? r -= n ? 1 : this.wrapperWidth : o -= n ? 1 : this.wrapperHeight;
       break;

      case this.options.keyBindings.end:
       r = n ? this.pages.length - 1 : this.maxScrollX, o = n ? this.pages[0].length - 1 : this.maxScrollY;
       break;

      case this.options.keyBindings.home:
       r = 0, o = 0;
       break;

      case this.options.keyBindings.left:
       r += n ? -1 : 5 + this.keyAcceleration >> 0;
       break;

      case this.options.keyBindings.up:
       o += n ? 1 : 5 + this.keyAcceleration >> 0;
       break;

      case this.options.keyBindings.right:
       r -= n ? -1 : 5 + this.keyAcceleration >> 0;
       break;

      case this.options.keyBindings.down:
       o -= n ? 1 : 5 + this.keyAcceleration >> 0;
       break;

      default:
       return;
      }
      if (n) return void this.goToPage(r, o);
      r > 0 ? (r = 0, this.keyAcceleration = 0) : r < this.maxScrollX && (r = this.maxScrollX, 
      this.keyAcceleration = 0), o > 0 ? (o = 0, this.keyAcceleration = 0) : o < this.maxScrollY && (o = this.maxScrollY, 
      this.keyAcceleration = 0), this.scrollTo(r, o, 0), this.keyTime = s;
     }
    },
    _animate: function(t, e, n, i) {
     function r() {
      var p, f, d, v = c.getTime();
      return v >= h ? (o.isAnimating = !1, o._translate(t, e), void (o.resetPosition(o.options.bounceTime) || o._execEvent("scrollEnd"))) : (v = (v - l) / n, 
      d = i(v), p = (t - s) * d + s, f = (e - u) * d + u, o._translate(p, f), void (o.isAnimating && a(r)));
     }
     var o = this, s = this.x, u = this.y, l = c.getTime(), h = l + n;
     this.isAnimating = !0, r();
    },
    handleEvent: function(t) {
     switch (t.type) {
     case "touchstart":
     case "pointerdown":
     case "MSPointerDown":
     case "mousedown":
      this._start(t);
      break;

     case "touchmove":
     case "pointermove":
     case "MSPointerMove":
     case "mousemove":
      this._move(t);
      break;

     case "touchend":
     case "pointerup":
     case "MSPointerUp":
     case "mouseup":
     case "touchcancel":
     case "pointercancel":
     case "MSPointerCancel":
     case "mousecancel":
      this._end(t);
      break;

     case "orientationchange":
     case "resize":
      this._resize();
      break;

     case "transitionend":
     case "webkitTransitionEnd":
     case "oTransitionEnd":
     case "MSTransitionEnd":
      this._transitionEnd(t);
      break;

     case "wheel":
     case "DOMMouseScroll":
     case "mousewheel":
      this._wheel(t);
      break;

     case "keydown":
      this._key(t);
      break;

     case "click":
      t._constructed || (t.preventDefault(), t.stopPropagation());
     }
    }
   }, s.prototype = {
    handleEvent: function(t) {
     switch (t.type) {
     case "touchstart":
     case "pointerdown":
     case "MSPointerDown":
     case "mousedown":
      this._start(t);
      break;

     case "touchmove":
     case "pointermove":
     case "MSPointerMove":
     case "mousemove":
      this._move(t);
      break;

     case "touchend":
     case "pointerup":
     case "MSPointerUp":
     case "mouseup":
     case "touchcancel":
     case "pointercancel":
     case "MSPointerCancel":
     case "mousecancel":
      this._end(t);
     }
    },
    destroy: function() {
     this.options.interactive && (c.removeEvent(this.indicator, "touchstart", this), 
     c.removeEvent(this.indicator, c.prefixPointerEvent("pointerdown"), this), c.removeEvent(this.indicator, "mousedown", this), 
     c.removeEvent(t, "touchmove", this), c.removeEvent(t, c.prefixPointerEvent("pointermove"), this), 
     c.removeEvent(t, "mousemove", this), c.removeEvent(t, "touchend", this), c.removeEvent(t, c.prefixPointerEvent("pointerup"), this), 
     c.removeEvent(t, "mouseup", this)), this.options.defaultScrollbars && this.wrapper.parentNode.removeChild(this.wrapper);
    },
    _start: function(e) {
     var n = e.touches ? e.touches[0] : e;
     e.preventDefault(), e.stopPropagation(), this.transitionTime(), this.initiated = !0, 
     this.moved = !1, this.lastPointX = n.pageX, this.lastPointY = n.pageY, this.startTime = c.getTime(), 
     this.options.disableTouch || c.addEvent(t, "touchmove", this), this.options.disablePointer || c.addEvent(t, c.prefixPointerEvent("pointermove"), this), 
     this.options.disableMouse || c.addEvent(t, "mousemove", this), this.scroller._execEvent("beforeScrollStart");
    },
    _move: function(t) {
     {
      var e, n, i, r, o = t.touches ? t.touches[0] : t;
      c.getTime();
     }
     this.moved || this.scroller._execEvent("scrollStart"), this.moved = !0, e = o.pageX - this.lastPointX, 
     this.lastPointX = o.pageX, n = o.pageY - this.lastPointY, this.lastPointY = o.pageY, 
     i = this.x + e, r = this.y + n, this._pos(i, r), t.preventDefault(), t.stopPropagation();
    },
    _end: function(e) {
     if (this.initiated) {
      if (this.initiated = !1, e.preventDefault(), e.stopPropagation(), c.removeEvent(t, "touchmove", this), 
      c.removeEvent(t, c.prefixPointerEvent("pointermove"), this), c.removeEvent(t, "mousemove", this), 
      this.scroller.options.snap) {
       var n = this.scroller._nearestSnap(this.scroller.x, this.scroller.y), r = this.options.snapSpeed || i.max(i.max(i.min(i.abs(this.scroller.x - n.x), 1e3), i.min(i.abs(this.scroller.y - n.y), 1e3)), 300);
       (this.scroller.x != n.x || this.scroller.y != n.y) && (this.scroller.directionX = 0, 
       this.scroller.directionY = 0, this.scroller.currentPage = n, this.scroller.scrollTo(n.x, n.y, r, this.scroller.options.bounceEasing));
      }
      this.moved && this.scroller._execEvent("scrollEnd");
     }
    },
    transitionTime: function(t) {
     t = t || 0, this.indicatorStyle[c.style.transitionDuration] = t + "ms", !t && c.isBadAndroid && (this.indicatorStyle[c.style.transitionDuration] = "0.001s");
    },
    transitionTimingFunction: function(t) {
     this.indicatorStyle[c.style.transitionTimingFunction] = t;
    },
    refresh: function() {
     this.transitionTime(), this.indicatorStyle.display = this.options.listenX && !this.options.listenY ? this.scroller.hasHorizontalScroll ? "block" : "none" : this.options.listenY && !this.options.listenX ? this.scroller.hasVerticalScroll ? "block" : "none" : this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? "block" : "none", 
     this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ? (c.addClass(this.wrapper, "iScrollBothScrollbars"), 
     c.removeClass(this.wrapper, "iScrollLoneScrollbar"), this.options.defaultScrollbars && this.options.customStyle && (this.options.listenX ? this.wrapper.style.right = "8px" : this.wrapper.style.bottom = "8px")) : (c.removeClass(this.wrapper, "iScrollBothScrollbars"), 
     c.addClass(this.wrapper, "iScrollLoneScrollbar"), this.options.defaultScrollbars && this.options.customStyle && (this.options.listenX ? this.wrapper.style.right = "2px" : this.wrapper.style.bottom = "2px"));
     this.wrapper.offsetHeight;
     this.options.listenX && (this.wrapperWidth = this.wrapper.clientWidth, this.options.resize ? (this.indicatorWidth = i.max(i.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8), 
     this.indicatorStyle.width = this.indicatorWidth + "px") : this.indicatorWidth = this.indicator.clientWidth, 
     this.maxPosX = this.wrapperWidth - this.indicatorWidth, "clip" == this.options.shrink ? (this.minBoundaryX = -this.indicatorWidth + 8, 
     this.maxBoundaryX = this.wrapperWidth - 8) : (this.minBoundaryX = 0, this.maxBoundaryX = this.maxPosX), 
     this.sizeRatioX = this.options.speedRatioX || this.scroller.maxScrollX && this.maxPosX / this.scroller.maxScrollX), 
     this.options.listenY && (this.wrapperHeight = this.wrapper.clientHeight, this.options.resize ? (this.indicatorHeight = i.max(i.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8), 
     this.indicatorStyle.height = this.indicatorHeight + "px") : this.indicatorHeight = this.indicator.clientHeight, 
     this.maxPosY = this.wrapperHeight - this.indicatorHeight, "clip" == this.options.shrink ? (this.minBoundaryY = -this.indicatorHeight + 8, 
     this.maxBoundaryY = this.wrapperHeight - 8) : (this.minBoundaryY = 0, this.maxBoundaryY = this.maxPosY), 
     this.maxPosY = this.wrapperHeight - this.indicatorHeight, this.sizeRatioY = this.options.speedRatioY || this.scroller.maxScrollY && this.maxPosY / this.scroller.maxScrollY), 
     this.updatePosition();
    },
    updatePosition: function() {
     var t = this.options.listenX && i.round(this.sizeRatioX * this.scroller.x) || 0, e = this.options.listenY && i.round(this.sizeRatioY * this.scroller.y) || 0;
     this.options.ignoreBoundaries || (t < this.minBoundaryX ? ("scale" == this.options.shrink && (this.width = i.max(this.indicatorWidth + t, 8), 
     this.indicatorStyle.width = this.width + "px"), t = this.minBoundaryX) : t > this.maxBoundaryX ? "scale" == this.options.shrink ? (this.width = i.max(this.indicatorWidth - (t - this.maxPosX), 8), 
     this.indicatorStyle.width = this.width + "px", t = this.maxPosX + this.indicatorWidth - this.width) : t = this.maxBoundaryX : "scale" == this.options.shrink && this.width != this.indicatorWidth && (this.width = this.indicatorWidth, 
     this.indicatorStyle.width = this.width + "px"), e < this.minBoundaryY ? ("scale" == this.options.shrink && (this.height = i.max(this.indicatorHeight + 3 * e, 8), 
     this.indicatorStyle.height = this.height + "px"), e = this.minBoundaryY) : e > this.maxBoundaryY ? "scale" == this.options.shrink ? (this.height = i.max(this.indicatorHeight - 3 * (e - this.maxPosY), 8), 
     this.indicatorStyle.height = this.height + "px", e = this.maxPosY + this.indicatorHeight - this.height) : e = this.maxBoundaryY : "scale" == this.options.shrink && this.height != this.indicatorHeight && (this.height = this.indicatorHeight, 
     this.indicatorStyle.height = this.height + "px")), this.x = t, this.y = e, this.scroller.options.useTransform ? this.indicatorStyle[c.style.transform] = "translate(" + t + "px," + e + "px)" + this.scroller.translateZ : (this.indicatorStyle.left = t + "px", 
     this.indicatorStyle.top = e + "px");
    },
    _pos: function(t, e) {
     0 > t ? t = 0 : t > this.maxPosX && (t = this.maxPosX), 0 > e ? e = 0 : e > this.maxPosY && (e = this.maxPosY), 
     t = this.options.listenX ? i.round(t / this.sizeRatioX) : this.scroller.x, e = this.options.listenY ? i.round(e / this.sizeRatioY) : this.scroller.y, 
     this.scroller.scrollTo(t, e);
    },
    fade: function(t, e) {
     if (!e || this.visible) {
      clearTimeout(this.fadeTimeout), this.fadeTimeout = null;
      var n = t ? 250 : 500, i = t ? 0 : 300;
      t = t ? "1" : "0", this.wrapperStyle[c.style.transitionDuration] = n + "ms", this.fadeTimeout = setTimeout(function(t) {
       this.wrapperStyle.opacity = t, this.visible = +t;
      }.bind(this, t), i);
     }
    }
   }, r.utils = c, "undefined" != typeof e && e.exports ? e.exports = r : t.IScroll = r;
  }(window, document, Math);
 }, {} ],
 231: [ function(t, e, n) {
  !function(t, i) {
   "object" == typeof n ? e.exports = i() : "function" == typeof define && define.amd ? define(i) : t.printStackTrace = i();
  }(this, function() {
   function t(e) {
    e = e || {
     guess: !0
    };
    var n = e.e || null, i = !!e.guess, r = e.mode || null, o = new t.implementation(), s = o.run(n, r);
    return i ? o.guessAnonymousFunctions(s) : s;
   }
   return t.implementation = function() {}, t.implementation.prototype = {
    run: function(t, e) {
     return t = t || this.createException(), e = e || this.mode(t), "other" === e ? this.other(arguments.callee) : this[e](t);
    },
    createException: function() {
     try {
      this.undef();
     } catch (t) {
      return t;
     }
    },
    mode: function(t) {
     return "undefined" != typeof window && window.navigator.userAgent.indexOf("PhantomJS") > -1 ? "phantomjs" : t.arguments && t.stack ? "chrome" : t.stack && t.sourceURL ? "safari" : t.stack && t.number ? "ie" : t.stack && t.fileName ? "firefox" : t.message && t["opera#sourceloc"] ? t.stacktrace ? t.message.indexOf("\n") > -1 && t.message.split("\n").length > t.stacktrace.split("\n").length ? "opera9" : "opera10a" : "opera9" : t.message && t.stack && t.stacktrace ? t.stacktrace.indexOf("called from line") < 0 ? "opera10b" : "opera11" : t.stack && !t.fileName ? "chrome" : "other";
    },
    instrumentFunction: function(e, n, i) {
     e = e || window;
     var r = e[n];
     e[n] = function() {
      return i.call(this, t().slice(4)), e[n]._instrumented.apply(this, arguments);
     }, e[n]._instrumented = r;
    },
    deinstrumentFunction: function(t, e) {
     t[e].constructor === Function && t[e]._instrumented && t[e]._instrumented.constructor === Function && (t[e] = t[e]._instrumented);
    },
    chrome: function(t) {
     return (t.stack + "\n").replace(/^[\s\S]+?\s+at\s+/, " at ").replace(/^\s+(at eval )?at\s+/gm, "").replace(/^([^\(]+?)([\n$])/gm, "{anonymous}() ($1)$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, "{anonymous}() ($1)").replace(/^(.+) \((.+)\)$/gm, "$1@$2").split("\n").slice(0, -1);
    },
    safari: function(t) {
     return t.stack.replace(/\[native code\]\n/m, "").replace(/^(?=\w+Error\:).*$\n/m, "").replace(/^@/gm, "{anonymous}()@").split("\n");
    },
    ie: function(t) {
     return t.stack.replace(/^\s*at\s+(.*)$/gm, "$1").replace(/^Anonymous function\s+/gm, "{anonymous}() ").replace(/^(.+)\s+\((.+)\)$/gm, "$1@$2").split("\n").slice(1);
    },
    firefox: function(t) {
     return t.stack.replace(/(?:\n@:0)?\s+$/m, "").replace(/^(?:\((\S*)\))?@/gm, "{anonymous}($1)@").split("\n");
    },
    opera11: function(t) {
     for (var e = "{anonymous}", n = /^.*line (\d+), column (\d+)(?: in (.+))? in (\S+):$/, i = t.stacktrace.split("\n"), r = [], o = 0, s = i.length; s > o; o += 2) {
      var a = n.exec(i[o]);
      if (a) {
       var c = a[4] + ":" + a[1] + ":" + a[2], u = a[3] || "global code";
       u = u.replace(/<anonymous function: (\S+)>/, "$1").replace(/<anonymous function>/, e), 
       r.push(u + "@" + c + " -- " + i[o + 1].replace(/^\s+/, ""));
      }
     }
     return r;
    },
    opera10b: function(t) {
     for (var e = /^(.*)@(.+):(\d+)$/, n = t.stacktrace.split("\n"), i = [], r = 0, o = n.length; o > r; r++) {
      var s = e.exec(n[r]);
      if (s) {
       var a = s[1] ? s[1] + "()" : "global code";
       i.push(a + "@" + s[2] + ":" + s[3]);
      }
     }
     return i;
    },
    opera10a: function(t) {
     for (var e = "{anonymous}", n = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i, i = t.stacktrace.split("\n"), r = [], o = 0, s = i.length; s > o; o += 2) {
      var a = n.exec(i[o]);
      if (a) {
       var c = a[3] || e;
       r.push(c + "()@" + a[2] + ":" + a[1] + " -- " + i[o + 1].replace(/^\s+/, ""));
      }
     }
     return r;
    },
    opera9: function(t) {
     for (var e = "{anonymous}", n = /Line (\d+).*script (?:in )?(\S+)/i, i = t.message.split("\n"), r = [], o = 2, s = i.length; s > o; o += 2) {
      var a = n.exec(i[o]);
      a && r.push(e + "()@" + a[2] + ":" + a[1] + " -- " + i[o + 1].replace(/^\s+/, ""));
     }
     return r;
    },
    phantomjs: function(t) {
     for (var e = "{anonymous}", n = /(\S+) \((\S+)\)/i, i = t.stack.split("\n"), r = [], o = 1, s = i.length; s > o; o++) {
      i[o] = i[o].replace(/^\s+at\s+/gm, "");
      var a = n.exec(i[o]);
      r.push(a ? a[1] + "()@" + a[2] : e + "()@" + i[o]);
     }
     return r;
    },
    other: function(t) {
     for (var e, n, i = "{anonymous}", r = /function(?:\s+([\w$]+))?\s*\(/, o = [], s = 10, a = Array.prototype.slice; t && o.length < s; ) {
      e = r.test(t.toString()) ? RegExp.$1 || i : i;
      try {
       n = a.call(t.arguments || []);
      } catch (c) {
       n = [ "Cannot access arguments: " + c ];
      }
      o[o.length] = e + "(" + this.stringifyArguments(n) + ")";
      try {
       t = t.caller;
      } catch (c) {
       o[o.length] = "Cannot access caller: " + c;
       break;
      }
     }
     return o;
    },
    stringifyArguments: function(t) {
     for (var e = [], n = Array.prototype.slice, i = 0; i < t.length; ++i) {
      var r = t[i];
      void 0 === r ? e[i] = "undefined" : null === r ? e[i] = "null" : r.constructor && (e[i] = r.constructor === Array ? r.length < 3 ? "[" + this.stringifyArguments(r) + "]" : "[" + this.stringifyArguments(n.call(r, 0, 1)) + "..." + this.stringifyArguments(n.call(r, -1)) + "]" : r.constructor === Object ? "#object" : r.constructor === Function ? "#function" : r.constructor === String ? '"' + r + '"' : r.constructor === Number ? r : "?");
     }
     return e.join(",");
    },
    sourceCache: {},
    ajax: function(t) {
     var e = this.createXMLHTTPObject();
     if (e) try {
      return e.open("GET", t, !1), e.send(null), e.responseText;
     } catch (n) {}
     return "";
    },
    createXMLHTTPObject: function() {
     for (var t, e = [ function() {
      return new XMLHttpRequest();
     }, function() {
      return new ActiveXObject("Msxml2.XMLHTTP");
     }, function() {
      return new ActiveXObject("Msxml3.XMLHTTP");
     }, function() {
      return new ActiveXObject("Microsoft.XMLHTTP");
     } ], n = 0; n < e.length; n++) try {
      return t = e[n](), this.createXMLHTTPObject = e[n], t;
     } catch (i) {}
    },
    isSameDomain: function(t) {
     return "undefined" != typeof location && -1 !== t.indexOf(location.hostname);
    },
    getSource: function(t) {
     return t in this.sourceCache || (this.sourceCache[t] = this.ajax(t).split("\n")), 
     this.sourceCache[t];
    },
    guessAnonymousFunctions: function(t) {
     for (var e = 0; e < t.length; ++e) {
      var n = /\{anonymous\}\(.*\)@(.*)/, i = /^(.*?)(?::(\d+))(?::(\d+))?(?: -- .+)?$/, r = t[e], o = n.exec(r);
      if (o) {
       var s = i.exec(o[1]);
       if (s) {
        var a = s[1], c = s[2], u = s[3] || 0;
        if (a && this.isSameDomain(a) && c) {
         var l = this.guessAnonymousFunction(a, c, u);
         t[e] = r.replace("{anonymous}", l);
        }
       }
      }
     }
     return t;
    },
    guessAnonymousFunction: function(t, e) {
     var n;
     try {
      n = this.findFunctionName(this.getSource(t), e);
     } catch (i) {
      n = "getSource failed with url: " + t + ", exception: " + i.toString();
     }
     return n;
    },
    findFunctionName: function(t, e) {
     for (var n, i, r, o = /function\s+([^(]*?)\s*\(([^)]*)\)/, s = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/, a = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/, c = "", u = Math.min(e, 20), l = 0; u > l; ++l) if (n = t[e - l - 1], 
     r = n.indexOf("//"), r >= 0 && (n = n.substr(0, r)), n) {
      if (c = n + c, i = s.exec(c), i && i[1]) return i[1];
      if (i = o.exec(c), i && i[1]) return i[1];
      if (i = a.exec(c), i && i[1]) return i[1];
     }
     return "(?)";
    }
   }, t;
  });
 }, {} ],
 232: [ function(t, e) {
  e.exports = '<div class="shade">\n\n</div>\n\n<div\n	class="wrapper"\n	iscroll\n	iscroll-watch="[ \'bind\' ]"\n	center\n	center-watch="[ \'bind\' ]">\n	\n	<div class="content {{ ::contentClass }}" ng-transclude>\n\n	</div>\n</div>';
 }, {} ],
 233: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "mancala_game_over": "Game over",\n    "end_popup_button_return": "Return",\n    "end_popup_button_leave": "Leave"\n}');
 }, {} ],
 234: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "mancala_menu_home_title": "Hello!",\n    "mancala_menu_home_slogan": "Welcome to Mancala.",\n    "mancala_menu_sp_title": "Ready?",\n    "mancala_menu_sp_slogan": "Choose your flavour."\n}');
 }, {} ],
 235: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "mancala": "Mancala",\n    "players_2": "2 Players",\n\n    "mancala_menu_home_title": "Hello!",\n    "mancala_menu_home_slogan": "Welcome to Mancala.",\n    "mancala_menu_sp_title": "Ready?",\n    "mancala_menu_sp_slogan": "Choose your flavour.",\n\n    "opt_chain:mancala": "Mancala"\n}');
 }, {} ],
 236: [ function(t, e) {
  e.exports = e.exports = JSON.parse('{\n    "mancala_tutorial_title": "Tutorial"\n}');
 }, {} ],
 237: [ function(t, e) {
  e.exports = '<wa-popup\n	watch="[ \'players\' ]" class="mancala-dialog-end" outside-click="false">\n\n	<h5-header title="{{ ::\'mancala_game_over\' | lcze }}" on-back="back()"></h5-header>\n\n	<div class="players">\n		<div ng-repeat="player in players" class="player-row" divider-bottom="!$last">\n			<div class="left">\n				<div class="spacer"></div\n				><div class="name-wrapper">\n					<div class="name">{{ player.name }}</div>\n					<div ng-if="player.rating !== undefined" class="rating">{{ player.rating }} ({{ player.ratingChange }})</div>\n				</div\n				>\n			</div>\n\n			<div class="right">\n				<div class="spacer"></div\n				><div class="score-number">{{ player.score }}</div\n				><div class="score-icon"></div\n				><div ng-if="player.win" class="win"></div>\n			</div>\n		</div>\n	</div>\n\n	<div class="buttons">\n		<flat-button\n			ng-if="groomReturnSecs == -1"\n			value="{{ ::\'end_popup_button_leave\' | lcze }}"\n			ng-click="back()"\n			class="button-leave">\n		</flat-button>\n		<flat-button\n			ng-if="groomReturnSecs !== -1"\n			value="{{ ::\'end_popup_button_return\' | lcze }} ({{ groomReturnSecs }}s)"\n			ng-click="back()"\n			class="button-return">\n		</flat-button>\n	</div>\n</wa-popup>\n';
 }, {} ],
 238: [ function(t, e) {
  e.exports = '<div class="wrapper">\n	<div class="players-wrapper">\n		<div class="player player-1">\n			<div class="avatar"></div>\n\n			<div class="text-wrapper">\n				<div class="spacer"></div>\n				<div class="text">\n					<div class="name">\n						Player 1\n					</div>\n					<div class="score">\n						123\n					</div>\n				</div>\n			</div>\n\n			<div class="bar-bottom"></div>\n\n			<div class="notification">\n				<div class="icon"></div>\n				<div class="divider"></div>\n				<div class="content"></div>\n			</div>\n		</div>\n\n		<div class="player player-2">\n			<div class="avatar"></div>\n\n			<div class="text-wrapper">\n				<div class="spacer"></div>\n				<div class="text">\n					<div class="name">\n						Player 2\n					</div>\n					<div class="score">\n						123\n					</div>\n				</div>\n			</div>\n\n			<div class="bar-bottom"></div>\n		</div>\n	</div>\n\n	<!-- different render layers for: static board, moving stones, static shades -->\n	<div class="board-wrapper">\n		<div class="board">\n			<div class="bg"></div>\n			<div class="holes"></div>\n		</div>\n\n		<div class="stones"></div>\n\n		<div class="shades"></div>\n\n		<div class="hole-select-overlay" src=""></div>\n	</div>\n\n	<div class="buttons-wrapper">\n		<div class="button button-undo" fake-active></div>\n		<div class="button button-chat" fake-active></div>\n		<div class="button button-return" fake-active></div>\n	</div>\n\n	<div class="notification-wrapper"></div>\n\n	<!-- expand .wrapper around .board-wrapper, won\'t work with overflow: visible; -->\n	<div style="clear: both;"></div>\n</div>\n\n<h5-reconnect-popup\n	ng-if="groom.rejoinStatus !== 0">\n</h5-reconnect-popup>\n\n<h5-game-leave-popup\n	h5-game-leave>\n</h5-game-leave-popup>\n\n<mancala-end-dialog ng-if="result" result="result"></mancala-end-dialog>\n';
 }, {} ],
 239: [ function(t, e) {
  e.exports = '<wa-popup\n	class="mancala-tutorial-popup"\n	bind="{{ ts }}"\n	iscroll\n	content-class="mancala-tutorial">\n	\n	<h5-header\n		title="{{ \'mancala_tutorial_title\' | lcze }}"\n		on-back="back()"\n		gradient="false">\n	</h5-header>\n\n	<div class="hint">\n		<div class="descr">\n			Mancala is an ancient family of board games, and there are numerous variants. This is a version of the basic game, known as two-rank Mancala and also known as Kalah.\n		</div>\n	</div>\n\n	<div ng-repeat="hint in hints" class="hint">\n		<h3 ng-click="refresh()">{{ hint.title }}</h3>\n		<img ng-src="{{ \'res/mancala/tutorial/\' + hint.img }}" imageonload="refresh()">\n		<div class="descr">{{ hint.descr }}</div>\n	</div>\n</wa-popup>\n';
 }, {} ]
}, {}, [ 6 ]);