(function() {
  window.noZensmooth = true;
}
)();
(function() {
  var initializing = false
    , fnTest = /xyz/.test(function() {
      xyz;
  }) ? /\b_super\b/ : /.*/;
  this.Class = function() {}
  ;
  Class.extend = function(prop) {
      var _super = this.prototype;
      initializing = true;
      var prototype = new this();
      initializing = false;
      for (var name in prop) {
          prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) {
              return function() {
                  var tmp = this._super;
                  this._super = _super[name];
                  var ret = fn.apply(this, arguments);
                  this._super = tmp;
                  return ret;
              }
              ;
          }
          )(name, prop[name]) : prop[name];
      }
      function Class() {
          if (!initializing && this.init)
              this.init.apply(this, arguments);
      }
      Class.prototype = prototype;
      Class.prototype.constructor = Class;
      Class.extend = arguments.callee;
      return Class;
  }
  ;
}
)();
!function(t, n, e) {
  "use strict";
  "function" == typeof define && define.amd ? define(e) : "undefined" != typeof module && module.exports ? module.exports = e() : n.PubSub = e("PubSub", n)
}(0, this, function(t, n) {
  "use strict";
  function e(t, n, e) {
      var u;
      for (u in t)
          if (Object.prototype.hasOwnProperty.call(t, u) && n && !1 === n.call(e, t[u], u, t))
              return;
      return t
  }
  function u(t) {
      return function() {
          return this[t].apply(this, arguments)
      }
  }
  function r(t, n, e) {
      for (var u, r, i = t._pubsub_topics, o = i[n] ? i[n].slice(0) : [], s = 0, c = o.length; s < c; s += 1)
          r = o[s].token,
          (u = o[s]).callback(e, {
              name: n,
              token: r
          }),
          !0 === u.once && t.unsubscribe(r)
  }
  function i(t) {
      var n = Array.prototype.slice.call(t, 1);
      return n.length <= 1 ? n[0] : n
  }
  function o(t, n, e, u) {
      return !!t._pubsub_topics[n] && (u ? r(t, n, e) : setTimeout(function() {
          r(t, n, e)
      }, 0),
      !0)
  }
  function s() {
      return this instanceof s ? (this._pubsub_topics = {},
      this._pubsub_uid = -1,
      this) : new s
  }
  var c = (n || {})[t];
  return s.prototype.subscribe = function(t, n, e) {
      var u = this._pubsub_topics
        , r = this._pubsub_uid += 1
        , i = {};
      if ("function" != typeof n)
          throw new TypeError("When subscribing for an event, a callback function must be defined.");
      return u[t] || (u[t] = []),
      i.token = r,
      i.callback = n,
      i.once = !!e,
      u[t].push(i),
      r
  }
  ,
  s.prototype.subscribeOnce = function(t, n) {
      return this.subscribe(t, n, !0)
  }
  ,
  s.prototype.publish = function(t) {
      return o(this, t, i(arguments), !1)
  }
  ,
  s.prototype.publishSync = function(t) {
      return o(this, t, i(arguments), !0)
  }
  ,
  s.prototype.unsubscribe = function(t) {
      var n, e, u = this._pubsub_topics, r = !1;
      for (n in u)
          if (Object.prototype.hasOwnProperty.call(u, n) && u[n]) {
              for (e = u[n].length; e; ) {
                  if (e -= 1,
                  u[n][e].token === t)
                      return u[n].splice(e, 1),
                      0 === u[n].length && delete u[n],
                      t;
                  n === t && (u[n].splice(e, 1),
                  0 === u[n].length && delete u[n],
                  r = !0)
              }
              if (!0 === r)
                  return t
          }
      return !1
  }
  ,
  s.prototype.unsubscribeAll = function() {
      return this._pubsub_topics = {},
      this
  }
  ,
  s.prototype.hasSubscribers = function(t) {
      var n = this._pubsub_topics
        , u = !1;
      return null == t ? (e(n, function(t, n) {
          if (n)
              return u = !0,
              !1
      }),
      u) : Object.prototype.hasOwnProperty.call(n, t)
  }
  ,
  s.prototype.subscribers = function() {
      var t = {};
      return e(this._pubsub_topics, function(n, e) {
          t[e] = n.slice(0)
      }),
      t
  }
  ,
  s.prototype.subscribersByTopic = function(t) {
      return this._pubsub_topics[t] ? this._pubsub_topics[t].slice(0) : []
  }
  ,
  s.prototype.alias = function(t) {
      return e(t, function(n, e) {
          s.prototype[e] && (s.prototype[t[e]] = u(e))
      }),
      this
  }
  ,
  s.noConflict = function() {
      return n && (n[t] = c),
      s
  }
  ,
  s.version = "3.4.0",
  s
});
(function() {
  'use strict';
  var vendors = ['webkit', 'moz'];
  for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
      var vp = vendors[i];
      window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];
      window.cancelAnimationFrame = (window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame']);
  }
  if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
      var lastTime = 0;
      window.requestAnimationFrame = function(callback) {
          var now = +new Date;
          var nextTime = Math.max(lastTime + 16, now);
          return setTimeout(function() {
              callback(lastTime = nextTime);
          }, nextTime - now);
      }
      ;
      window.cancelAnimationFrame = clearTimeout;
  } else if (window.jQuery) {
      (function($) {
          var animating;
          function raf() {
              if (animating) {
                  requestAnimationFrame(raf);
                  $.fx.tick();
              }
          }
          $.fx.timer = function(timer) {
              if (timer() && $.timers.push(timer) && !animating) {
                  animating = true;
                  raf();
              }
          }
          ;
          $.fx.stop = function() {
              animating = false;
          }
          ;
      }(jQuery));
  }
  var hasPerformance = !!(window.performance && window.performance.now);
  if (!hasPerformance) {
      var rAF = window.requestAnimationFrame
        , startTime = +new Date;
      window.requestAnimationFrame = function(callback, element) {
          var wrapped = function(timestamp) {
              var performanceTimestamp = (timestamp < 1e12) ? timestamp : timestamp - startTime;
              return callback(performanceTimestamp);
          };
          rAF(wrapped, element);
      }
  }
}());
!function(n, e) {
  "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : n.updwn = e()
}(this, function() {
  var n = null
    , e = null
    , t = u()
    , i = t.x
    , r = t.y
    , o = [];
  function u() {
      return "undefined" == typeof window ? {} : {
          x: window.innerWidth,
          y: window.pageYOffset
      }
  }
  function f(n) {
      requestAnimationFrame(function() {
          for (var e = u(), t = e.x, f = e.y, d = 0; d < o.length; d++)
              o[d]({
                  y: f,
                  prevY: r,
                  x: t,
                  prevX: i
              }, n);
          r = f,
          i = t
      })
  }
  return function(t) {
      var i = t.speed;
      void 0 === i && (i = 20);
      var r = t.interval;
      void 0 === r && (r = 100);
      var u, d = null, p = 0, a = 0, s = [], l = [];
      return u = function(n, e) {
          var t = n.y
            , o = n.prevY;
          p = e.timeStamp - a,
          a = e.timeStamp;
          var u = (Math.abs(t - o) / p || 0) * r > i;
          if (t >= o && "down" !== d && u) {
              d = "down";
              for (var f = 0; f < l.length; f++)
                  l[f]()
          } else if (t <= o && "up" !== d && u) {
              d = "up";
              for (var v = 0; v < s.length; v++)
                  s[v]()
          }
      }
      ,
      n || window.addEventListener("scroll", f),
      e || window.addEventListener("resize", f),
      o.indexOf(u) < 0 && o.push(u),
      {
          up: function(n) {
              return s.indexOf(n) < 0 && s.push(n),
              function() {
                  return s.splice(s.indexOf(n), 1)
              }
          },
          down: function(n) {
              return l.indexOf(n) < 0 && l.push(n),
              function() {
                  return l.splice(l.indexOf(n), 1)
              }
          },
          get position() {
              return d
          }
      }
  }
});
!function(i) {
  "use strict";
  "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery)
}(function(i) {
  "use strict";
  var e = window.Slick || {};
  (e = function() {
      var e = 0;
      return function(t, o) {
          var s, n = this;
          n.defaults = {
              accessibility: !0,
              adaptiveHeight: !1,
              appendArrows: i(t),
              appendDots: i(t),
              arrows: !0,
              asNavFor: null,
              prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
              nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
              autoplay: !1,
              autoplaySpeed: 3e3,
              centerMode: !1,
              centerPadding: "50px",
              cssEase: "ease",
              customPaging: function(e, t) {
                  return i('<button type="button" />').text(t + 1)
              },
              dots: !1,
              dotsClass: "slick-dots",
              draggable: !0,
              easing: "linear",
              edgeFriction: .35,
              fade: !1,
              focusOnSelect: !1,
              focusOnChange: !1,
              infinite: !0,
              initialSlide: 0,
              lazyLoad: "ondemand",
              mobileFirst: !1,
              pauseOnHover: !0,
              pauseOnFocus: !0,
              pauseOnDotsHover: !1,
              respondTo: "window",
              responsive: null,
              rows: 1,
              rtl: !1,
              slide: "",
              slidesPerRow: 1,
              slidesToShow: 1,
              slidesToScroll: 1,
              speed: 500,
              swipe: !0,
              swipeToSlide: !1,
              touchMove: !0,
              touchThreshold: 5,
              useCSS: !0,
              useTransform: !0,
              variableWidth: !1,
              vertical: !1,
              verticalSwiping: !1,
              waitForAnimate: !0,
              zIndex: 1e3
          },
          n.initials = {
              animating: !1,
              dragging: !1,
              autoPlayTimer: null,
              currentDirection: 0,
              currentLeft: null,
              currentSlide: 0,
              direction: 1,
              $dots: null,
              listWidth: null,
              listHeight: null,
              loadIndex: 0,
              $nextArrow: null,
              $prevArrow: null,
              scrolling: !1,
              slideCount: null,
              slideWidth: null,
              $slideTrack: null,
              $slides: null,
              sliding: !1,
              slideOffset: 0,
              swipeLeft: null,
              swiping: !1,
              $list: null,
              touchObject: {},
              transformsEnabled: !1,
              unslicked: !1
          },
          i.extend(n, n.initials),
          n.activeBreakpoint = null,
          n.animType = null,
          n.animProp = null,
          n.breakpoints = [],
          n.breakpointSettings = [],
          n.cssTransitions = !1,
          n.focussed = !1,
          n.interrupted = !1,
          n.hidden = "hidden",
          n.paused = !0,
          n.positionProp = null,
          n.respondTo = null,
          n.rowCount = 1,
          n.shouldClick = !0,
          n.$slider = i(t),
          n.$slidesCache = null,
          n.transformType = null,
          n.transitionType = null,
          n.visibilityChange = "visibilitychange",
          n.windowWidth = 0,
          n.windowTimer = null,
          s = i(t).data("slick") || {},
          n.options = i.extend({}, n.defaults, o, s),
          n.currentSlide = n.options.initialSlide,
          n.originalSettings = n.options,
          void 0 !== document.mozHidden ? (n.hidden = "mozHidden",
          n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden",
          n.visibilityChange = "webkitvisibilitychange"),
          n.autoPlay = i.proxy(n.autoPlay, n),
          n.autoPlayClear = i.proxy(n.autoPlayClear, n),
          n.autoPlayIterator = i.proxy(n.autoPlayIterator, n),
          n.changeSlide = i.proxy(n.changeSlide, n),
          n.clickHandler = i.proxy(n.clickHandler, n),
          n.selectHandler = i.proxy(n.selectHandler, n),
          n.setPosition = i.proxy(n.setPosition, n),
          n.swipeHandler = i.proxy(n.swipeHandler, n),
          n.dragHandler = i.proxy(n.dragHandler, n),
          n.keyHandler = i.proxy(n.keyHandler, n),
          n.instanceUid = e++,
          n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/,
          n.registerBreakpoints(),
          n.init(!0)
      }
  }()).prototype.activateADA = function() {
      this.$slideTrack.find(".slick-active").attr({
          "aria-hidden": "false"
      }).find("a, input, button, select").attr({
          tabindex: "0"
      })
  }
  ,
  e.prototype.addSlide = e.prototype.slickAdd = function(e, t, o) {
      var s = this;
      if ("boolean" == typeof t)
          o = t,
          t = null;
      else if (t < 0 || t >= s.slideCount)
          return !1;
      s.unload(),
      "number" == typeof t ? 0 === t && 0 === s.$slides.length ? i(e).appendTo(s.$slideTrack) : o ? i(e).insertBefore(s.$slides.eq(t)) : i(e).insertAfter(s.$slides.eq(t)) : !0 === o ? i(e).prependTo(s.$slideTrack) : i(e).appendTo(s.$slideTrack),
      s.$slides = s.$slideTrack.children(this.options.slide),
      s.$slideTrack.children(this.options.slide).detach(),
      s.$slideTrack.append(s.$slides),
      s.$slides.each(function(e, t) {
          i(t).attr("data-slick-index", e)
      }),
      s.$slidesCache = s.$slides,
      s.reinit()
  }
  ,
  e.prototype.animateHeight = function() {
      var i = this;
      if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) {
          var e = i.$slides.eq(i.currentSlide).outerHeight(!0);
          i.$list.animate({
              height: e
          }, i.options.speed)
      }
  }
  ,
  e.prototype.animateSlide = function(e, t) {
      var o = {}
        , s = this;
      s.animateHeight(),
      !0 === s.options.rtl && !1 === s.options.vertical && (e = -e),
      !1 === s.transformsEnabled ? !1 === s.options.vertical ? s.$slideTrack.animate({
          left: e
      }, s.options.speed, s.options.easing, t) : s.$slideTrack.animate({
          top: e
      }, s.options.speed, s.options.easing, t) : !1 === s.cssTransitions ? (!0 === s.options.rtl && (s.currentLeft = -s.currentLeft),
      i({
          animStart: s.currentLeft
      }).animate({
          animStart: e
      }, {
          duration: s.options.speed,
          easing: s.options.easing,
          step: function(i) {
              i = Math.ceil(i),
              !1 === s.options.vertical ? (o[s.animType] = "translate(" + i + "px, 0px)",
              s.$slideTrack.css(o)) : (o[s.animType] = "translate(0px," + i + "px)",
              s.$slideTrack.css(o))
          },
          complete: function() {
              t && t.call()
          }
      })) : (s.applyTransition(),
      e = Math.ceil(e),
      !1 === s.options.vertical ? o[s.animType] = "translate3d(" + e + "px, 0px, 0px)" : o[s.animType] = "translate3d(0px," + e + "px, 0px)",
      s.$slideTrack.css(o),
      t && setTimeout(function() {
          s.disableTransition(),
          t.call()
      }, s.options.speed))
  }
  ,
  e.prototype.getNavTarget = function() {
      var e = this
        , t = e.options.asNavFor;
      return t && null !== t && (t = i(t).not(e.$slider)),
      t
  }
  ,
  e.prototype.asNavFor = function(e) {
      var t = this.getNavTarget();
      null !== t && "object" == typeof t && t.each(function() {
          var t = i(this).slick("getSlick");
          t.unslicked || t.slideHandler(e, !0)
      })
  }
  ,
  e.prototype.applyTransition = function(i) {
      var e = this
        , t = {};
      !1 === e.options.fade ? t[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : t[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase,
      !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t)
  }
  ,
  e.prototype.autoPlay = function() {
      var i = this;
      i.autoPlayClear(),
      i.slideCount > i.options.slidesToShow && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed))
  }
  ,
  e.prototype.autoPlayClear = function() {
      var i = this;
      i.autoPlayTimer && clearInterval(i.autoPlayTimer)
  }
  ,
  e.prototype.autoPlayIterator = function() {
      var i = this
        , e = i.currentSlide + i.options.slidesToScroll;
      i.paused || i.interrupted || i.focussed || (!1 === i.options.infinite && (1 === i.direction && i.currentSlide + 1 === i.slideCount - 1 ? i.direction = 0 : 0 === i.direction && (e = i.currentSlide - i.options.slidesToScroll,
      i.currentSlide - 1 == 0 && (i.direction = 1))),
      i.slideHandler(e))
  }
  ,
  e.prototype.buildArrows = function() {
      var e = this;
      !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"),
      e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"),
      e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),
      e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),
      e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows),
      e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows),
      !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({
          "aria-disabled": "true",
          tabindex: "-1"
      }))
  }
  ,
  e.prototype.buildDots = function() {
      var e, t, o = this;
      if (!0 === o.options.dots) {
          for (o.$slider.addClass("slick-dotted"),
          t = i("<ul />").addClass(o.options.dotsClass),
          e = 0; e <= o.getDotCount(); e += 1)
              t.append(i("<li />").append(o.options.customPaging.call(this, o, e)));
          o.$dots = t.appendTo(o.options.appendDots),
          o.$dots.find("li").first().addClass("slick-active")
      }
  }
  ,
  e.prototype.buildOut = function() {
      var e = this;
      e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"),
      e.slideCount = e.$slides.length,
      e.$slides.each(function(e, t) {
          i(t).attr("data-slick-index", e).data("originalStyling", i(t).attr("style") || "")
      }),
      e.$slider.addClass("slick-slider"),
      e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(),
      e.$list = e.$slideTrack.wrap('<div class="slick-list"/>').parent(),
      e.$slideTrack.css("opacity", 0),
      !0 !== e.options.centerMode && !0 !== e.options.swipeToSlide || (e.options.slidesToScroll = 1),
      i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"),
      e.setupInfinite(),
      e.buildArrows(),
      e.buildDots(),
      e.updateDots(),
      e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0),
      !0 === e.options.draggable && e.$list.addClass("draggable")
  }
  ,
  e.prototype.buildRows = function() {
      var i, e, t, o, s, n, r, l = this;
      if (o = document.createDocumentFragment(),
      n = l.$slider.children(),
      l.options.rows > 1) {
          for (r = l.options.slidesPerRow * l.options.rows,
          s = Math.ceil(n.length / r),
          i = 0; i < s; i++) {
              var d = document.createElement("div");
              for (e = 0; e < l.options.rows; e++) {
                  var a = document.createElement("div");
                  for (t = 0; t < l.options.slidesPerRow; t++) {
                      var c = i * r + (e * l.options.slidesPerRow + t);
                      n.get(c) && a.appendChild(n.get(c))
                  }
                  d.appendChild(a)
              }
              o.appendChild(d)
          }
          l.$slider.empty().append(o),
          l.$slider.children().children().children().css({
              width: 100 / l.options.slidesPerRow + "%",
              display: "inline-block"
          })
      }
  }
  ,
  e.prototype.checkResponsive = function(e, t) {
      var o, s, n, r = this, l = !1, d = r.$slider.width(), a = window.innerWidth || i(window).width();
      if ("window" === r.respondTo ? n = a : "slider" === r.respondTo ? n = d : "min" === r.respondTo && (n = Math.min(a, d)),
      r.options.responsive && r.options.responsive.length && null !== r.options.responsive) {
          s = null;
          for (o in r.breakpoints)
              r.breakpoints.hasOwnProperty(o) && (!1 === r.originalSettings.mobileFirst ? n < r.breakpoints[o] && (s = r.breakpoints[o]) : n > r.breakpoints[o] && (s = r.breakpoints[o]));
          null !== s ? null !== r.activeBreakpoint ? (s !== r.activeBreakpoint || t) && (r.activeBreakpoint = s,
          "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]),
          !0 === e && (r.currentSlide = r.options.initialSlide),
          r.refresh(e)),
          l = s) : (r.activeBreakpoint = s,
          "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]),
          !0 === e && (r.currentSlide = r.options.initialSlide),
          r.refresh(e)),
          l = s) : null !== r.activeBreakpoint && (r.activeBreakpoint = null,
          r.options = r.originalSettings,
          !0 === e && (r.currentSlide = r.options.initialSlide),
          r.refresh(e),
          l = s),
          e || !1 === l || r.$slider.trigger("breakpoint", [r, l])
      }
  }
  ,
  e.prototype.changeSlide = function(e, t) {
      var o, s, n, r = this, l = i(e.currentTarget);
      switch (l.is("a") && e.preventDefault(),
      l.is("li") || (l = l.closest("li")),
      n = r.slideCount % r.options.slidesToScroll != 0,
      o = n ? 0 : (r.slideCount - r.currentSlide) % r.options.slidesToScroll,
      e.data.message) {
      case "previous":
          s = 0 === o ? r.options.slidesToScroll : r.options.slidesToShow - o,
          r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide - s, !1, t);
          break;
      case "next":
          s = 0 === o ? r.options.slidesToScroll : o,
          r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide + s, !1, t);
          break;
      case "index":
          var d = 0 === e.data.index ? 0 : e.data.index || l.index() * r.options.slidesToScroll;
          r.slideHandler(r.checkNavigable(d), !1, t),
          l.children().trigger("focus");
          break;
      default:
          return
      }
  }
  ,
  e.prototype.checkNavigable = function(i) {
      var e, t;
      if (e = this.getNavigableIndexes(),
      t = 0,
      i > e[e.length - 1])
          i = e[e.length - 1];
      else
          for (var o in e) {
              if (i < e[o]) {
                  i = t;
                  break
              }
              t = e[o]
          }
      return i
  }
  ,
  e.prototype.cleanUpEvents = function() {
      var e = this;
      e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide).off("mouseenter.slick", i.proxy(e.interrupt, e, !0)).off("mouseleave.slick", i.proxy(e.interrupt, e, !1)),
      !0 === e.options.accessibility && e.$dots.off("keydown.slick", e.keyHandler)),
      e.$slider.off("focus.slick blur.slick"),
      !0 === e.options.arrows && e.slideCount > e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide),
      e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide),
      !0 === e.options.accessibility && (e.$prevArrow && e.$prevArrow.off("keydown.slick", e.keyHandler),
      e.$nextArrow && e.$nextArrow.off("keydown.slick", e.keyHandler))),
      e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler),
      e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler),
      e.$list.off("touchend.slick mouseup.slick", e.swipeHandler),
      e.$list.off("touchcancel.slick mouseleave.slick", e.swipeHandler),
      e.$list.off("click.slick", e.clickHandler),
      i(document).off(e.visibilityChange, e.visibility),
      e.cleanUpSlideEvents(),
      !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler),
      !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler),
      i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange),
      i(window).off("resize.slick.slick-" + e.instanceUid, e.resize),
      i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault),
      i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition)
  }
  ,
  e.prototype.cleanUpSlideEvents = function() {
      var e = this;
      e.$list.off("mouseenter.slick", i.proxy(e.interrupt, e, !0)),
      e.$list.off("mouseleave.slick", i.proxy(e.interrupt, e, !1))
  }
  ,
  e.prototype.cleanUpRows = function() {
      var i, e = this;
      e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"),
      e.$slider.empty().append(i))
  }
  ,
  e.prototype.clickHandler = function(i) {
      !1 === this.shouldClick && (i.stopImmediatePropagation(),
      i.stopPropagation(),
      i.preventDefault())
  }
  ,
  e.prototype.destroy = function(e) {
      var t = this;
      t.autoPlayClear(),
      t.touchObject = {},
      t.cleanUpEvents(),
      i(".slick-cloned", t.$slider).detach(),
      t.$dots && t.$dots.remove(),
      t.$prevArrow && t.$prevArrow.length && (t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""),
      t.htmlExpr.test(t.options.prevArrow) && t.$prevArrow.remove()),
      t.$nextArrow && t.$nextArrow.length && (t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""),
      t.htmlExpr.test(t.options.nextArrow) && t.$nextArrow.remove()),
      t.$slides && (t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function() {
          i(this).attr("style", i(this).data("originalStyling"))
      }),
      t.$slideTrack.children(this.options.slide).detach(),
      t.$slideTrack.detach(),
      t.$list.detach(),
      t.$slider.append(t.$slides)),
      t.cleanUpRows(),
      t.$slider.removeClass("slick-slider"),
      t.$slider.removeClass("slick-initialized"),
      t.$slider.removeClass("slick-dotted"),
      t.unslicked = !0,
      e || t.$slider.trigger("destroy", [t])
  }
  ,
  e.prototype.disableTransition = function(i) {
      var e = this
        , t = {};
      t[e.transitionType] = "",
      !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t)
  }
  ,
  e.prototype.fadeSlide = function(i, e) {
      var t = this;
      !1 === t.cssTransitions ? (t.$slides.eq(i).css({
          zIndex: t.options.zIndex
      }),
      t.$slides.eq(i).animate({
          opacity: 1
      }, t.options.speed, t.options.easing, e)) : (t.applyTransition(i),
      t.$slides.eq(i).css({
          opacity: 1,
          zIndex: t.options.zIndex
      }),
      e && setTimeout(function() {
          t.disableTransition(i),
          e.call()
      }, t.options.speed))
  }
  ,
  e.prototype.fadeSlideOut = function(i) {
      var e = this;
      !1 === e.cssTransitions ? e.$slides.eq(i).animate({
          opacity: 0,
          zIndex: e.options.zIndex - 2
      }, e.options.speed, e.options.easing) : (e.applyTransition(i),
      e.$slides.eq(i).css({
          opacity: 0,
          zIndex: e.options.zIndex - 2
      }))
  }
  ,
  e.prototype.filterSlides = e.prototype.slickFilter = function(i) {
      var e = this;
      null !== i && (e.$slidesCache = e.$slides,
      e.unload(),
      e.$slideTrack.children(this.options.slide).detach(),
      e.$slidesCache.filter(i).appendTo(e.$slideTrack),
      e.reinit())
  }
  ,
  e.prototype.focusHandler = function() {
      var e = this;
      e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function(t) {
          t.stopImmediatePropagation();
          var o = i(this);
          setTimeout(function() {
              e.options.pauseOnFocus && (e.focussed = o.is(":focus"),
              e.autoPlay())
          }, 0)
      })
  }
  ,
  e.prototype.getCurrent = e.prototype.slickCurrentSlide = function() {
      return this.currentSlide
  }
  ,
  e.prototype.getDotCount = function() {
      var i = this
        , e = 0
        , t = 0
        , o = 0;
      if (!0 === i.options.infinite)
          if (i.slideCount <= i.options.slidesToShow)
              ++o;
          else
              for (; e < i.slideCount; )
                  ++o,
                  e = t + i.options.slidesToScroll,
                  t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow;
      else if (!0 === i.options.centerMode)
          o = i.slideCount;
      else if (i.options.asNavFor)
          for (; e < i.slideCount; )
              ++o,
              e = t + i.options.slidesToScroll,
              t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow;
      else
          o = 1 + Math.ceil((i.slideCount - i.options.slidesToShow) / i.options.slidesToScroll);
      return o - 1
  }
  ,
  e.prototype.getLeft = function(i) {
      var e, t, o, s, n = this, r = 0;
      return n.slideOffset = 0,
      t = n.$slides.first().outerHeight(!0),
      !0 === n.options.infinite ? (n.slideCount > n.options.slidesToShow && (n.slideOffset = n.slideWidth * n.options.slidesToShow * -1,
      s = -1,
      !0 === n.options.vertical && !0 === n.options.centerMode && (2 === n.options.slidesToShow ? s = -1.5 : 1 === n.options.slidesToShow && (s = -2)),
      r = t * n.options.slidesToShow * s),
      n.slideCount % n.options.slidesToScroll != 0 && i + n.options.slidesToScroll > n.slideCount && n.slideCount > n.options.slidesToShow && (i > n.slideCount ? (n.slideOffset = (n.options.slidesToShow - (i - n.slideCount)) * n.slideWidth * -1,
      r = (n.options.slidesToShow - (i - n.slideCount)) * t * -1) : (n.slideOffset = n.slideCount % n.options.slidesToScroll * n.slideWidth * -1,
      r = n.slideCount % n.options.slidesToScroll * t * -1))) : i + n.options.slidesToShow > n.slideCount && (n.slideOffset = (i + n.options.slidesToShow - n.slideCount) * n.slideWidth,
      r = (i + n.options.slidesToShow - n.slideCount) * t),
      n.slideCount <= n.options.slidesToShow && (n.slideOffset = 0,
      r = 0),
      !0 === n.options.centerMode && n.slideCount <= n.options.slidesToShow ? n.slideOffset = n.slideWidth * Math.floor(n.options.slidesToShow) / 2 - n.slideWidth * n.slideCount / 2 : !0 === n.options.centerMode && !0 === n.options.infinite ? n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2) - n.slideWidth : !0 === n.options.centerMode && (n.slideOffset = 0,
      n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2)),
      e = !1 === n.options.vertical ? i * n.slideWidth * -1 + n.slideOffset : i * t * -1 + r,
      !0 === n.options.variableWidth && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow),
      e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0,
      !0 === n.options.centerMode && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow + 1),
      e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0,
      e += (n.$list.width() - o.outerWidth()) / 2)),
      e
  }
  ,
  e.prototype.getOption = e.prototype.slickGetOption = function(i) {
      return this.options[i]
  }
  ,
  e.prototype.getNavigableIndexes = function() {
      var i, e = this, t = 0, o = 0, s = [];
      for (!1 === e.options.infinite ? i = e.slideCount : (t = -1 * e.options.slidesToScroll,
      o = -1 * e.options.slidesToScroll,
      i = 2 * e.slideCount); t < i; )
          s.push(t),
          t = o + e.options.slidesToScroll,
          o += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow;
      return s
  }
  ,
  e.prototype.getSlick = function() {
      return this
  }
  ,
  e.prototype.getSlideCount = function() {
      var e, t, o = this;
      return t = !0 === o.options.centerMode ? o.slideWidth * Math.floor(o.options.slidesToShow / 2) : 0,
      !0 === o.options.swipeToSlide ? (o.$slideTrack.find(".slick-slide").each(function(s, n) {
          if (n.offsetLeft - t + i(n).outerWidth() / 2 > -1 * o.swipeLeft)
              return e = n,
              !1
      }),
      Math.abs(i(e).attr("data-slick-index") - o.currentSlide) || 1) : o.options.slidesToScroll
  }
  ,
  e.prototype.goTo = e.prototype.slickGoTo = function(i, e) {
      this.changeSlide({
          data: {
              message: "index",
              index: parseInt(i)
          }
      }, e)
  }
  ,
  e.prototype.init = function(e) {
      var t = this;
      i(t.$slider).hasClass("slick-initialized") || (i(t.$slider).addClass("slick-initialized"),
      t.buildRows(),
      t.buildOut(),
      t.setProps(),
      t.startLoad(),
      t.loadSlider(),
      t.initializeEvents(),
      t.updateArrows(),
      t.updateDots(),
      t.checkResponsive(!0),
      t.focusHandler()),
      e && t.$slider.trigger("init", [t]),
      !0 === t.options.accessibility && t.initADA(),
      t.options.autoplay && (t.paused = !1,
      t.autoPlay())
  }
  ,
  e.prototype.initADA = function() {
      var e = this
        , t = Math.ceil(e.slideCount / e.options.slidesToShow)
        , o = e.getNavigableIndexes().filter(function(i) {
          return i >= 0 && i < e.slideCount
      });
      e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({
          "aria-hidden": "true",
          tabindex: "-1"
      }).find("a, input, button, select").attr({
          tabindex: "-1"
      }),
      null !== e.$dots && (e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t) {
          var s = o.indexOf(t);
          i(this).attr({
              role: "tabpanel",
              id: "slick-slide" + e.instanceUid + t,
              tabindex: -1
          }),
          -1 !== s && i(this).attr({
              "aria-describedby": "slick-slide-control" + e.instanceUid + s
          })
      }),
      e.$dots.attr("role", "tablist").find("li").each(function(s) {
          var n = o[s];
          i(this).attr({
              role: "presentation"
          }),
          i(this).find("button").first().attr({
              role: "tab",
              id: "slick-slide-control" + e.instanceUid + s,
              "aria-controls": "slick-slide" + e.instanceUid + n,
              "aria-label": s + 1 + " of " + t,
              "aria-selected": null,
              tabindex: "-1"
          })
      }).eq(e.currentSlide).find("button").attr({
          "aria-selected": "true",
          tabindex: "0"
      }).end());
      for (var s = e.currentSlide, n = s + e.options.slidesToShow; s < n; s++)
          e.$slides.eq(s).attr("tabindex", 0);
      e.activateADA()
  }
  ,
  e.prototype.initArrowEvents = function() {
      var i = this;
      !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.off("click.slick").on("click.slick", {
          message: "previous"
      }, i.changeSlide),
      i.$nextArrow.off("click.slick").on("click.slick", {
          message: "next"
      }, i.changeSlide),
      !0 === i.options.accessibility && (i.$prevArrow.on("keydown.slick", i.keyHandler),
      i.$nextArrow.on("keydown.slick", i.keyHandler)))
  }
  ,
  e.prototype.initDotEvents = function() {
      var e = this;
      !0 === e.options.dots && (i("li", e.$dots).on("click.slick", {
          message: "index"
      }, e.changeSlide),
      !0 === e.options.accessibility && e.$dots.on("keydown.slick", e.keyHandler)),
      !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.interrupt, e, !0)).on("mouseleave.slick", i.proxy(e.interrupt, e, !1))
  }
  ,
  e.prototype.initSlideEvents = function() {
      var e = this;
      e.options.pauseOnHover && (e.$list.on("mouseenter.slick", i.proxy(e.interrupt, e, !0)),
      e.$list.on("mouseleave.slick", i.proxy(e.interrupt, e, !1)))
  }
  ,
  e.prototype.initializeEvents = function() {
      var e = this;
      e.initArrowEvents(),
      e.initDotEvents(),
      e.initSlideEvents(),
      e.$list.on("touchstart.slick mousedown.slick", {
          action: "start"
      }, e.swipeHandler),
      e.$list.on("touchmove.slick mousemove.slick", {
          action: "move"
      }, e.swipeHandler),
      e.$list.on("touchend.slick mouseup.slick", {
          action: "end"
      }, e.swipeHandler),
      e.$list.on("touchcancel.slick mouseleave.slick", {
          action: "end"
      }, e.swipeHandler),
      e.$list.on("click.slick", e.clickHandler),
      i(document).on(e.visibilityChange, i.proxy(e.visibility, e)),
      !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler),
      !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler),
      i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)),
      i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)),
      i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault),
      i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition),
      i(e.setPosition)
  }
  ,
  e.prototype.initUI = function() {
      var i = this;
      !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(),
      i.$nextArrow.show()),
      !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show()
  }
  ,
  e.prototype.keyHandler = function(i) {
      var e = this;
      i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({
          data: {
              message: !0 === e.options.rtl ? "next" : "previous"
          }
      }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({
          data: {
              message: !0 === e.options.rtl ? "previous" : "next"
          }
      }))
  }
  ,
  e.prototype.lazyLoad = function() {
      function e(e) {
          i("img[data-lazy]", e).each(function() {
              var e = i(this)
                , t = i(this).attr("data-lazy")
                , o = i(this).attr("data-srcset")
                , s = i(this).attr("data-sizes") || n.$slider.attr("data-sizes")
                , r = document.createElement("img");
              r.onload = function() {
                  e.animate({
                      opacity: 0
                  }, 100, function() {
                      o && (e.attr("srcset", o),
                      s && e.attr("sizes", s)),
                      e.attr("src", t).animate({
                          opacity: 1
                      }, 200, function() {
                          e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")
                      }),
                      n.$slider.trigger("lazyLoaded", [n, e, t])
                  })
              }
              ,
              r.onerror = function() {
                  e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),
                  n.$slider.trigger("lazyLoadError", [n, e, t])
              }
              ,
              r.src = t
          })
      }
      var t, o, s, n = this;
      if (!0 === n.options.centerMode ? !0 === n.options.infinite ? s = (o = n.currentSlide + (n.options.slidesToShow / 2 + 1)) + n.options.slidesToShow + 2 : (o = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)),
      s = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (o = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide,
      s = Math.ceil(o + n.options.slidesToShow),
      !0 === n.options.fade && (o > 0 && o--,
      s <= n.slideCount && s++)),
      t = n.$slider.find(".slick-slide").slice(o, s),
      "anticipated" === n.options.lazyLoad)
          for (var r = o - 1, l = s, d = n.$slider.find(".slick-slide"), a = 0; a < n.options.slidesToScroll; a++)
              r < 0 && (r = n.slideCount - 1),
              t = (t = t.add(d.eq(r))).add(d.eq(l)),
              r--,
              l++;
      e(t),
      n.slideCount <= n.options.slidesToShow ? e(n.$slider.find(".slick-slide")) : n.currentSlide >= n.slideCount - n.options.slidesToShow ? e(n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow)) : 0 === n.currentSlide && e(n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow))
  }
  ,
  e.prototype.loadSlider = function() {
      var i = this;
      i.setPosition(),
      i.$slideTrack.css({
          opacity: 1
      }),
      i.$slider.removeClass("slick-loading"),
      i.initUI(),
      "progressive" === i.options.lazyLoad && i.progressiveLazyLoad()
  }
  ,
  e.prototype.next = e.prototype.slickNext = function() {
      this.changeSlide({
          data: {
              message: "next"
          }
      })
  }
  ,
  e.prototype.orientationChange = function() {
      var i = this;
      i.checkResponsive(),
      i.setPosition()
  }
  ,
  e.prototype.pause = e.prototype.slickPause = function() {
      var i = this;
      i.autoPlayClear(),
      i.paused = !0
  }
  ,
  e.prototype.play = e.prototype.slickPlay = function() {
      var i = this;
      i.autoPlay(),
      i.options.autoplay = !0,
      i.paused = !1,
      i.focussed = !1,
      i.interrupted = !1
  }
  ,
  e.prototype.postSlide = function(e) {
      var t = this;
      t.unslicked || (t.$slider.trigger("afterChange", [t, e]),
      t.animating = !1,
      t.slideCount > t.options.slidesToShow && t.setPosition(),
      t.swipeLeft = null,
      t.options.autoplay && t.autoPlay(),
      !0 === t.options.accessibility && (t.initADA(),
      t.options.focusOnChange && i(t.$slides.get(t.currentSlide)).attr("tabindex", 0).focus()))
  }
  ,
  e.prototype.prev = e.prototype.slickPrev = function() {
      this.changeSlide({
          data: {
              message: "previous"
          }
      })
  }
  ,
  e.prototype.preventDefault = function(i) {
      i.preventDefault()
  }
  ,
  e.prototype.progressiveLazyLoad = function(e) {
      e = e || 1;
      var t, o, s, n, r, l = this, d = i("img[data-lazy]", l.$slider);
      d.length ? (t = d.first(),
      o = t.attr("data-lazy"),
      s = t.attr("data-srcset"),
      n = t.attr("data-sizes") || l.$slider.attr("data-sizes"),
      (r = document.createElement("img")).onload = function() {
          s && (t.attr("srcset", s),
          n && t.attr("sizes", n)),
          t.attr("src", o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),
          !0 === l.options.adaptiveHeight && l.setPosition(),
          l.$slider.trigger("lazyLoaded", [l, t, o]),
          l.progressiveLazyLoad()
      }
      ,
      r.onerror = function() {
          e < 3 ? setTimeout(function() {
              l.progressiveLazyLoad(e + 1)
          }, 500) : (t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),
          l.$slider.trigger("lazyLoadError", [l, t, o]),
          l.progressiveLazyLoad())
      }
      ,
      r.src = o) : l.$slider.trigger("allImagesLoaded", [l])
  }
  ,
  e.prototype.refresh = function(e) {
      var t, o, s = this;
      o = s.slideCount - s.options.slidesToShow,
      !s.options.infinite && s.currentSlide > o && (s.currentSlide = o),
      s.slideCount <= s.options.slidesToShow && (s.currentSlide = 0),
      t = s.currentSlide,
      s.destroy(!0),
      i.extend(s, s.initials, {
          currentSlide: t
      }),
      s.init(),
      e || s.changeSlide({
          data: {
              message: "index",
              index: t
          }
      }, !1)
  }
  ,
  e.prototype.registerBreakpoints = function() {
      var e, t, o, s = this, n = s.options.responsive || null;
      if ("array" === i.type(n) && n.length) {
          s.respondTo = s.options.respondTo || "window";
          for (e in n)
              if (o = s.breakpoints.length - 1,
              n.hasOwnProperty(e)) {
                  for (t = n[e].breakpoint; o >= 0; )
                      s.breakpoints[o] && s.breakpoints[o] === t && s.breakpoints.splice(o, 1),
                      o--;
                  s.breakpoints.push(t),
                  s.breakpointSettings[t] = n[e].settings
              }
          s.breakpoints.sort(function(i, e) {
              return s.options.mobileFirst ? i - e : e - i
          })
      }
  }
  ,
  e.prototype.reinit = function() {
      var e = this;
      e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"),
      e.slideCount = e.$slides.length,
      e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll),
      e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0),
      e.registerBreakpoints(),
      e.setProps(),
      e.setupInfinite(),
      e.buildArrows(),
      e.updateArrows(),
      e.initArrowEvents(),
      e.buildDots(),
      e.updateDots(),
      e.initDotEvents(),
      e.cleanUpSlideEvents(),
      e.initSlideEvents(),
      e.checkResponsive(!1, !0),
      !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler),
      e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0),
      e.setPosition(),
      e.focusHandler(),
      e.paused = !e.options.autoplay,
      e.autoPlay(),
      e.$slider.trigger("reInit", [e])
  }
  ,
  e.prototype.resize = function() {
      var e = this;
      i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay),
      e.windowDelay = window.setTimeout(function() {
          e.windowWidth = i(window).width(),
          e.checkResponsive(),
          e.unslicked || e.setPosition()
      }, 50))
  }
  ,
  e.prototype.removeSlide = e.prototype.slickRemove = function(i, e, t) {
      var o = this;
      if (i = "boolean" == typeof i ? !0 === (e = i) ? 0 : o.slideCount - 1 : !0 === e ? --i : i,
      o.slideCount < 1 || i < 0 || i > o.slideCount - 1)
          return !1;
      o.unload(),
      !0 === t ? o.$slideTrack.children().remove() : o.$slideTrack.children(this.options.slide).eq(i).remove(),
      o.$slides = o.$slideTrack.children(this.options.slide),
      o.$slideTrack.children(this.options.slide).detach(),
      o.$slideTrack.append(o.$slides),
      o.$slidesCache = o.$slides,
      o.reinit()
  }
  ,
  e.prototype.setCSS = function(i) {
      var e, t, o = this, s = {};
      !0 === o.options.rtl && (i = -i),
      e = "left" == o.positionProp ? Math.ceil(i) + "px" : "0px",
      t = "top" == o.positionProp ? Math.ceil(i) + "px" : "0px",
      s[o.positionProp] = i,
      !1 === o.transformsEnabled ? o.$slideTrack.css(s) : (s = {},
      !1 === o.cssTransitions ? (s[o.animType] = "translate(" + e + ", " + t + ")",
      o.$slideTrack.css(s)) : (s[o.animType] = "translate3d(" + e + ", " + t + ", 0px)",
      o.$slideTrack.css(s)))
  }
  ,
  e.prototype.setDimensions = function() {
      var i = this;
      !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({
          padding: "0px " + i.options.centerPadding
      }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow),
      !0 === i.options.centerMode && i.$list.css({
          padding: i.options.centerPadding + " 0px"
      })),
      i.listWidth = i.$list.width(),
      i.listHeight = i.$list.height(),
      !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow),
      i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth),
      i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length)));
      var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width();
      !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e)
  }
  ,
  e.prototype.setFade = function() {
      var e, t = this;
      t.$slides.each(function(o, s) {
          e = t.slideWidth * o * -1,
          !0 === t.options.rtl ? i(s).css({
              position: "relative",
              right: e,
              top: 0,
              zIndex: t.options.zIndex - 2,
              opacity: 0
          }) : i(s).css({
              position: "relative",
              left: e,
              top: 0,
              zIndex: t.options.zIndex - 2,
              opacity: 0
          })
      }),
      t.$slides.eq(t.currentSlide).css({
          zIndex: t.options.zIndex - 1,
          opacity: 1
      })
  }
  ,
  e.prototype.setHeight = function() {
      var i = this;
      if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) {
          var e = i.$slides.eq(i.currentSlide).outerHeight(!0);
          i.$list.css("height", e)
      }
  }
  ,
  e.prototype.setOption = e.prototype.slickSetOption = function() {
      var e, t, o, s, n, r = this, l = !1;
      if ("object" === i.type(arguments[0]) ? (o = arguments[0],
      l = arguments[1],
      n = "multiple") : "string" === i.type(arguments[0]) && (o = arguments[0],
      s = arguments[1],
      l = arguments[2],
      "responsive" === arguments[0] && "array" === i.type(arguments[1]) ? n = "responsive" : void 0 !== arguments[1] && (n = "single")),
      "single" === n)
          r.options[o] = s;
      else if ("multiple" === n)
          i.each(o, function(i, e) {
              r.options[i] = e
          });
      else if ("responsive" === n)
          for (t in s)
              if ("array" !== i.type(r.options.responsive))
                  r.options.responsive = [s[t]];
              else {
                  for (e = r.options.responsive.length - 1; e >= 0; )
                      r.options.responsive[e].breakpoint === s[t].breakpoint && r.options.responsive.splice(e, 1),
                      e--;
                  r.options.responsive.push(s[t])
              }
      l && (r.unload(),
      r.reinit())
  }
  ,
  e.prototype.setPosition = function() {
      var i = this;
      i.setDimensions(),
      i.setHeight(),
      !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(),
      i.$slider.trigger("setPosition", [i])
  }
  ,
  e.prototype.setProps = function() {
      var i = this
        , e = document.body.style;
      i.positionProp = !0 === i.options.vertical ? "top" : "left",
      "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"),
      void 0 === e.WebkitTransition && void 0 === e.MozTransition && void 0 === e.msTransition || !0 === i.options.useCSS && (i.cssTransitions = !0),
      i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex < 3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex),
      void 0 !== e.OTransform && (i.animType = "OTransform",
      i.transformType = "-o-transform",
      i.transitionType = "OTransition",
      void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)),
      void 0 !== e.MozTransform && (i.animType = "MozTransform",
      i.transformType = "-moz-transform",
      i.transitionType = "MozTransition",
      void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)),
      void 0 !== e.webkitTransform && (i.animType = "webkitTransform",
      i.transformType = "-webkit-transform",
      i.transitionType = "webkitTransition",
      void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)),
      void 0 !== e.msTransform && (i.animType = "msTransform",
      i.transformType = "-ms-transform",
      i.transitionType = "msTransition",
      void 0 === e.msTransform && (i.animType = !1)),
      void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform",
      i.transformType = "transform",
      i.transitionType = "transition"),
      i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType
  }
  ,
  e.prototype.setSlideClasses = function(i) {
      var e, t, o, s, n = this;
      if (t = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"),
      n.$slides.eq(i).addClass("slick-current"),
      !0 === n.options.centerMode) {
          var r = n.options.slidesToShow % 2 == 0 ? 1 : 0;
          e = Math.floor(n.options.slidesToShow / 2),
          !0 === n.options.infinite && (i >= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e + r, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (o = n.options.slidesToShow + i,
          t.slice(o - e + 1 + r, o + e + 2).addClass("slick-active").attr("aria-hidden", "false")),
          0 === i ? t.eq(t.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && t.eq(n.options.slidesToShow).addClass("slick-center")),
          n.$slides.eq(i).addClass("slick-center")
      } else
          i >= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : t.length <= n.options.slidesToShow ? t.addClass("slick-active").attr("aria-hidden", "false") : (s = n.slideCount % n.options.slidesToShow,
          o = !0 === n.options.infinite ? n.options.slidesToShow + i : i,
          n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i < n.options.slidesToShow ? t.slice(o - (n.options.slidesToShow - s), o + s).addClass("slick-active").attr("aria-hidden", "false") : t.slice(o, o + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false"));
      "ondemand" !== n.options.lazyLoad && "anticipated" !== n.options.lazyLoad || n.lazyLoad()
  }
  ,
  e.prototype.setupInfinite = function() {
      var e, t, o, s = this;
      if (!0 === s.options.fade && (s.options.centerMode = !1),
      !0 === s.options.infinite && !1 === s.options.fade && (t = null,
      s.slideCount > s.options.slidesToShow)) {
          for (o = !0 === s.options.centerMode ? s.options.slidesToShow + 1 : s.options.slidesToShow,
          e = s.slideCount; e > s.slideCount - o; e -= 1)
              t = e - 1,
              i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t - s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");
          for (e = 0; e < o + s.slideCount; e += 1)
              t = e,
              i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t + s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");
          s.$slideTrack.find(".slick-cloned").find("[id]").each(function() {
              i(this).attr("id", "")
          })
      }
  }
  ,
  e.prototype.interrupt = function(i) {
      var e = this;
      i || e.autoPlay(),
      e.interrupted = i
  }
  ,
  e.prototype.selectHandler = function(e) {
      var t = this
        , o = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide")
        , s = parseInt(o.attr("data-slick-index"));
      s || (s = 0),
      t.slideCount <= t.options.slidesToShow ? t.slideHandler(s, !1, !0) : t.slideHandler(s)
  }
  ,
  e.prototype.slideHandler = function(i, e, t) {
      var o, s, n, r, l, d = null, a = this;
      if (e = e || !1,
      !(!0 === a.animating && !0 === a.options.waitForAnimate || !0 === a.options.fade && a.currentSlide === i))
          if (!1 === e && a.asNavFor(i),
          o = i,
          d = a.getLeft(o),
          r = a.getLeft(a.currentSlide),
          a.currentLeft = null === a.swipeLeft ? r : a.swipeLeft,
          !1 === a.options.infinite && !1 === a.options.centerMode && (i < 0 || i > a.getDotCount() * a.options.slidesToScroll))
              !1 === a.options.fade && (o = a.currentSlide,
              !0 !== t ? a.animateSlide(r, function() {
                  a.postSlide(o)
              }) : a.postSlide(o));
          else if (!1 === a.options.infinite && !0 === a.options.centerMode && (i < 0 || i > a.slideCount - a.options.slidesToScroll))
              !1 === a.options.fade && (o = a.currentSlide,
              !0 !== t ? a.animateSlide(r, function() {
                  a.postSlide(o)
              }) : a.postSlide(o));
          else {
              if (a.options.autoplay && clearInterval(a.autoPlayTimer),
              s = o < 0 ? a.slideCount % a.options.slidesToScroll != 0 ? a.slideCount - a.slideCount % a.options.slidesToScroll : a.slideCount + o : o >= a.slideCount ? a.slideCount % a.options.slidesToScroll != 0 ? 0 : o - a.slideCount : o,
              a.animating = !0,
              a.$slider.trigger("beforeChange", [a, a.currentSlide, s]),
              n = a.currentSlide,
              a.currentSlide = s,
              a.setSlideClasses(a.currentSlide),
              a.options.asNavFor && (l = (l = a.getNavTarget()).slick("getSlick")).slideCount <= l.options.slidesToShow && l.setSlideClasses(a.currentSlide),
              a.updateDots(),
              a.updateArrows(),
              !0 === a.options.fade)
                  return !0 !== t ? (a.fadeSlideOut(n),
                  a.fadeSlide(s, function() {
                      a.postSlide(s)
                  })) : a.postSlide(s),
                  void a.animateHeight();
              !0 !== t ? a.animateSlide(d, function() {
                  a.postSlide(s)
              }) : a.postSlide(s)
          }
  }
  ,
  e.prototype.startLoad = function() {
      var i = this;
      !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(),
      i.$nextArrow.hide()),
      !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(),
      i.$slider.addClass("slick-loading")
  }
  ,
  e.prototype.swipeDirection = function() {
      var i, e, t, o, s = this;
      return i = s.touchObject.startX - s.touchObject.curX,
      e = s.touchObject.startY - s.touchObject.curY,
      t = Math.atan2(e, i),
      (o = Math.round(180 * t / Math.PI)) < 0 && (o = 360 - Math.abs(o)),
      o <= 45 && o >= 0 ? !1 === s.options.rtl ? "left" : "right" : o <= 360 && o >= 315 ? !1 === s.options.rtl ? "left" : "right" : o >= 135 && o <= 225 ? !1 === s.options.rtl ? "right" : "left" : !0 === s.options.verticalSwiping ? o >= 35 && o <= 135 ? "down" : "up" : "vertical"
  }
  ,
  e.prototype.swipeEnd = function(i) {
      var e, t, o = this;
      if (o.dragging = !1,
      o.swiping = !1,
      o.scrolling)
          return o.scrolling = !1,
          !1;
      if (o.interrupted = !1,
      o.shouldClick = !(o.touchObject.swipeLength > 10),
      void 0 === o.touchObject.curX)
          return !1;
      if (!0 === o.touchObject.edgeHit && o.$slider.trigger("edge", [o, o.swipeDirection()]),
      o.touchObject.swipeLength >= o.touchObject.minSwipe) {
          switch (t = o.swipeDirection()) {
          case "left":
          case "down":
              e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide + o.getSlideCount()) : o.currentSlide + o.getSlideCount(),
              o.currentDirection = 0;
              break;
          case "right":
          case "up":
              e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide - o.getSlideCount()) : o.currentSlide - o.getSlideCount(),
              o.currentDirection = 1
          }
          "vertical" != t && (o.slideHandler(e),
          o.touchObject = {},
          o.$slider.trigger("swipe", [o, t]))
      } else
          o.touchObject.startX !== o.touchObject.curX && (o.slideHandler(o.currentSlide),
          o.touchObject = {})
  }
  ,
  e.prototype.swipeHandler = function(i) {
      var e = this;
      if (!(!1 === e.options.swipe || "ontouchend"in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse")))
          switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1,
          e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold,
          !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold),
          i.data.action) {
          case "start":
              e.swipeStart(i);
              break;
          case "move":
              e.swipeMove(i);
              break;
          case "end":
              e.swipeEnd(i)
          }
  }
  ,
  e.prototype.swipeMove = function(i) {
      var e, t, o, s, n, r, l = this;
      return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null,
      !(!l.dragging || l.scrolling || n && 1 !== n.length) && (e = l.getLeft(l.currentSlide),
      l.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX,
      l.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY,
      l.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(l.touchObject.curX - l.touchObject.startX, 2))),
      r = Math.round(Math.sqrt(Math.pow(l.touchObject.curY - l.touchObject.startY, 2))),
      !l.options.verticalSwiping && !l.swiping && r > 4 ? (l.scrolling = !0,
      !1) : (!0 === l.options.verticalSwiping && (l.touchObject.swipeLength = r),
      t = l.swipeDirection(),
      void 0 !== i.originalEvent && l.touchObject.swipeLength > 4 && (l.swiping = !0,
      i.preventDefault()),
      s = (!1 === l.options.rtl ? 1 : -1) * (l.touchObject.curX > l.touchObject.startX ? 1 : -1),
      !0 === l.options.verticalSwiping && (s = l.touchObject.curY > l.touchObject.startY ? 1 : -1),
      o = l.touchObject.swipeLength,
      l.touchObject.edgeHit = !1,
      !1 === l.options.infinite && (0 === l.currentSlide && "right" === t || l.currentSlide >= l.getDotCount() && "left" === t) && (o = l.touchObject.swipeLength * l.options.edgeFriction,
      l.touchObject.edgeHit = !0),
      !1 === l.options.vertical ? l.swipeLeft = e + o * s : l.swipeLeft = e + o * (l.$list.height() / l.listWidth) * s,
      !0 === l.options.verticalSwiping && (l.swipeLeft = e + o * s),
      !0 !== l.options.fade && !1 !== l.options.touchMove && (!0 === l.animating ? (l.swipeLeft = null,
      !1) : void l.setCSS(l.swipeLeft))))
  }
  ,
  e.prototype.swipeStart = function(i) {
      var e, t = this;
      if (t.interrupted = !0,
      1 !== t.touchObject.fingerCount || t.slideCount <= t.options.slidesToShow)
          return t.touchObject = {},
          !1;
      void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]),
      t.touchObject.startX = t.touchObject.curX = void 0 !== e ? e.pageX : i.clientX,
      t.touchObject.startY = t.touchObject.curY = void 0 !== e ? e.pageY : i.clientY,
      t.dragging = !0
  }
  ,
  e.prototype.unfilterSlides = e.prototype.slickUnfilter = function() {
      var i = this;
      null !== i.$slidesCache && (i.unload(),
      i.$slideTrack.children(this.options.slide).detach(),
      i.$slidesCache.appendTo(i.$slideTrack),
      i.reinit())
  }
  ,
  e.prototype.unload = function() {
      var e = this;
      i(".slick-cloned", e.$slider).remove(),
      e.$dots && e.$dots.remove(),
      e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(),
      e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(),
      e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "")
  }
  ,
  e.prototype.unslick = function(i) {
      var e = this;
      e.$slider.trigger("unslick", [e, i]),
      e.destroy()
  }
  ,
  e.prototype.updateArrows = function() {
      var i = this;
      Math.floor(i.options.slidesToShow / 2),
      !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"),
      i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"),
      0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"),
      i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"),
      i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"),
      i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")))
  }
  ,
  e.prototype.updateDots = function() {
      var i = this;
      null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").end(),
      i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active"))
  }
  ,
  e.prototype.visibility = function() {
      var i = this;
      i.options.autoplay && (document[i.hidden] ? i.interrupted = !0 : i.interrupted = !1)
  }
  ,
  i.fn.slick = function() {
      var i, t, o = this, s = arguments[0], n = Array.prototype.slice.call(arguments, 1), r = o.length;
      for (i = 0; i < r; i++)
          if ("object" == typeof s || void 0 === s ? o[i].slick = new e(o[i],s) : t = o[i].slick[s].apply(o[i].slick, n),
          void 0 !== t)
              return t;
      return o
  }
});
(function($) {
  $.fn.alterClass = function(removals, additions) {
      var self = this;
      if (removals.indexOf('*') === -1) {
          self.removeClass(removals);
          return !additions ? self : self.addClass(additions);
      }
      var patt = new RegExp('\\s' + removals.replace(/\*/g, '[A-Za-z0-9-_]+').split(' ').join('\\s|\\s') + '\\s','g');
      self.each(function(i, it) {
          var cn = ' ' + it.className + ' ';
          while (patt.test(cn)) {
              cn = cn.replace(patt, ' ');
          }
          it.className = $.trim(cn);
      });
      return !additions ? self : self.addClass(additions);
  }
  ;
}
)(jQuery);
/*!
* Stickyfill – `position: sticky` polyfill
* v. 2.0.5 | https://github.com/wilddeer/stickyfill
* MIT License
*/
!function(a, b) {
  "use strict";
  function c(a, b) {
      if (!(a instanceof b))
          throw new TypeError("Cannot call a class as a function")
  }
  function d(a, b) {
      for (var c in b)
          b.hasOwnProperty(c) && (a[c] = b[c])
  }
  function e(a) {
      return parseFloat(a) || 0
  }
  function f(a) {
      for (var b = 0; a; )
          b += a.offsetTop,
          a = a.offsetParent;
      return b
  }
  var g = function() {
      function a(a, b) {
          for (var c = 0; c < b.length; c++) {
              var d = b[c];
              d.enumerable = d.enumerable || !1,
              d.configurable = !0,
              "value"in d && (d.writable = !0),
              Object.defineProperty(a, d.key, d)
          }
      }
      return function(b, c, d) {
          return c && a(b.prototype, c),
          d && a(b, d),
          b
      }
  }()
    , h = !1;
  if (a.getComputedStyle) {
      var i = b.createElement("div");
      ["", "-webkit-", "-moz-", "-ms-"].some(function(a) {
          try {
              i.style.position = a + "sticky"
          } catch (a) {}
          return "" != i.style.position
      }) && (h = !0)
  } else
      h = !0;
  var j = "undefined" != typeof ShadowRoot
    , k = {
      top: null,
      left: null
  }
    , l = []
    , m = function() {
      function i(a) {
          if (c(this, i),
          !(a instanceof HTMLElement))
              throw new Error("First argument must be HTMLElement");
          if (l.some(function(b) {
              return b._node === a
          }))
              throw new Error("Stickyfill is already applied to this node");
          this._node = a,
          this._stickyMode = null,
          this._active = !1,
          l.push(this),
          this.refresh()
      }
      return g(i, [{
          key: "refresh",
          value: function() {
              if (!h && !this._removed) {
                  this._active && this._deactivate();
                  var c = this._node
                    , g = getComputedStyle(c)
                    , i = {
                      top: g.top,
                      display: g.display,
                      marginTop: g.marginTop,
                      marginBottom: g.marginBottom,
                      marginLeft: g.marginLeft,
                      marginRight: g.marginRight,
                      cssFloat: g.cssFloat
                  };
                  if (!isNaN(parseFloat(i.top)) && "table-cell" != i.display && "none" != i.display) {
                      this._active = !0;
                      var k = c.parentNode
                        , l = j && k instanceof ShadowRoot ? k.host : k
                        , m = c.getBoundingClientRect()
                        , n = l.getBoundingClientRect()
                        , o = getComputedStyle(l);
                      this._parent = {
                          node: l,
                          styles: {
                              position: l.style.position
                          },
                          offsetHeight: l.offsetHeight
                      },
                      this._offsetToWindow = {
                          left: m.left,
                          right: b.documentElement.clientWidth - m.right
                      },
                      this._offsetToParent = {
                          top: m.top - n.top - e(o.borderTopWidth),
                          left: m.left - n.left - e(o.borderLeftWidth),
                          right: -m.right + n.right - e(o.borderRightWidth)
                      },
                      this._styles = {
                          position: c.style.position,
                          top: c.style.top,
                          bottom: c.style.bottom,
                          left: c.style.left,
                          right: c.style.right,
                          width: c.style.width,
                          marginTop: c.style.marginTop,
                          marginLeft: c.style.marginLeft,
                          marginRight: c.style.marginRight
                      };
                      var p = e(i.top);
                      this._limits = {
                          start: m.top + a.pageYOffset - p,
                          end: n.top + a.pageYOffset + l.offsetHeight - e(o.borderBottomWidth) - c.offsetHeight - p - e(i.marginBottom)
                      };
                      var q = o.position;
                      "absolute" != q && "relative" != q && (l.style.position = "relative"),
                      this._recalcPosition();
                      var r = this._clone = {};
                      r.node = b.createElement("div"),
                      d(r.node.style, {
                          width: m.right - m.left + "px",
                          height: m.bottom - m.top + "px",
                          marginTop: i.marginTop,
                          marginBottom: i.marginBottom,
                          marginLeft: i.marginLeft,
                          marginRight: i.marginRight,
                          cssFloat: i.cssFloat,
                          padding: 0,
                          border: 0,
                          borderSpacing: 0,
                          fontSize: "1em",
                          position: "static"
                      }),
                      k.insertBefore(r.node, c),
                      r.docOffsetTop = f(r.node)
                  }
              }
          }
      }, {
          key: "_recalcPosition",
          value: function() {
              if (this._active && !this._removed) {
                  var a = k.top <= this._limits.start ? "start" : k.top >= this._limits.end ? "end" : "middle";
                  if (this._stickyMode != a) {
                      switch (a) {
                      case "start":
                          d(this._node.style, {
                              position: "absolute",
                              left: this._offsetToParent.left + "px",
                              right: this._offsetToParent.right + "px",
                              top: this._offsetToParent.top + "px",
                              bottom: "auto",
                              width: "auto",
                              marginLeft: 0,
                              marginRight: 0,
                              marginTop: 0
                          });
                          break;
                      case "middle":
                          d(this._node.style, {
                              position: "fixed",
                              left: this._offsetToWindow.left + "px",
                              right: this._offsetToWindow.right + "px",
                              top: this._styles.top,
                              bottom: "auto",
                              width: "auto",
                              marginLeft: 0,
                              marginRight: 0,
                              marginTop: 0
                          });
                          break;
                      case "end":
                          d(this._node.style, {
                              position: "absolute",
                              left: this._offsetToParent.left + "px",
                              right: this._offsetToParent.right + "px",
                              top: "auto",
                              bottom: 0,
                              width: "auto",
                              marginLeft: 0,
                              marginRight: 0
                          })
                      }
                      this._stickyMode = a
                  }
              }
          }
      }, {
          key: "_fastCheck",
          value: function() {
              this._active && !this._removed && (Math.abs(f(this._clone.node) - this._clone.docOffsetTop) > 1 || Math.abs(this._parent.node.offsetHeight - this._parent.offsetHeight) > 1) && this.refresh()
          }
      }, {
          key: "_deactivate",
          value: function() {
              var a = this;
              this._active && !this._removed && (this._clone.node.parentNode.removeChild(this._clone.node),
              delete this._clone,
              d(this._node.style, this._styles),
              delete this._styles,
              l.some(function(b) {
                  return b !== a && b._parent && b._parent.node === a._parent.node
              }) || d(this._parent.node.style, this._parent.styles),
              delete this._parent,
              this._stickyMode = null,
              this._active = !1,
              delete this._offsetToWindow,
              delete this._offsetToParent,
              delete this._limits)
          }
      }, {
          key: "remove",
          value: function() {
              var a = this;
              this._deactivate(),
              l.some(function(b, c) {
                  if (b._node === a._node)
                      return l.splice(c, 1),
                      !0
              }),
              this._removed = !0
          }
      }]),
      i
  }()
    , n = {
      stickies: l,
      Sticky: m,
      addOne: function(a) {
          if (!(a instanceof HTMLElement)) {
              if (!a.length || !a[0])
                  return;
              a = a[0]
          }
          for (var b = 0; b < l.length; b++)
              if (l[b]._node === a)
                  return l[b];
          return new m(a)
      },
      add: function(a) {
          if (a instanceof HTMLElement && (a = [a]),
          a.length) {
              for (var b = [], c = 0; c < a.length; c++) {
                  (function(c) {
                      var d = a[c];
                      d instanceof HTMLElement ? l.some(function(a) {
                          if (a._node === d)
                              return b.push(a),
                              !0
                      }) || b.push(new m(d)) : b.push(void 0)
                  }
                  )(c)
              }
              return b
          }
      },
      refreshAll: function() {
          l.forEach(function(a) {
              return a.refresh()
          })
      },
      removeOne: function(a) {
          if (!(a instanceof HTMLElement)) {
              if (!a.length || !a[0])
                  return;
              a = a[0]
          }
          l.some(function(b) {
              if (b._node === a)
                  return b.remove(),
                  !0
          })
      },
      remove: function(a) {
          if (a instanceof HTMLElement && (a = [a]),
          a.length)
              for (var b = 0; b < a.length; b++)
                  !function(b) {
                      var c = a[b];
                      l.some(function(a) {
                          if (a._node === c)
                              return a.remove(),
                              !0
                      })
                  }(b)
      },
      removeAll: function() {
          for (; l.length; )
              l[0].remove()
      }
  };
  h || function() {
      function c() {
          a.pageXOffset != k.left ? (k.top = a.pageYOffset,
          k.left = a.pageXOffset,
          n.refreshAll()) : a.pageYOffset != k.top && (k.top = a.pageYOffset,
          k.left = a.pageXOffset,
          l.forEach(function(a) {
              return a._recalcPosition()
          }))
      }
      function d() {
          f = setInterval(function() {
              l.forEach(function(a) {
                  return a._fastCheck()
              })
          }, 500)
      }
      function e() {
          clearInterval(f)
      }
      c(),
      a.addEventListener("scroll", c),
      a.addEventListener("resize", n.refreshAll),
      a.addEventListener("orientationchange", n.refreshAll);
      var f = void 0
        , g = void 0
        , h = void 0;
      "hidden"in b ? (g = "hidden",
      h = "visibilitychange") : "webkitHidden"in b && (g = "webkitHidden",
      h = "webkitvisibilitychange"),
      h ? (b[g] || d(),
      b.addEventListener(h, function() {
          b[g] ? e() : d()
      })) : d()
  }(),
  "undefined" != typeof module && module.exports ? module.exports = n : a.Stickyfill = n
}(window, document);
!function() {
  "use strict";
  if ("undefined" != typeof window) {
      var t = window.navigator.userAgent.match(/Edge\/(\d{2})\./)
        , e = !!t && parseInt(t[1], 10) >= 16;
      if ("objectFit"in document.documentElement.style != !1 && !e)
          return void (window.objectFitPolyfill = function() {
              return !1
          }
          );
      var i = function(t) {
          var e = window.getComputedStyle(t, null)
            , i = e.getPropertyValue("position")
            , n = e.getPropertyValue("overflow")
            , o = e.getPropertyValue("display");
          i && "static" !== i || (t.style.position = "relative"),
          "hidden" !== n && (t.style.overflow = "hidden"),
          o && "inline" !== o || (t.style.display = "block"),
          0 === t.clientHeight && (t.style.height = "100%"),
          -1 === t.className.indexOf("object-fit-polyfill") && (t.className = t.className + " object-fit-polyfill")
      }
        , n = function(t) {
          var e = window.getComputedStyle(t, null)
            , i = {
              "max-width": "none",
              "max-height": "none",
              "min-width": "0px",
              "min-height": "0px",
              top: "auto",
              right: "auto",
              bottom: "auto",
              left: "auto",
              "margin-top": "0px",
              "margin-right": "0px",
              "margin-bottom": "0px",
              "margin-left": "0px"
          };
          for (var n in i) {
              e.getPropertyValue(n) !== i[n] && (t.style[n] = i[n])
          }
      }
        , o = function(t, e, i) {
          var n, o, l, a, d;
          if (i = i.split(" "),
          i.length < 2 && (i[1] = i[0]),
          "x" === t)
              n = i[0],
              o = i[1],
              l = "left",
              a = "right",
              d = e.clientWidth;
          else {
              if ("y" !== t)
                  return;
              n = i[1],
              o = i[0],
              l = "top",
              a = "bottom",
              d = e.clientHeight
          }
          return n === l || o === l ? void (e.style[l] = "0") : n === a || o === a ? void (e.style[a] = "0") : "center" === n || "50%" === n ? (e.style[l] = "50%",
          void (e.style["margin-" + l] = d / -2 + "px")) : n.indexOf("%") >= 0 ? (n = parseInt(n),
          void (n < 50 ? (e.style[l] = n + "%",
          e.style["margin-" + l] = d * (n / -100) + "px") : (n = 100 - n,
          e.style[a] = n + "%",
          e.style["margin-" + a] = d * (n / -100) + "px"))) : void (e.style[l] = n)
      }
        , l = function(t) {
          var e = t.dataset ? t.dataset.objectFit : t.getAttribute("data-object-fit")
            , l = t.dataset ? t.dataset.objectPosition : t.getAttribute("data-object-position");
          e = e || "cover",
          l = l || "50% 50%";
          var a = t.parentNode;
          i(a),
          n(t),
          t.style.position = "absolute",
          t.style.height = "100%",
          t.style.width = "auto",
          "scale-down" === e && (t.style.height = "auto",
          t.clientWidth < a.clientWidth && t.clientHeight < a.clientHeight ? (o("x", t, l),
          o("y", t, l)) : (e = "contain",
          t.style.height = "100%")),
          "none" === e ? (t.style.width = "auto",
          t.style.height = "auto",
          o("x", t, l),
          o("y", t, l)) : "cover" === e && t.clientWidth > a.clientWidth || "contain" === e && t.clientWidth < a.clientWidth ? (t.style.top = "0",
          t.style.marginTop = "0",
          o("x", t, l)) : "scale-down" !== e && (t.style.width = "100%",
          t.style.height = "auto",
          t.style.left = "0",
          t.style.marginLeft = "0",
          o("y", t, l))
      }
        , a = function(t) {
          if (void 0 === t)
              t = document.querySelectorAll("[data-object-fit]");
          else if (t && t.nodeName)
              t = [t];
          else {
              if ("object" != typeof t || !t.length || !t[0].nodeName)
                  return !1;
              t = t
          }
          for (var i = 0; i < t.length; i++)
              if (t[i].nodeName) {
                  var n = t[i].nodeName.toLowerCase();
                  "img" !== n || e ? "video" === n && (t[i].readyState > 0 ? l(t[i]) : t[i].addEventListener("loadedmetadata", function() {
                      l(this)
                  })) : t[i].complete ? l(t[i]) : t[i].addEventListener("load", function() {
                      l(this)
                  })
              }
          return !0
      };
      document.addEventListener("DOMContentLoaded", function() {
          a()
      }),
      window.addEventListener("resize", function() {
          a()
      }),
      window.objectFitPolyfill = a
  }
}();
(function(root, factory) {
  if (typeof define === "function" && define.amd) {
      define([], factory())
  } else if (typeof module === "object" && module.exports) {
      module.exports = factory()
  } else {
      (function install() {
          if (document && document.body) {
              root.zenscroll = factory()
          } else {
              setTimeout(install, 9)
          }
      }
      )()
  }
}(this, function() {
  "use strict"
  var isNativeSmoothScrollEnabledOn = function(elem) {
      return elem && "getComputedStyle"in window && window.getComputedStyle(elem)["scroll-behavior"] === "smooth"
  }
  if (typeof window === "undefined" || !("document"in window)) {
      return {}
  }
  var makeScroller = function(container, defaultDuration, edgeOffset) {
      defaultDuration = defaultDuration || 999
      if (!edgeOffset && edgeOffset !== 0) {
          edgeOffset = 9
      }
      var scrollTimeoutId
      var setScrollTimeoutId = function(newValue) {
          scrollTimeoutId = newValue
      }
      var stopScroll = function() {
          clearTimeout(scrollTimeoutId)
          setScrollTimeoutId(0)
      }
      var getTopWithEdgeOffset = function(elem) {
          return Math.max(0, container.getTopOf(elem) - edgeOffset)
      }
      var scrollToY = function(targetY, duration, onDone) {
          stopScroll()
          if (duration === 0 || (duration && duration < 0) || isNativeSmoothScrollEnabledOn(container.body)) {
              container.toY(targetY)
              if (onDone) {
                  onDone()
              }
          } else {
              var startY = container.getY()
              var distance = Math.max(0, targetY) - startY
              var startTime = new Date().getTime()
              duration = duration || Math.min(Math.abs(distance), defaultDuration);
              (function loopScroll() {
                  setScrollTimeoutId(setTimeout(function() {
                      var p = Math.min(1, (new Date().getTime() - startTime) / duration)
                      var y = Math.max(0, Math.floor(startY + distance * (p < 0.5 ? 2 * p * p : p * (4 - p * 2) - 1)))
                      container.toY(y)
                      if (p < 1 && (container.getHeight() + y) < container.body.scrollHeight) {
                          loopScroll()
                      } else {
                          setTimeout(stopScroll, 99)
                          if (onDone) {
                              onDone()
                          }
                      }
                  }, 9))
              }
              )()
          }
      }
      var scrollToElem = function(elem, duration, onDone) {
          scrollToY(getTopWithEdgeOffset(elem), duration, onDone)
      }
      var scrollIntoView = function(elem, duration, onDone) {
          var elemHeight = elem.getBoundingClientRect().height
          var elemBottom = container.getTopOf(elem) + elemHeight
          var containerHeight = container.getHeight()
          var y = container.getY()
          var containerBottom = y + containerHeight
          if (getTopWithEdgeOffset(elem) < y || (elemHeight + edgeOffset) > containerHeight) {
              scrollToElem(elem, duration, onDone)
          } else if ((elemBottom + edgeOffset) > containerBottom) {
              scrollToY(elemBottom - containerHeight + edgeOffset, duration, onDone)
          } else if (onDone) {
              onDone()
          }
      }
      var scrollToCenterOf = function(elem, duration, offset, onDone) {
          scrollToY(Math.max(0, container.getTopOf(elem) - container.getHeight() / 2 + (offset || elem.getBoundingClientRect().height / 2)), duration, onDone)
      }
      var setup = function(newDefaultDuration, newEdgeOffset) {
          if (newDefaultDuration === 0 || newDefaultDuration) {
              defaultDuration = newDefaultDuration
          }
          if (newEdgeOffset === 0 || newEdgeOffset) {
              edgeOffset = newEdgeOffset
          }
          return {
              defaultDuration: defaultDuration,
              edgeOffset: edgeOffset
          }
      }
      return {
          setup: setup,
          to: scrollToElem,
          toY: scrollToY,
          intoView: scrollIntoView,
          center: scrollToCenterOf,
          stop: stopScroll,
          moving: function() {
              return !!scrollTimeoutId
          },
          getY: container.getY,
          getTopOf: container.getTopOf
      }
  }
  var docElem = document.documentElement
  var getDocY = function() {
      return window.scrollY || docElem.scrollTop
  }
  var zenscroll = makeScroller({
      body: document.scrollingElement || document.body,
      toY: function(y) {
          window.scrollTo(0, y)
      },
      getY: getDocY,
      getHeight: function() {
          return window.innerHeight || docElem.clientHeight
      },
      getTopOf: function(elem) {
          return elem.getBoundingClientRect().top + getDocY() - docElem.offsetTop
      }
  })
  zenscroll.createScroller = function(scrollContainer, defaultDuration, edgeOffset) {
      return makeScroller({
          body: scrollContainer,
          toY: function(y) {
              scrollContainer.scrollTop = y
          },
          getY: function() {
              return scrollContainer.scrollTop
          },
          getHeight: function() {
              return Math.min(scrollContainer.clientHeight, window.innerHeight || docElem.clientHeight)
          },
          getTopOf: function(elem) {
              return elem.offsetTop
          }
      }, defaultDuration, edgeOffset)
  }
  if ("addEventListener"in window && !window.noZensmooth && !isNativeSmoothScrollEnabledOn(document.body)) {
      var isHistorySupported = "history"in window && "pushState"in history
      var isScrollRestorationSupported = isHistorySupported && "scrollRestoration"in history
      if (isScrollRestorationSupported) {
          history.scrollRestoration = "auto"
      }
      window.addEventListener("load", function() {
          if (isScrollRestorationSupported) {
              setTimeout(function() {
                  history.scrollRestoration = "manual"
              }, 9)
              window.addEventListener("popstate", function(event) {
                  if (event.state && "zenscrollY"in event.state) {
                      zenscroll.toY(event.state.zenscrollY)
                  }
              }, false)
          }
          if (window.location.hash) {
              setTimeout(function() {
                  var edgeOffset = zenscroll.setup().edgeOffset
                  if (edgeOffset) {
                      var targetElem = document.getElementById(window.location.href.split("#")[1])
                      if (targetElem) {
                          var targetY = Math.max(0, zenscroll.getTopOf(targetElem) - edgeOffset)
                          var diff = zenscroll.getY() - targetY
                          if (0 <= diff && diff < 9) {
                              window.scrollTo(0, targetY)
                          }
                      }
                  }
              }, 9)
          }
      }, false)
      var RE_noZensmooth = new RegExp("(^|\\s)noZensmooth(\\s|$)")
      window.addEventListener("click", function(event) {
          var anchor = event.target
          while (anchor && anchor.tagName !== "A") {
              anchor = anchor.parentNode
          }
          if (!anchor || event.which !== 1 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {
              return
          }
          if (isScrollRestorationSupported) {
              var historyState = history.state && typeof history.state === "object" ? history.state : {}
              historyState.zenscrollY = zenscroll.getY()
              try {
                  history.replaceState(historyState, "")
              } catch (e) {}
          }
          var href = anchor.getAttribute("href") || ""
          if (href.indexOf("#") === 0 && !RE_noZensmooth.test(anchor.className)) {
              var targetY = 0
              var targetElem = document.getElementById(href.substring(1))
              if (href !== "#") {
                  if (!targetElem) {
                      return
                  }
                  targetY = zenscroll.getTopOf(targetElem)
              }
              event.preventDefault()
              var onDone = function() {
                  window.location = href
              }
              var edgeOffset = zenscroll.setup().edgeOffset
              if (edgeOffset) {
                  targetY = Math.max(0, targetY - edgeOffset)
                  if (isHistorySupported) {
                      onDone = function() {
                          history.pushState({}, "", href)
                      }
                  }
              }
              zenscroll.toY(targetY, null, onDone)
          }
      }, false)
  }
  return zenscroll
}));
var jupiterx = {
  components: {},
  utils: {},
};
jupiterx.components.Base = Class.extend({
  setElements: function() {
      this.elements = {}
      this.elements.window = window;
      this.elements.$window = $(window);
      this.elements.$document = $(document);
      this.elements.$body = $('body');
      this.elements.$site = $('.jupiterx-site');
  },
  setSettings: function() {
      this.settings = {}
      this.settings.windowWidth = this.elements.$window.outerWidth();
  },
  bindEvents: function() {},
  init: function() {
      this.setElements()
      this.setSettings()
      this.bindEvents()
  }
});
window.jupiterx = jupiterx;
(function($) {
  var jupiterx = window.jupiterx || {}
  jupiterx.utils = function() {
      this.resize = function() {
          var pubsub = jupiterx.pubsub
          $(window).on('resize', _.throttle(function() {
              var width = $(this).outerWidth()
              pubsub.publish('resize', width);
          }, 150));
      }
      ,
      this.scroll = function() {
          var pubsub = jupiterx.pubsub
          var $dom = $('[data-jupiterx-scroll]')
          var options = _.defaults($dom.data('jupiterxScroll') || {}, {
              offset: 1000,
          })
          $(window).on('scroll', _.throttle(function() {
              var position = $(this).scrollTop()
              pubsub.publish('scroll', position);
              if (_.size($dom) < 1)
                  return
              if (position > options.offset) {
                  return $dom.addClass('jupiterx-scrolled')
              }
              $dom.removeClass('jupiterx-scrolled')
          }, 100));
      }
      this.scrollSmooth = function() {
          var defaultDuration = 500
          zenscroll.setup(defaultDuration)
          $(document).on('click', '[data-jupiterx-scroll-target]', function(event) {
              var target = $(this).data('jupiterxScrollTarget')
              event.preventDefault()
              if (_.isNumber(target)) {
                  zenscroll.toY(target)
                  return
              }
              zenscroll.to($(target)[0])
          })
      }
      this.scrollDirection = function() {
          var pubsub = this.pubsub
          var $dom = $('[data-jupiterx-scroll-direction]')
          var scroll = updwn({
              speed: 50
          })
          scroll.up(function() {
              pubsub.publish('scroll-up');
              if (_.size($dom) < 1)
                  return
              $dom.addClass('jupiterx-scroll-up')
              $dom.removeClass('jupiterx-scroll-down')
          })
          scroll.down(function() {
              pubsub.publish('scroll-down');
              if (_.size($dom) < 1)
                  return
              $dom.addClass('jupiterx-scroll-down')
              $dom.removeClass('jupiterx-scroll-up')
          })
      }
      this.alterClass = function(elm, removals, additions) {
          var self = elm;
          if (removals.indexOf('*') === -1) {
              self.removeClass(removals);
              return !additions ? self : self.addClass(additions);
          }
          var patt = new RegExp('\\s' + removals.replace(/\*/g, '[A-Za-z0-9-_]+').split(' ').join('\\s|\\s') + '\\s','g');
          self.each(function(i, it) {
              var cn = ' ' + it.className + ' ';
              while (patt.test(cn)) {
                  cn = cn.replace(patt, ' ');
              }
              it.className = $.trim(cn);
          });
          return !additions ? self : self.addClass(additions);
      }
      this.init = function() {
          this.resize()
          this.scroll()
          this.scrollSmooth()
      }
      this.init()
  }
}
)(jQuery);
(function($) {
  var jupiterx = window.jupiterx || {}
  jupiterx.components.Header = jupiterx.components.Base.extend({
      setElements: function() {
          this._super()
          var elements = this.elements
          elements.header = '.jupiterx-header'
          elements.$header = $(elements.header)
          elements.$navbar = elements.$header.find('.navbar-nav')
          elements.$dropdownToggler = elements.$navbar.find('.dropdown-toggle-icon')
          elements.$window = $(window)
      },
      setSettings: function() {
          this._super()
          var settings = this.settings
          var headerSettings = this.elements.$header.data('jupiterxSettings')
          settings.breakpoint = headerSettings.breakpoint
          settings.template = headerSettings.template
          settings.stickyTemplate = headerSettings.stickyTemplate
          settings.behavior = headerSettings.behavior
          settings.position = headerSettings.position || 'top'
          settings.offset = headerSettings.offset
          settings.overlap = headerSettings.overlap
      },
      bindEvents: function() {
          var self = this
          var elements = this.elements
          var settings = this.settings
          self.setBehavior()
          self.mobileMenuScroll()
          elements.$dropdownToggler.on('click', function(event) {
              self.initNavbarDropdown(event)
              self.setHeight()
          })
          jupiterx.pubsub.subscribe('resize', function(windowWidth) {
              self.setBehavior()
              self.setHeight()
              if (windowWidth > settings.breakpoint) {
                  elements.$navbar.find('.dropdown-menu').removeClass('show')
              }
          })
          jupiterx.pubsub.subscribe('scroll', function(position) {
              self.setBehaviorSticky(position)
          })
      },
      setHeight: function() {
          var navContainer = this.elements.$header.find('.navbar-collapse')
          if (navContainer.length) {
              var navbar = this.elements.$navbar
              navContainer.css('max-height', document.documentElement.clientHeight - navContainer.offset().top + window.pageYOffset - parseInt(navbar.css('margin-top')));
          }
      },
      mobileMenuScroll: function() {
          var overlays = document.getElementsByClassName('navbar-collapse')
            , _clientY = null
          for (var i = 0; i < overlays.length; i++) {
              overlays[i].addEventListener('touchstart', function(event) {
                  if (event.targetTouches.length === 1) {
                      _clientY = event.targetTouches[0].clientY
                  }
              }, false)
              overlays[i].addEventListener('touchmove', function(event) {
                  if (event.targetTouches.length === 1) {
                      var clientY = event.targetTouches[0].clientY - _clientY
                      if (overlays[i].scrollTop === 0 && clientY > 0 && event.cancelable) {
                          event.preventDefault()
                      }
                      if (overlays[i].scrollHeight - overlays[i].scrollTop <= overlays[i].clientHeight && clientY < 0 && event.cancelable) {
                          event.preventDefault()
                      }
                  }
              }, false)
          }
      },
      setBehavior: function() {
          this.setBehaviorFixed()
          this.setBehaviorSticky()
      },
      setBehaviorFixed: function() {
          if (this.settings.behavior === 'fixed') {
              this.setSiteSpacing()
          }
      },
      setBehaviorSticky: function(position) {
          var elements = this.elements
            , settings = this.settings
          if (settings.behavior !== 'sticky') {
              return
          }
          if (position > settings.offset / 2) {
              elements.$body.addClass('jupiterx-header-stick')
              this.setSiteSpacing()
          } else {
              elements.$body.removeClass('jupiterx-header-stick')
              this.clearSiteSpacing()
          }
          if (position > settings.offset) {
              elements.$body.addClass('jupiterx-header-sticked')
          } else {
              elements.$body.removeClass('jupiterx-header-sticked')
          }
      },
      setSiteSpacing: function() {
          var elements = this.elements
            , settings = this.settings
          if (this.isOverlap()) {
              this.clearSiteSpacing()
              return
          }
          var $header = elements.$header
          if ($header.find('.elementor-' + settings.template).length) {
              $header = $header.find('.elementor-' + settings.template)
          }
          elements.$site.css('padding-' + settings.position, $header.outerHeight())
      },
      clearSiteSpacing: function() {
          this.elements.$site.css('padding-' + this.settings.position, '')
      },
      isOverlap: function() {
          var elements = this.elements
            , windowWidth = elements.$window.outerWidth()
            , overlap = this.settings.overlap
          if (!overlap) {
              return false
          }
          var desktop = (windowWidth > 768 && overlap.indexOf('desktop') > -1)
            , tablet = ((windowWidth < 767.98 && windowWidth > 576) && overlap.indexOf('tablet') > -1)
            , mobile = (windowWidth < 575.98 && overlap.indexOf('mobile') > -1)
          if (desktop || tablet || mobile) {
              return true
          }
          return false
      },
      initNavbarDropdown: function(event) {
          event.preventDefault()
          event.stopPropagation()
          if (this.elements.$window.outerWidth() > this.settings.breakpoint) {
              return
          }
          $(event.target).closest('.menu-item').find('> .dropdown-menu').toggleClass('show')
      },
      init: function() {
          this.setElements()
          if (!this.elements.$header.length) {
              return;
          }
          this.setSettings()
          this.bindEvents()
      }
  });
}
)(jQuery);
jQuery(document).ready(function($) {
  var elements = $('.jupiterx-sticky-sidebar .jupiterx-sidebar');
  Stickyfill.add(elements);
});
jQuery(document).ready(function($) {
  var $widget = $('.jupiterx-widget')
  var $menu_current_item = $widget.find('.current_page_item, .current-cat')
  if ($menu_current_item.length) {
      $menu_current_item.parents('.sub-menu, .children').slideToggle().parents('.menu-item-has-children, .cat-parent').toggleClass('jupiterx-icon-plus jupiterx-icon-minus')
  }
  $(document).on('click', '.jupiterx-widget .menu-item-has-children, .jupiterx-widget .cat-parent', function(e) {
      e.stopPropagation()
      if (e.target.nodeName === 'A') {
          return;
      }
      $(this).toggleClass('jupiterx-icon-plus jupiterx-icon-minus').find('> ul').slideToggle()
  });
});
jQuery(document).ready(function($) {
  $('.jupiterx-footer-fixed').each(function(index, element) {
      var footer = $(element), spacer
      spacer = $('<span></span>', {
          class: 'jupiterx-footer-dummy'
      })
      footer.after(spacer)
      $(window).resize(function() {
          if (spacer) {
              spacer.height(footer.outerHeight())
          }
      })
      spacer.height(footer.outerHeight())
  });
});
jQuery(document).ready(function($) {
  var jupiterx = window.jupiterx || {}
  jupiterx.initComponents = function() {
      for (component in this.components) {
          new this.components[component];
      }
  }
  jupiterx.init = function() {
      this.pubsub = new PubSub()
      this.pubsub.publish('init');
      this.utils = new this.utils()
      this.initComponents()
  }
  jupiterx.init();
});
if (typeof window.jQuery !== 'undefined') {
  $ = window.jQuery;
}
(function($) {
  if (typeof $ === 'undefined') {
      throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
  }
  var version = $.fn.jquery.split(' ')[0].split('.');
  var minMajor = 1;
  var ltMajor = 2;
  var minMinor = 9;
  var minPatch = 1;
  var maxMajor = 4;
  if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
      throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
  }
}
)($);
var Util = function($) {
  var TRANSITION_END = 'transitionend';
  var MAX_UID = 1000000;
  var MILLISECONDS_MULTIPLIER = 1000;
  function toType(obj) {
      return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
  }
  function getSpecialTransitionEndEvent() {
      return {
          bindType: TRANSITION_END,
          delegateType: TRANSITION_END,
          handle: function handle(event) {
              if ($(event.target).is(this)) {
                  return event.handleObj.handler.apply(this, arguments);
              }
              return undefined;
          }
      };
  }
  function transitionEndEmulator(duration) {
      var _this = this;
      var called = false;
      $(this).one(Util.TRANSITION_END, function() {
          called = true;
      });
      setTimeout(function() {
          if (!called) {
              Util.triggerTransitionEnd(_this);
          }
      }, duration);
      return this;
  }
  function setTransitionEndSupport() {
      $.fn.emulateTransitionEnd = transitionEndEmulator;
      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
  }
  var Util = {
      TRANSITION_END: 'bsTransitionEnd',
      getUID: function getUID(prefix) {
          do {
              prefix += ~~(Math.random() * MAX_UID);
          } while (document.getElementById(prefix));return prefix;
      },
      getSelectorFromElement: function getSelectorFromElement(element) {
          var selector = element.getAttribute('data-target');
          if (!selector || selector === '#') {
              selector = element.getAttribute('href') || '';
          }
          try {
              var $selector = $(document).find(selector);
              return $selector.length > 0 ? selector : null;
          } catch (err) {
              return null;
          }
      },
      getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
          if (!element) {
              return 0;
          }
          var transitionDuration = $(element).css('transition-duration');
          var floatTransitionDuration = parseFloat(transitionDuration);
          if (!floatTransitionDuration) {
              return 0;
          }
          transitionDuration = transitionDuration.split(',')[0];
          return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
      },
      reflow: function reflow(element) {
          return element.offsetHeight;
      },
      triggerTransitionEnd: function triggerTransitionEnd(element) {
          $(element).trigger(TRANSITION_END);
      },
      supportsTransitionEnd: function supportsTransitionEnd() {
          return Boolean(TRANSITION_END);
      },
      isElement: function isElement(obj) {
          return (obj[0] || obj).nodeType;
      },
      typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
          for (var property in configTypes) {
              if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
                  var expectedTypes = configTypes[property];
                  var value = config[property];
                  var valueType = value && Util.isElement(value) ? 'element' : toType(value);
                  if (!new RegExp(expectedTypes).test(valueType)) {
                      throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
                  }
              }
          }
      }
  };
  setTransitionEndSupport();
  return Util;
}($);
(function(global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.Popper = factory());
}(this, (function() {
  'use strict';
  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
  var timeoutDuration = 0;
  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
      if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
          timeoutDuration = 1;
          break;
      }
  }
  function microtaskDebounce(fn) {
      var called = false;
      return function() {
          if (called) {
              return;
          }
          called = true;
          window.Promise.resolve().then(function() {
              called = false;
              fn();
          });
      }
      ;
  }
  function taskDebounce(fn) {
      var scheduled = false;
      return function() {
          if (!scheduled) {
              scheduled = true;
              setTimeout(function() {
                  scheduled = false;
                  fn();
              }, timeoutDuration);
          }
      }
      ;
  }
  var supportsMicroTasks = isBrowser && window.Promise;
  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
  function isFunction(functionToCheck) {
      var getType = {};
      return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
  }
  function getStyleComputedProperty(element, property) {
      if (element.nodeType !== 1) {
          return [];
      }
      var css = getComputedStyle(element, null);
      return property ? css[property] : css;
  }
  function getParentNode(element) {
      if (element.nodeName === 'HTML') {
          return element;
      }
      return element.parentNode || element.host;
  }
  function getScrollParent(element) {
      if (!element) {
          return document.body;
      }
      switch (element.nodeName) {
      case 'HTML':
      case 'BODY':
          return element.ownerDocument.body;
      case '#document':
          return element.body;
      }
      var _getStyleComputedProp = getStyleComputedProperty(element)
        , overflow = _getStyleComputedProp.overflow
        , overflowX = _getStyleComputedProp.overflowX
        , overflowY = _getStyleComputedProp.overflowY;
      if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
          return element;
      }
      return getScrollParent(getParentNode(element));
  }
  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
  function isIE(version) {
      if (version === 11) {
          return isIE11;
      }
      if (version === 10) {
          return isIE10;
      }
      return isIE11 || isIE10;
  }
  function getOffsetParent(element) {
      if (!element) {
          return document.documentElement;
      }
      var noOffsetParent = isIE(10) ? document.body : null;
      var offsetParent = element.offsetParent;
      while (offsetParent === noOffsetParent && element.nextElementSibling) {
          offsetParent = (element = element.nextElementSibling).offsetParent;
      }
      var nodeName = offsetParent && offsetParent.nodeName;
      if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
          return element ? element.ownerDocument.documentElement : document.documentElement;
      }
      if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
          return getOffsetParent(offsetParent);
      }
      return offsetParent;
  }
  function isOffsetContainer(element) {
      var nodeName = element.nodeName;
      if (nodeName === 'BODY') {
          return false;
      }
      return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
  }
  function getRoot(node) {
      if (node.parentNode !== null) {
          return getRoot(node.parentNode);
      }
      return node;
  }
  function findCommonOffsetParent(element1, element2) {
      if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
          return document.documentElement;
      }
      var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
      var start = order ? element1 : element2;
      var end = order ? element2 : element1;
      var range = document.createRange();
      range.setStart(start, 0);
      range.setEnd(end, 0);
      var commonAncestorContainer = range.commonAncestorContainer;
      if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
          if (isOffsetContainer(commonAncestorContainer)) {
              return commonAncestorContainer;
          }
          return getOffsetParent(commonAncestorContainer);
      }
      var element1root = getRoot(element1);
      if (element1root.host) {
          return findCommonOffsetParent(element1root.host, element2);
      } else {
          return findCommonOffsetParent(element1, getRoot(element2).host);
      }
  }
  function getScroll(element) {
      var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
      var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
      var nodeName = element.nodeName;
      if (nodeName === 'BODY' || nodeName === 'HTML') {
          var html = element.ownerDocument.documentElement;
          var scrollingElement = element.ownerDocument.scrollingElement || html;
          return scrollingElement[upperSide];
      }
      return element[upperSide];
  }
  function includeScroll(rect, element) {
      var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
      var scrollTop = getScroll(element, 'top');
      var scrollLeft = getScroll(element, 'left');
      var modifier = subtract ? -1 : 1;
      rect.top += scrollTop * modifier;
      rect.bottom += scrollTop * modifier;
      rect.left += scrollLeft * modifier;
      rect.right += scrollLeft * modifier;
      return rect;
  }
  function getBordersSize(styles, axis) {
      var sideA = axis === 'x' ? 'Left' : 'Top';
      var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
      return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
  }
  function getSize(axis, body, html, computedStyle) {
      return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
  }
  function getWindowSizes() {
      var body = document.body;
      var html = document.documentElement;
      var computedStyle = isIE(10) && getComputedStyle(html);
      return {
          height: getSize('Height', body, html, computedStyle),
          width: getSize('Width', body, html, computedStyle)
      };
  }
  var classCallCheck = function(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
          throw new TypeError("Cannot call a class as a function");
      }
  };
  var createClass = function() {
      function defineProperties(target, props) {
          for (var i = 0; i < props.length; i++) {
              var descriptor = props[i];
              descriptor.enumerable = descriptor.enumerable || false;
              descriptor.configurable = true;
              if ("value"in descriptor)
                  descriptor.writable = true;
              Object.defineProperty(target, descriptor.key, descriptor);
          }
      }
      return function(Constructor, protoProps, staticProps) {
          if (protoProps)
              defineProperties(Constructor.prototype, protoProps);
          if (staticProps)
              defineProperties(Constructor, staticProps);
          return Constructor;
      }
      ;
  }();
  var defineProperty = function(obj, key, value) {
      if (key in obj) {
          Object.defineProperty(obj, key, {
              value: value,
              enumerable: true,
              configurable: true,
              writable: true
          });
      } else {
          obj[key] = value;
      }
      return obj;
  };
  var _extends = Object.assign || function(target) {
      for (var i = 1; i < arguments.length; i++) {
          var source = arguments[i];
          for (var key in source) {
              if (Object.prototype.hasOwnProperty.call(source, key)) {
                  target[key] = source[key];
              }
          }
      }
      return target;
  }
  ;
  function getClientRect(offsets) {
      return _extends({}, offsets, {
          right: offsets.left + offsets.width,
          bottom: offsets.top + offsets.height
      });
  }
  function getBoundingClientRect(element) {
      var rect = {};
      try {
          if (isIE(10)) {
              rect = element.getBoundingClientRect();
              var scrollTop = getScroll(element, 'top');
              var scrollLeft = getScroll(element, 'left');
              rect.top += scrollTop;
              rect.left += scrollLeft;
              rect.bottom += scrollTop;
              rect.right += scrollLeft;
          } else {
              rect = element.getBoundingClientRect();
          }
      } catch (e) {}
      var result = {
          left: rect.left,
          top: rect.top,
          width: rect.right - rect.left,
          height: rect.bottom - rect.top
      };
      var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
      var width = sizes.width || element.clientWidth || result.right - result.left;
      var height = sizes.height || element.clientHeight || result.bottom - result.top;
      var horizScrollbar = element.offsetWidth - width;
      var vertScrollbar = element.offsetHeight - height;
      if (horizScrollbar || vertScrollbar) {
          var styles = getStyleComputedProperty(element);
          horizScrollbar -= getBordersSize(styles, 'x');
          vertScrollbar -= getBordersSize(styles, 'y');
          result.width -= horizScrollbar;
          result.height -= vertScrollbar;
      }
      return getClientRect(result);
  }
  function getOffsetRectRelativeToArbitraryNode(children, parent) {
      var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
      var isIE10 = isIE(10);
      var isHTML = parent.nodeName === 'HTML';
      var childrenRect = getBoundingClientRect(children);
      var parentRect = getBoundingClientRect(parent);
      var scrollParent = getScrollParent(children);
      var styles = getStyleComputedProperty(parent);
      var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
      var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
      if (fixedPosition && parent.nodeName === 'HTML') {
          parentRect.top = Math.max(parentRect.top, 0);
          parentRect.left = Math.max(parentRect.left, 0);
      }
      var offsets = getClientRect({
          top: childrenRect.top - parentRect.top - borderTopWidth,
          left: childrenRect.left - parentRect.left - borderLeftWidth,
          width: childrenRect.width,
          height: childrenRect.height
      });
      offsets.marginTop = 0;
      offsets.marginLeft = 0;
      if (!isIE10 && isHTML) {
          var marginTop = parseFloat(styles.marginTop, 10);
          var marginLeft = parseFloat(styles.marginLeft, 10);
          offsets.top -= borderTopWidth - marginTop;
          offsets.bottom -= borderTopWidth - marginTop;
          offsets.left -= borderLeftWidth - marginLeft;
          offsets.right -= borderLeftWidth - marginLeft;
          offsets.marginTop = marginTop;
          offsets.marginLeft = marginLeft;
      }
      if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
          offsets = includeScroll(offsets, parent);
      }
      return offsets;
  }
  function getViewportOffsetRectRelativeToArtbitraryNode(element) {
      var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var html = element.ownerDocument.documentElement;
      var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
      var width = Math.max(html.clientWidth, window.innerWidth || 0);
      var height = Math.max(html.clientHeight, window.innerHeight || 0);
      var scrollTop = !excludeScroll ? getScroll(html) : 0;
      var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
      var offset = {
          top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
          left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
          width: width,
          height: height
      };
      return getClientRect(offset);
  }
  function isFixed(element) {
      var nodeName = element.nodeName;
      if (nodeName === 'BODY' || nodeName === 'HTML') {
          return false;
      }
      if (getStyleComputedProperty(element, 'position') === 'fixed') {
          return true;
      }
      return isFixed(getParentNode(element));
  }
  function getFixedPositionOffsetParent(element) {
      if (!element || !element.parentElement || isIE()) {
          return document.documentElement;
      }
      var el = element.parentElement;
      while (el && getStyleComputedProperty(el, 'transform') === 'none') {
          el = el.parentElement;
      }
      return el || document.documentElement;
  }
  function getBoundaries(popper, reference, padding, boundariesElement) {
      var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
      var boundaries = {
          top: 0,
          left: 0
      };
      var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
      if (boundariesElement === 'viewport') {
          boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
      } else {
          var boundariesNode = void 0;
          if (boundariesElement === 'scrollParent') {
              boundariesNode = getScrollParent(getParentNode(reference));
              if (boundariesNode.nodeName === 'BODY') {
                  boundariesNode = popper.ownerDocument.documentElement;
              }
          } else if (boundariesElement === 'window') {
              boundariesNode = popper.ownerDocument.documentElement;
          } else {
              boundariesNode = boundariesElement;
          }
          var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
          if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
              var _getWindowSizes = getWindowSizes()
                , height = _getWindowSizes.height
                , width = _getWindowSizes.width;
              boundaries.top += offsets.top - offsets.marginTop;
              boundaries.bottom = height + offsets.top;
              boundaries.left += offsets.left - offsets.marginLeft;
              boundaries.right = width + offsets.left;
          } else {
              boundaries = offsets;
          }
      }
      boundaries.left += padding;
      boundaries.top += padding;
      boundaries.right -= padding;
      boundaries.bottom -= padding;
      return boundaries;
  }
  function getArea(_ref) {
      var width = _ref.width
        , height = _ref.height;
      return width * height;
  }
  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
      var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
      if (placement.indexOf('auto') === -1) {
          return placement;
      }
      var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
      var rects = {
          top: {
              width: boundaries.width,
              height: refRect.top - boundaries.top
          },
          right: {
              width: boundaries.right - refRect.right,
              height: boundaries.height
          },
          bottom: {
              width: boundaries.width,
              height: boundaries.bottom - refRect.bottom
          },
          left: {
              width: refRect.left - boundaries.left,
              height: boundaries.height
          }
      };
      var sortedAreas = Object.keys(rects).map(function(key) {
          return _extends({
              key: key
          }, rects[key], {
              area: getArea(rects[key])
          });
      }).sort(function(a, b) {
          return b.area - a.area;
      });
      var filteredAreas = sortedAreas.filter(function(_ref2) {
          var width = _ref2.width
            , height = _ref2.height;
          return width >= popper.clientWidth && height >= popper.clientHeight;
      });
      var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
      var variation = placement.split('-')[1];
      return computedPlacement + (variation ? '-' + variation : '');
  }
  function getReferenceOffsets(state, popper, reference) {
      var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
      var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
      return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
  }
  function getOuterSizes(element) {
      var styles = getComputedStyle(element);
      var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
      var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
      var result = {
          width: element.offsetWidth + y,
          height: element.offsetHeight + x
      };
      return result;
  }
  function getOppositePlacement(placement) {
      var hash = {
          left: 'right',
          right: 'left',
          bottom: 'top',
          top: 'bottom'
      };
      return placement.replace(/left|right|bottom|top/g, function(matched) {
          return hash[matched];
      });
  }
  function getPopperOffsets(popper, referenceOffsets, placement) {
      placement = placement.split('-')[0];
      var popperRect = getOuterSizes(popper);
      var popperOffsets = {
          width: popperRect.width,
          height: popperRect.height
      };
      var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
      var mainSide = isHoriz ? 'top' : 'left';
      var secondarySide = isHoriz ? 'left' : 'top';
      var measurement = isHoriz ? 'height' : 'width';
      var secondaryMeasurement = !isHoriz ? 'height' : 'width';
      popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
      if (placement === secondarySide) {
          popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
      } else {
          popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
      }
      return popperOffsets;
  }
  function find(arr, check) {
      if (Array.prototype.find) {
          return arr.find(check);
      }
      return arr.filter(check)[0];
  }
  function findIndex(arr, prop, value) {
      if (Array.prototype.findIndex) {
          return arr.findIndex(function(cur) {
              return cur[prop] === value;
          });
      }
      var match = find(arr, function(obj) {
          return obj[prop] === value;
      });
      return arr.indexOf(match);
  }
  function runModifiers(modifiers, data, ends) {
      var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
      modifiersToRun.forEach(function(modifier) {
          if (modifier['function']) {
              console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
          }
          var fn = modifier['function'] || modifier.fn;
          if (modifier.enabled && isFunction(fn)) {
              data.offsets.popper = getClientRect(data.offsets.popper);
              data.offsets.reference = getClientRect(data.offsets.reference);
              data = fn(data, modifier);
          }
      });
      return data;
  }
  function update() {
      if (this.state.isDestroyed) {
          return;
      }
      var data = {
          instance: this,
          styles: {},
          arrowStyles: {},
          attributes: {},
          flipped: false,
          offsets: {}
      };
      data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
      data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
      data.originalPlacement = data.placement;
      data.positionFixed = this.options.positionFixed;
      data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
      data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
      data = runModifiers(this.modifiers, data);
      if (!this.state.isCreated) {
          this.state.isCreated = true;
          this.options.onCreate(data);
      } else {
          this.options.onUpdate(data);
      }
  }
  function isModifierEnabled(modifiers, modifierName) {
      return modifiers.some(function(_ref) {
          var name = _ref.name
            , enabled = _ref.enabled;
          return enabled && name === modifierName;
      });
  }
  function getSupportedPropertyName(property) {
      var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
      var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
      for (var i = 0; i < prefixes.length; i++) {
          var prefix = prefixes[i];
          var toCheck = prefix ? '' + prefix + upperProp : property;
          if (typeof document.body.style[toCheck] !== 'undefined') {
              return toCheck;
          }
      }
      return null;
  }
  function destroy() {
      this.state.isDestroyed = true;
      if (isModifierEnabled(this.modifiers, 'applyStyle')) {
          this.popper.removeAttribute('x-placement');
          this.popper.style.position = '';
          this.popper.style.top = '';
          this.popper.style.left = '';
          this.popper.style.right = '';
          this.popper.style.bottom = '';
          this.popper.style.willChange = '';
          this.popper.style[getSupportedPropertyName('transform')] = '';
      }
      this.disableEventListeners();
      if (this.options.removeOnDestroy) {
          this.popper.parentNode.removeChild(this.popper);
      }
      return this;
  }
  function getWindow(element) {
      var ownerDocument = element.ownerDocument;
      return ownerDocument ? ownerDocument.defaultView : window;
  }
  function attachToScrollParents(scrollParent, event, callback, scrollParents) {
      var isBody = scrollParent.nodeName === 'BODY';
      var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
      target.addEventListener(event, callback, {
          passive: true
      });
      if (!isBody) {
          attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
      }
      scrollParents.push(target);
  }
  function setupEventListeners(reference, options, state, updateBound) {
      state.updateBound = updateBound;
      getWindow(reference).addEventListener('resize', state.updateBound, {
          passive: true
      });
      var scrollElement = getScrollParent(reference);
      attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
      state.scrollElement = scrollElement;
      state.eventsEnabled = true;
      return state;
  }
  function enableEventListeners() {
      if (!this.state.eventsEnabled) {
          this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
      }
  }
  function removeEventListeners(reference, state) {
      getWindow(reference).removeEventListener('resize', state.updateBound);
      state.scrollParents.forEach(function(target) {
          target.removeEventListener('scroll', state.updateBound);
      });
      state.updateBound = null;
      state.scrollParents = [];
      state.scrollElement = null;
      state.eventsEnabled = false;
      return state;
  }
  function disableEventListeners() {
      if (this.state.eventsEnabled) {
          cancelAnimationFrame(this.scheduleUpdate);
          this.state = removeEventListeners(this.reference, this.state);
      }
  }
  function isNumeric(n) {
      return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
  }
  function setStyles(element, styles) {
      Object.keys(styles).forEach(function(prop) {
          var unit = '';
          if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
              unit = 'px';
          }
          element.style[prop] = styles[prop] + unit;
      });
  }
  function setAttributes(element, attributes) {
      Object.keys(attributes).forEach(function(prop) {
          var value = attributes[prop];
          if (value !== false) {
              element.setAttribute(prop, attributes[prop]);
          } else {
              element.removeAttribute(prop);
          }
      });
  }
  function applyStyle(data) {
      setStyles(data.instance.popper, data.styles);
      setAttributes(data.instance.popper, data.attributes);
      if (data.arrowElement && Object.keys(data.arrowStyles).length) {
          setStyles(data.arrowElement, data.arrowStyles);
      }
      return data;
  }
  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
      var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
      var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
      popper.setAttribute('x-placement', placement);
      setStyles(popper, {
          position: options.positionFixed ? 'fixed' : 'absolute'
      });
      return options;
  }
  function computeStyle(data, options) {
      var x = options.x
        , y = options.y;
      var popper = data.offsets.popper;
      var legacyGpuAccelerationOption = find(data.instance.modifiers, function(modifier) {
          return modifier.name === 'applyStyle';
      }).gpuAcceleration;
      if (legacyGpuAccelerationOption !== undefined) {
          console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
      }
      var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
      var offsetParent = getOffsetParent(data.instance.popper);
      var offsetParentRect = getBoundingClientRect(offsetParent);
      var styles = {
          position: popper.position
      };
      var offsets = {
          left: Math.floor(popper.left),
          top: Math.round(popper.top),
          bottom: Math.round(popper.bottom),
          right: Math.floor(popper.right)
      };
      var sideA = x === 'bottom' ? 'top' : 'bottom';
      var sideB = y === 'right' ? 'left' : 'right';
      var prefixedProperty = getSupportedPropertyName('transform');
      var left = void 0
        , top = void 0;
      if (sideA === 'bottom') {
          top = -offsetParentRect.height + offsets.bottom;
      } else {
          top = offsets.top;
      }
      if (sideB === 'right') {
          left = -offsetParentRect.width + offsets.right;
      } else {
          left = offsets.left;
      }
      if (gpuAcceleration && prefixedProperty) {
          styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
          styles[sideA] = 0;
          styles[sideB] = 0;
          styles.willChange = 'transform';
      } else {
          var invertTop = sideA === 'bottom' ? -1 : 1;
          var invertLeft = sideB === 'right' ? -1 : 1;
          styles[sideA] = top * invertTop;
          styles[sideB] = left * invertLeft;
          styles.willChange = sideA + ', ' + sideB;
      }
      var attributes = {
          'x-placement': data.placement
      };
      data.attributes = _extends({}, attributes, data.attributes);
      data.styles = _extends({}, styles, data.styles);
      data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
      return data;
  }
  function isModifierRequired(modifiers, requestingName, requestedName) {
      var requesting = find(modifiers, function(_ref) {
          var name = _ref.name;
          return name === requestingName;
      });
      var isRequired = !!requesting && modifiers.some(function(modifier) {
          return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
      });
      if (!isRequired) {
          var _requesting = '`' + requestingName + '`';
          var requested = '`' + requestedName + '`';
          console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
      }
      return isRequired;
  }
  function arrow(data, options) {
      var _data$offsets$arrow;
      if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
          return data;
      }
      var arrowElement = options.element;
      if (typeof arrowElement === 'string') {
          arrowElement = data.instance.popper.querySelector(arrowElement);
          if (!arrowElement) {
              return data;
          }
      } else {
          if (!data.instance.popper.contains(arrowElement)) {
              console.warn('WARNING: `arrow.element` must be child of its popper element!');
              return data;
          }
      }
      var placement = data.placement.split('-')[0];
      var _data$offsets = data.offsets
        , popper = _data$offsets.popper
        , reference = _data$offsets.reference;
      var isVertical = ['left', 'right'].indexOf(placement) !== -1;
      var len = isVertical ? 'height' : 'width';
      var sideCapitalized = isVertical ? 'Top' : 'Left';
      var side = sideCapitalized.toLowerCase();
      var altSide = isVertical ? 'left' : 'top';
      var opSide = isVertical ? 'bottom' : 'right';
      var arrowElementSize = getOuterSizes(arrowElement)[len];
      if (reference[opSide] - arrowElementSize < popper[side]) {
          data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
      }
      if (reference[side] + arrowElementSize > popper[opSide]) {
          data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
      }
      data.offsets.popper = getClientRect(data.offsets.popper);
      var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
      var css = getStyleComputedProperty(data.instance.popper);
      var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
      var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
      var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
      sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
      data.arrowElement = arrowElement;
      data.offsets.arrow = (_data$offsets$arrow = {},
      defineProperty(_data$offsets$arrow, side, Math.round(sideValue)),
      defineProperty(_data$offsets$arrow, altSide, ''),
      _data$offsets$arrow);
      return data;
  }
  function getOppositeVariation(variation) {
      if (variation === 'end') {
          return 'start';
      } else if (variation === 'start') {
          return 'end';
      }
      return variation;
  }
  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
  var validPlacements = placements.slice(3);
  function clockwise(placement) {
      var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var index = validPlacements.indexOf(placement);
      var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
      return counter ? arr.reverse() : arr;
  }
  var BEHAVIORS = {
      FLIP: 'flip',
      CLOCKWISE: 'clockwise',
      COUNTERCLOCKWISE: 'counterclockwise'
  };
  function flip(data, options) {
      if (isModifierEnabled(data.instance.modifiers, 'inner')) {
          return data;
      }
      if (data.flipped && data.placement === data.originalPlacement) {
          return data;
      }
      var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
      var placement = data.placement.split('-')[0];
      var placementOpposite = getOppositePlacement(placement);
      var variation = data.placement.split('-')[1] || '';
      var flipOrder = [];
      switch (options.behavior) {
      case BEHAVIORS.FLIP:
          flipOrder = [placement, placementOpposite];
          break;
      case BEHAVIORS.CLOCKWISE:
          flipOrder = clockwise(placement);
          break;
      case BEHAVIORS.COUNTERCLOCKWISE:
          flipOrder = clockwise(placement, true);
          break;
      default:
          flipOrder = options.behavior;
      }
      flipOrder.forEach(function(step, index) {
          if (placement !== step || flipOrder.length === index + 1) {
              return data;
          }
          placement = data.placement.split('-')[0];
          placementOpposite = getOppositePlacement(placement);
          var popperOffsets = data.offsets.popper;
          var refOffsets = data.offsets.reference;
          var floor = Math.floor;
          var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
          var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
          var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
          var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
          var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
          var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
          var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
          var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
          if (overlapsRef || overflowsBoundaries || flippedVariation) {
              data.flipped = true;
              if (overlapsRef || overflowsBoundaries) {
                  placement = flipOrder[index + 1];
              }
              if (flippedVariation) {
                  variation = getOppositeVariation(variation);
              }
              data.placement = placement + (variation ? '-' + variation : '');
              data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
              data = runModifiers(data.instance.modifiers, data, 'flip');
          }
      });
      return data;
  }
  function keepTogether(data) {
      var _data$offsets = data.offsets
        , popper = _data$offsets.popper
        , reference = _data$offsets.reference;
      var placement = data.placement.split('-')[0];
      var floor = Math.floor;
      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
      var side = isVertical ? 'right' : 'bottom';
      var opSide = isVertical ? 'left' : 'top';
      var measurement = isVertical ? 'width' : 'height';
      if (popper[side] < floor(reference[opSide])) {
          data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
      }
      if (popper[opSide] > floor(reference[side])) {
          data.offsets.popper[opSide] = floor(reference[side]);
      }
      return data;
  }
  function toValue(str, measurement, popperOffsets, referenceOffsets) {
      var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
      var value = +split[1];
      var unit = split[2];
      if (!value) {
          return str;
      }
      if (unit.indexOf('%') === 0) {
          var element = void 0;
          switch (unit) {
          case '%p':
              element = popperOffsets;
              break;
          case '%':
          case '%r':
          default:
              element = referenceOffsets;
          }
          var rect = getClientRect(element);
          return rect[measurement] / 100 * value;
      } else if (unit === 'vh' || unit === 'vw') {
          var size = void 0;
          if (unit === 'vh') {
              size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
          } else {
              size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
          }
          return size / 100 * value;
      } else {
          return value;
      }
  }
  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
      var offsets = [0, 0];
      var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
      var fragments = offset.split(/(\+|\-)/).map(function(frag) {
          return frag.trim();
      });
      var divider = fragments.indexOf(find(fragments, function(frag) {
          return frag.search(/,|\s/) !== -1;
      }));
      if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
          console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
      }
      var splitRegex = /\s*,\s*|\s+/;
      var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
      ops = ops.map(function(op, index) {
          var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
          var mergeWithPrevious = false;
          return op.reduce(function(a, b) {
              if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
                  a[a.length - 1] = b;
                  mergeWithPrevious = true;
                  return a;
              } else if (mergeWithPrevious) {
                  a[a.length - 1] += b;
                  mergeWithPrevious = false;
                  return a;
              } else {
                  return a.concat(b);
              }
          }, []).map(function(str) {
              return toValue(str, measurement, popperOffsets, referenceOffsets);
          });
      });
      ops.forEach(function(op, index) {
          op.forEach(function(frag, index2) {
              if (isNumeric(frag)) {
                  offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
              }
          });
      });
      return offsets;
  }
  function offset(data, _ref) {
      var offset = _ref.offset;
      var placement = data.placement
        , _data$offsets = data.offsets
        , popper = _data$offsets.popper
        , reference = _data$offsets.reference;
      var basePlacement = placement.split('-')[0];
      var offsets = void 0;
      if (isNumeric(+offset)) {
          offsets = [+offset, 0];
      } else {
          offsets = parseOffset(offset, popper, reference, basePlacement);
      }
      if (basePlacement === 'left') {
          popper.top += offsets[0];
          popper.left -= offsets[1];
      } else if (basePlacement === 'right') {
          popper.top += offsets[0];
          popper.left += offsets[1];
      } else if (basePlacement === 'top') {
          popper.left += offsets[0];
          popper.top -= offsets[1];
      } else if (basePlacement === 'bottom') {
          popper.left += offsets[0];
          popper.top += offsets[1];
      }
      data.popper = popper;
      return data;
  }
  function preventOverflow(data, options) {
      var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
      if (data.instance.reference === boundariesElement) {
          boundariesElement = getOffsetParent(boundariesElement);
      }
      var transformProp = getSupportedPropertyName('transform');
      var popperStyles = data.instance.popper.style;
      var top = popperStyles.top
        , left = popperStyles.left
        , transform = popperStyles[transformProp];
      popperStyles.top = '';
      popperStyles.left = '';
      popperStyles[transformProp] = '';
      var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
      popperStyles.top = top;
      popperStyles.left = left;
      popperStyles[transformProp] = transform;
      options.boundaries = boundaries;
      var order = options.priority;
      var popper = data.offsets.popper;
      var check = {
          primary: function primary(placement) {
              var value = popper[placement];
              if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
                  value = Math.max(popper[placement], boundaries[placement]);
              }
              return defineProperty({}, placement, value);
          },
          secondary: function secondary(placement) {
              var mainSide = placement === 'right' ? 'left' : 'top';
              var value = popper[mainSide];
              if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
                  value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
              }
              return defineProperty({}, mainSide, value);
          }
      };
      order.forEach(function(placement) {
          var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
          popper = _extends({}, popper, check[side](placement));
      });
      data.offsets.popper = popper;
      return data;
  }
  function shift(data) {
      var placement = data.placement;
      var basePlacement = placement.split('-')[0];
      var shiftvariation = placement.split('-')[1];
      if (shiftvariation) {
          var _data$offsets = data.offsets
            , reference = _data$offsets.reference
            , popper = _data$offsets.popper;
          var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
          var side = isVertical ? 'left' : 'top';
          var measurement = isVertical ? 'width' : 'height';
          var shiftOffsets = {
              start: defineProperty({}, side, reference[side]),
              end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
          };
          data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
      }
      return data;
  }
  function hide(data) {
      if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
          return data;
      }
      var refRect = data.offsets.reference;
      var bound = find(data.instance.modifiers, function(modifier) {
          return modifier.name === 'preventOverflow';
      }).boundaries;
      if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
          if (data.hide === true) {
              return data;
          }
          data.hide = true;
          data.attributes['x-out-of-boundaries'] = '';
      } else {
          if (data.hide === false) {
              return data;
          }
          data.hide = false;
          data.attributes['x-out-of-boundaries'] = false;
      }
      return data;
  }
  function inner(data) {
      var placement = data.placement;
      var basePlacement = placement.split('-')[0];
      var _data$offsets = data.offsets
        , popper = _data$offsets.popper
        , reference = _data$offsets.reference;
      var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
      var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
      popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
      data.placement = getOppositePlacement(placement);
      data.offsets.popper = getClientRect(popper);
      return data;
  }
  var modifiers = {
      shift: {
          order: 100,
          enabled: true,
          fn: shift
      },
      offset: {
          order: 200,
          enabled: true,
          fn: offset,
          offset: 0
      },
      preventOverflow: {
          order: 300,
          enabled: true,
          fn: preventOverflow,
          priority: ['left', 'right', 'top', 'bottom'],
          padding: 5,
          boundariesElement: 'scrollParent'
      },
      keepTogether: {
          order: 400,
          enabled: true,
          fn: keepTogether
      },
      arrow: {
          order: 500,
          enabled: true,
          fn: arrow,
          element: '[x-arrow]'
      },
      flip: {
          order: 600,
          enabled: true,
          fn: flip,
          behavior: 'flip',
          padding: 5,
          boundariesElement: 'viewport'
      },
      inner: {
          order: 700,
          enabled: false,
          fn: inner
      },
      hide: {
          order: 800,
          enabled: true,
          fn: hide
      },
      computeStyle: {
          order: 850,
          enabled: true,
          fn: computeStyle,
          gpuAcceleration: true,
          x: 'bottom',
          y: 'right'
      },
      applyStyle: {
          order: 900,
          enabled: true,
          fn: applyStyle,
          onLoad: applyStyleOnLoad,
          gpuAcceleration: undefined
      }
  };
  var Defaults = {
      placement: 'bottom',
      positionFixed: false,
      eventsEnabled: true,
      removeOnDestroy: false,
      onCreate: function onCreate() {},
      onUpdate: function onUpdate() {},
      modifiers: modifiers
  };
  var Popper = function() {
      function Popper(reference, popper) {
          var _this = this;
          var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
          classCallCheck(this, Popper);
          this.scheduleUpdate = function() {
              return requestAnimationFrame(_this.update);
          }
          ;
          this.update = debounce(this.update.bind(this));
          this.options = _extends({}, Popper.Defaults, options);
          this.state = {
              isDestroyed: false,
              isCreated: false,
              scrollParents: []
          };
          this.reference = reference && reference.jquery ? reference[0] : reference;
          this.popper = popper && popper.jquery ? popper[0] : popper;
          this.options.modifiers = {};
          Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function(name) {
              _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
          });
          this.modifiers = Object.keys(this.options.modifiers).map(function(name) {
              return _extends({
                  name: name
              }, _this.options.modifiers[name]);
          }).sort(function(a, b) {
              return a.order - b.order;
          });
          this.modifiers.forEach(function(modifierOptions) {
              if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
                  modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
              }
          });
          this.update();
          var eventsEnabled = this.options.eventsEnabled;
          if (eventsEnabled) {
              this.enableEventListeners();
          }
          this.state.eventsEnabled = eventsEnabled;
      }
      createClass(Popper, [{
          key: 'update',
          value: function update$$1() {
              return update.call(this);
          }
      }, {
          key: 'destroy',
          value: function destroy$$1() {
              return destroy.call(this);
          }
      }, {
          key: 'enableEventListeners',
          value: function enableEventListeners$$1() {
              return enableEventListeners.call(this);
          }
      }, {
          key: 'disableEventListeners',
          value: function disableEventListeners$$1() {
              return disableEventListeners.call(this);
          }
      }]);
      return Popper;
  }();
  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
  Popper.placements = placements;
  Popper.Defaults = Defaults;
  return Popper;
}
)));
function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);
      if (typeof Object.getOwnPropertySymbols === 'function') {
          ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
              return Object.getOwnPropertyDescriptor(source, sym).enumerable;
          }));
      }
      ownKeys.forEach(function(key) {
          _defineProperty(target, key, source[key]);
      });
  }
  return target;
}
function _defineProperty(obj, key, value) {
  if (key in obj) {
      Object.defineProperty(obj, key, {
          value: value,
          enumerable: true,
          configurable: true,
          writable: true
      });
  } else {
      obj[key] = value;
  }
  return obj;
}
function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value"in descriptor)
          descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
  }
}
function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps)
      _defineProperties(Constructor.prototype, protoProps);
  if (staticProps)
      _defineProperties(Constructor, staticProps);
  return Constructor;
}
var Dropdown = function($) {
  var NAME = 'dropdown';
  var VERSION = '4.1.0';
  var DATA_KEY = 'bs.dropdown';
  var EVENT_KEY = "." + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var ESCAPE_KEYCODE = 27;
  var SPACE_KEYCODE = 32;
  var TAB_KEYCODE = 9;
  var ARROW_UP_KEYCODE = 38;
  var ARROW_DOWN_KEYCODE = 40;
  var RIGHT_MOUSE_BUTTON_WHICH = 3;
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
  var Event = {
      HIDE: "hide" + EVENT_KEY,
      HIDDEN: "hidden" + EVENT_KEY,
      SHOW: "show" + EVENT_KEY,
      SHOWN: "shown" + EVENT_KEY,
      CLICK: "click" + EVENT_KEY,
      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
      KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
      KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
  };
  var ClassName = {
      DISABLED: 'disabled',
      SHOW: 'show',
      DROPUP: 'dropup',
      DROPRIGHT: 'dropright',
      DROPLEFT: 'dropleft',
      MENURIGHT: 'dropdown-menu-right',
      MENULEFT: 'dropdown-menu-left',
      POSITION_STATIC: 'position-static'
  };
  var Selector = {
      DATA_TOGGLE: '[data-toggle="dropdown"]',
      FORM_CHILD: '.dropdown form',
      MENU: '.dropdown-menu',
      NAVBAR_NAV: '.navbar-nav',
      VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
  };
  var AttachmentMap = {
      TOP: 'top-start',
      TOPEND: 'top-end',
      BOTTOM: 'bottom-start',
      BOTTOMEND: 'bottom-end',
      RIGHT: 'right-start',
      RIGHTEND: 'right-end',
      LEFT: 'left-start',
      LEFTEND: 'left-end'
  };
  var Default = {
      offset: 0,
      flip: true,
      boundary: 'scrollParent',
      reference: 'toggle',
      display: 'dynamic'
  };
  var DefaultType = {
      offset: '(number|string|function)',
      flip: 'boolean',
      boundary: '(string|element)',
      reference: '(string|element)',
      display: 'string'
  };
  var Dropdown = function() {
      function Dropdown(element, config) {
          this._element = element;
          this._popper = null;
          this._config = this._getConfig(config);
          this._menu = this._getMenuElement();
          this._inNavbar = this._detectNavbar();
          this._addEventListeners();
      }
      var _proto = Dropdown.prototype;
      _proto.toggle = function toggle() {
          if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
              return;
          }
          var parent = Dropdown._getParentFromElement(this._element);
          var isActive = $(this._menu).hasClass(ClassName.SHOW);
          Dropdown._clearMenus();
          if (isActive) {
              return;
          }
          var relatedTarget = {
              relatedTarget: this._element
          };
          var showEvent = $.Event(Event.SHOW, relatedTarget);
          $(parent).trigger(showEvent);
          if (showEvent.isDefaultPrevented()) {
              return;
          }
          if (!this._inNavbar) {
              if (typeof Popper === 'undefined') {
                  throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
              }
              var referenceElement = this._element;
              if (this._config.reference === 'parent') {
                  referenceElement = parent;
              } else if (Util.isElement(this._config.reference)) {
                  referenceElement = this._config.reference;
                  if (typeof this._config.reference.jquery !== 'undefined') {
                      referenceElement = this._config.reference[0];
                  }
              }
              if (this._config.boundary !== 'scrollParent') {
                  $(parent).addClass(ClassName.POSITION_STATIC);
              }
              this._popper = new Popper(referenceElement,this._menu,this._getPopperConfig());
          }
          if ('ontouchstart'in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
              $(document.body).children().on('mouseover', null, $.noop);
          }
          this._element.focus();
          this._element.setAttribute('aria-expanded', true);
          $(this._menu).toggleClass(ClassName.SHOW);
          $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
      }
      ;
      _proto.dispose = function dispose() {
          $.removeData(this._element, DATA_KEY);
          $(this._element).off(EVENT_KEY);
          this._element = null;
          this._menu = null;
          if (this._popper !== null) {
              this._popper.destroy();
              this._popper = null;
          }
      }
      ;
      _proto.update = function update() {
          this._inNavbar = this._detectNavbar();
          if (this._popper !== null) {
              this._popper.scheduleUpdate();
          }
      }
      ;
      _proto._addEventListeners = function _addEventListeners() {
          var _this = this;
          $(this._element).on(Event.CLICK, function(event) {
              event.preventDefault();
              event.stopPropagation();
              _this.toggle();
          });
      }
      ;
      _proto._getConfig = function _getConfig(config) {
          config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);
          Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
          return config;
      }
      ;
      _proto._getMenuElement = function _getMenuElement() {
          if (!this._menu) {
              var parent = Dropdown._getParentFromElement(this._element);
              this._menu = $(parent).find(Selector.MENU)[0];
          }
          return this._menu;
      }
      ;
      _proto._getPlacement = function _getPlacement() {
          var $parentDropdown = $(this._element).parent();
          var placement = AttachmentMap.BOTTOM;
          if ($parentDropdown.hasClass(ClassName.DROPUP)) {
              placement = AttachmentMap.TOP;
              if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
                  placement = AttachmentMap.TOPEND;
              }
          } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
              placement = AttachmentMap.RIGHT;
          } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
              placement = AttachmentMap.LEFT;
          } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
              placement = AttachmentMap.BOTTOMEND;
          }
          return placement;
      }
      ;
      _proto._detectNavbar = function _detectNavbar() {
          return $(this._element).closest('.navbar').length > 0;
      }
      ;
      _proto._getPopperConfig = function _getPopperConfig() {
          var _this2 = this;
          var offsetConf = {};
          if (typeof this._config.offset === 'function') {
              offsetConf.fn = function(data) {
                  data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
                  return data;
              }
              ;
          } else {
              offsetConf.offset = this._config.offset;
          }
          var popperConfig = {
              placement: this._getPlacement(),
              modifiers: {
                  offset: offsetConf,
                  flip: {
                      enabled: this._config.flip
                  },
                  preventOverflow: {
                      boundariesElement: this._config.boundary
                  }
              }
          };
          if (this._config.display === 'static') {
              popperConfig.modifiers.applyStyle = {
                  enabled: false
              };
          }
          return popperConfig;
      }
      ;
      Dropdown._jQueryInterface = function _jQueryInterface(config) {
          return this.each(function() {
              var data = $(this).data(DATA_KEY);
              var _config = typeof config === 'object' ? config : null;
              if (!data) {
                  data = new Dropdown(this,_config);
                  $(this).data(DATA_KEY, data);
              }
              if (typeof config === 'string') {
                  if (typeof data[config] === 'undefined') {
                      throw new TypeError("No method named \"" + config + "\"");
                  }
                  data[config]();
              }
          });
      }
      ;
      Dropdown._clearMenus = function _clearMenus(event) {
          if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
              return;
          }
          var toggles = $.makeArray($(Selector.DATA_TOGGLE));
          for (var i = 0; i < toggles.length; i++) {
              var parent = Dropdown._getParentFromElement(toggles[i]);
              var context = $(toggles[i]).data(DATA_KEY);
              var relatedTarget = {
                  relatedTarget: toggles[i]
              };
              if (!context) {
                  continue;
              }
              var dropdownMenu = context._menu;
              if (!$(parent).hasClass(ClassName.SHOW)) {
                  continue;
              }
              if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
                  continue;
              }
              var hideEvent = $.Event(Event.HIDE, relatedTarget);
              $(parent).trigger(hideEvent);
              if (hideEvent.isDefaultPrevented()) {
                  continue;
              }
              if ('ontouchstart'in document.documentElement) {
                  $(document.body).children().off('mouseover', null, $.noop);
              }
              toggles[i].setAttribute('aria-expanded', 'false');
              $(dropdownMenu).removeClass(ClassName.SHOW);
              $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
          }
      }
      ;
      Dropdown._getParentFromElement = function _getParentFromElement(element) {
          var parent;
          var selector = Util.getSelectorFromElement(element);
          if (selector) {
              parent = $(selector)[0];
          }
          return parent || element.parentNode;
      }
      ;
      Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
          if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
              return;
          }
          event.preventDefault();
          event.stopPropagation();
          if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
              return;
          }
          var parent = Dropdown._getParentFromElement(this);
          var isActive = $(parent).hasClass(ClassName.SHOW);
          if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
              if (event.which === ESCAPE_KEYCODE) {
                  var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
                  $(toggle).trigger('focus');
              }
              $(this).trigger('click');
              return;
          }
          var items = $(parent).find(Selector.VISIBLE_ITEMS).get();
          if (items.length === 0) {
              return;
          }
          var index = items.indexOf(event.target);
          if (event.which === ARROW_UP_KEYCODE && index > 0) {
              index--;
          }
          if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
              index++;
          }
          if (index < 0) {
              index = 0;
          }
          items[index].focus();
      }
      ;
      _createClass(Dropdown, null, [{
          key: "VERSION",
          get: function get() {
              return VERSION;
          }
      }, {
          key: "Default",
          get: function get() {
              return Default;
          }
      }, {
          key: "DefaultType",
          get: function get() {
              return DefaultType;
          }
      }]);
      return Dropdown;
  }();
  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function(event) {
      event.preventDefault();
      event.stopPropagation();
      Dropdown._jQueryInterface.call($(this), 'toggle');
  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function(e) {
      e.stopPropagation();
  });
  $.fn[NAME] = Dropdown._jQueryInterface;
  $.fn[NAME].Constructor = Dropdown;
  $.fn[NAME].noConflict = function() {
      $.fn[NAME] = JQUERY_NO_CONFLICT;
      return Dropdown._jQueryInterface;
  }
  ;
  return Dropdown;
}($, Popper);
function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);
      if (typeof Object.getOwnPropertySymbols === 'function') {
          ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
              return Object.getOwnPropertyDescriptor(source, sym).enumerable;
          }));
      }
      ownKeys.forEach(function(key) {
          _defineProperty(target, key, source[key]);
      });
  }
  return target;
}
function _defineProperty(obj, key, value) {
  if (key in obj) {
      Object.defineProperty(obj, key, {
          value: value,
          enumerable: true,
          configurable: true,
          writable: true
      });
  } else {
      obj[key] = value;
  }
  return obj;
}
function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value"in descriptor)
          descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
  }
}
function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps)
      _defineProperties(Constructor.prototype, protoProps);
  if (staticProps)
      _defineProperties(Constructor, staticProps);
  return Constructor;
}
var Collapse = function($) {
  var NAME = 'collapse';
  var VERSION = '4.1.0';
  var DATA_KEY = 'bs.collapse';
  var EVENT_KEY = "." + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var Default = {
      toggle: true,
      parent: ''
  };
  var DefaultType = {
      toggle: 'boolean',
      parent: '(string|element)'
  };
  var Event = {
      SHOW: "show" + EVENT_KEY,
      SHOWN: "shown" + EVENT_KEY,
      HIDE: "hide" + EVENT_KEY,
      HIDDEN: "hidden" + EVENT_KEY,
      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
  };
  var ClassName = {
      SHOW: 'show',
      COLLAPSE: 'collapse',
      COLLAPSING: 'collapsing',
      COLLAPSED: 'collapsed'
  };
  var Dimension = {
      WIDTH: 'width',
      HEIGHT: 'height'
  };
  var Selector = {
      ACTIVES: '.show, .collapsing',
      DATA_TOGGLE: '[data-toggle="collapse"]'
  };
  var Collapse = function() {
      function Collapse(element, config) {
          this._isTransitioning = false;
          this._element = element;
          this._config = this._getConfig(config);
          this._triggerArray = $.makeArray($("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
          var tabToggles = $(Selector.DATA_TOGGLE);
          for (var i = 0; i < tabToggles.length; i++) {
              var elem = tabToggles[i];
              var selector = Util.getSelectorFromElement(elem);
              if (selector !== null && $(selector).filter(element).length > 0) {
                  this._selector = selector;
                  this._triggerArray.push(elem);
              }
          }
          this._parent = this._config.parent ? this._getParent() : null;
          if (!this._config.parent) {
              this._addAriaAndCollapsedClass(this._element, this._triggerArray);
          }
          if (this._config.toggle) {
              this.toggle();
          }
      }
      var _proto = Collapse.prototype;
      _proto.toggle = function toggle() {
          if ($(this._element).hasClass(ClassName.SHOW)) {
              this.hide();
          } else {
              this.show();
          }
      }
      ;
      _proto.show = function show() {
          var _this = this;
          if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {
              return;
          }
          var actives;
          var activesData;
          if (this._parent) {
              actives = $.makeArray($(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]"));
              if (actives.length === 0) {
                  actives = null;
              }
          }
          if (actives) {
              activesData = $(actives).not(this._selector).data(DATA_KEY);
              if (activesData && activesData._isTransitioning) {
                  return;
              }
          }
          var startEvent = $.Event(Event.SHOW);
          $(this._element).trigger(startEvent);
          if (startEvent.isDefaultPrevented()) {
              return;
          }
          if (actives) {
              Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
              if (!activesData) {
                  $(actives).data(DATA_KEY, null);
              }
          }
          var dimension = this._getDimension();
          $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
          this._element.style[dimension] = 0;
          if (this._triggerArray.length > 0) {
              $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
          }
          this.setTransitioning(true);
          var complete = function complete() {
              $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
              _this._element.style[dimension] = '';
              _this.setTransitioning(false);
              $(_this._element).trigger(Event.SHOWN);
          };
          var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
          var scrollSize = "scroll" + capitalizedDimension;
          var transitionDuration = Util.getTransitionDurationFromElement(this._element);
          $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
          this._element.style[dimension] = this._element[scrollSize] + "px";
      }
      ;
      _proto.hide = function hide() {
          var _this2 = this;
          if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {
              return;
          }
          var startEvent = $.Event(Event.HIDE);
          $(this._element).trigger(startEvent);
          if (startEvent.isDefaultPrevented()) {
              return;
          }
          var dimension = this._getDimension();
          this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
          Util.reflow(this._element);
          $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
          if (this._triggerArray.length > 0) {
              for (var i = 0; i < this._triggerArray.length; i++) {
                  var trigger = this._triggerArray[i];
                  var selector = Util.getSelectorFromElement(trigger);
                  if (selector !== null) {
                      var $elem = $(selector);
                      if (!$elem.hasClass(ClassName.SHOW)) {
                          $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
                      }
                  }
              }
          }
          this.setTransitioning(true);
          var complete = function complete() {
              _this2.setTransitioning(false);
              $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
          };
          this._element.style[dimension] = '';
          var transitionDuration = Util.getTransitionDurationFromElement(this._element);
          $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
      }
      ;
      _proto.setTransitioning = function setTransitioning(isTransitioning) {
          this._isTransitioning = isTransitioning;
      }
      ;
      _proto.dispose = function dispose() {
          $.removeData(this._element, DATA_KEY);
          this._config = null;
          this._parent = null;
          this._element = null;
          this._triggerArray = null;
          this._isTransitioning = null;
      }
      ;
      _proto._getConfig = function _getConfig(config) {
          config = _objectSpread({}, Default, config);
          config.toggle = Boolean(config.toggle);
          Util.typeCheckConfig(NAME, config, DefaultType);
          return config;
      }
      ;
      _proto._getDimension = function _getDimension() {
          var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
          return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
      }
      ;
      _proto._getParent = function _getParent() {
          var _this3 = this;
          var parent = null;
          if (Util.isElement(this._config.parent)) {
              parent = this._config.parent;
              if (typeof this._config.parent.jquery !== 'undefined') {
                  parent = this._config.parent[0];
              }
          } else {
              parent = $(this._config.parent)[0];
          }
          var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
          $(parent).find(selector).each(function(i, element) {
              _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
          });
          return parent;
      }
      ;
      _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
          if (element) {
              var isOpen = $(element).hasClass(ClassName.SHOW);
              if (triggerArray.length > 0) {
                  $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
              }
          }
      }
      ;
      Collapse._getTargetFromElement = function _getTargetFromElement(element) {
          var selector = Util.getSelectorFromElement(element);
          return selector ? $(selector)[0] : null;
      }
      ;
      Collapse._jQueryInterface = function _jQueryInterface(config) {
          return this.each(function() {
              var $this = $(this);
              var data = $this.data(DATA_KEY);
              var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config);
              if (!data && _config.toggle && /show|hide/.test(config)) {
                  _config.toggle = false;
              }
              if (!data) {
                  data = new Collapse(this,_config);
                  $this.data(DATA_KEY, data);
              }
              if (typeof config === 'string') {
                  if (typeof data[config] === 'undefined') {
                      throw new TypeError("No method named \"" + config + "\"");
                  }
                  data[config]();
              }
          });
      }
      ;
      _createClass(Collapse, null, [{
          key: "VERSION",
          get: function get() {
              return VERSION;
          }
      }, {
          key: "Default",
          get: function get() {
              return Default;
          }
      }]);
      return Collapse;
  }();
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function(event) {
      if (event.currentTarget.tagName === 'A') {
          event.preventDefault();
      }
      var $trigger = $(this);
      var selector = Util.getSelectorFromElement(this);
      $(selector).each(function() {
          var $target = $(this);
          var data = $target.data(DATA_KEY);
          var config = data ? 'toggle' : $trigger.data();
          Collapse._jQueryInterface.call($target, config);
      });
  });
  $.fn[NAME] = Collapse._jQueryInterface;
  $.fn[NAME].Constructor = Collapse;
  $.fn[NAME].noConflict = function() {
      $.fn[NAME] = JQUERY_NO_CONFLICT;
      return Collapse._jQueryInterface;
  }
  ;
  return Collapse;
}($);
(function($) {
  "use strict"
  var spacePressed = false
  var originalVal = $.fn.val
  $.fn.val = function(value) {
      if (arguments.length >= 1) {
          if (typeof (this[0]) !== 'undefined' && this[0]["bootstrap-input-spinner"] && this[0].setValue) {
              this[0].setValue(value)
          }
      }
      return originalVal.apply(this, arguments)
  }
  $.fn.InputSpinner = $.fn.inputSpinner = function(options) {
      var config = {
          decrementButton: "<strong>-</strong>",
          incrementButton: "<strong>+</strong>",
          groupClass: "",
          buttonsClass: "btn-outline-secondary",
          buttonsWidth: "2.5rem",
          textAlign: "center",
          autoDelay: 500,
          autoInterval: 100,
          boostThreshold: 10,
          boostMultiplier: "auto",
          locale: null
      }
      for (var option in options) {
          config[option] = options[option]
      }
      var html = '<div class="input-group ' + config.groupClass + '">' + '<div class="input-group-prepend">' + '<button style="min-width: ' + config.buttonsWidth + '" class="btn btn-decrement ' + config.buttonsClass + '" type="button">' + config.decrementButton + '</button>' + '</div>' + '<input type="text" style="text-align: ' + config.textAlign + '" class="form-control"/>' + '<div class="input-group-append">' + '<button style="min-width: ' + config.buttonsWidth + '" class="btn btn-increment ' + config.buttonsClass + '" type="button">' + config.incrementButton + '</button>' + '</div>' + '</div>'
      var locale = config.locale || navigator.language || "en-US"
      this.each(function() {
          var $original = $(this)
          $original[0]["bootstrap-input-spinner"] = true
          $original.hide()
          var autoDelayHandler = null
          var autoIntervalHandler = null
          var autoMultiplier = config.boostMultiplier === "auto"
          var boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier
          var $inputGroup = $(html)
          var $buttonDecrement = $inputGroup.find(".btn-decrement")
          var $buttonIncrement = $inputGroup.find(".btn-increment")
          var $input = $inputGroup.find("input")
          var min = parseFloat($original.prop("min")) || 0
          var max = isNaN($original.prop("max")) || $original.prop("max") === "" ? Infinity : parseFloat($original.prop("max"))
          var step = parseFloat($original.prop("step")) || 1
          var stepMax = parseInt($original.attr("data-step-max")) || 0
          var decimals = parseInt($original.attr("data-decimals")) || 0
          var numberFormat = new Intl.NumberFormat(locale,{
              minimumFractionDigits: decimals,
              maximumFractionDigits: decimals
          })
          var value = parseFloat($original[0].value)
          var boostStepsCount = 0
          var prefix = $original.attr("data-prefix") || ""
          var suffix = $original.attr("data-suffix") || ""
          if (prefix) {
              var prefixElement = $('<span class="input-group-text">' + prefix + '</span>')
              $inputGroup.find(".input-group-prepend").append(prefixElement)
          }
          if (suffix) {
              var suffixElement = $('<span class="input-group-text">' + suffix + '</span>')
              $inputGroup.find(".input-group-append").prepend(suffixElement)
          }
          $original[0].setValue = function(newValue) {
              setValue(newValue)
          }
          var observer = new MutationObserver(function() {
              copyAttributes()
          }
          )
          observer.observe($original[0], {
              attributes: true
          })
          copyAttributes()
          $original.after($inputGroup)
          setValue(value)
          $input.on("paste input change focusout", function(event) {
              var newValue = $input[0].value
              var focusOut = event.type === "focusout"
              if (!(locale === "en-US" || locale === "en-GB" || locale === "th-TH")) {
                  newValue = newValue.replace(/[. ]/g, '').replace(/,/g, '.')
              }
              setValue(newValue, focusOut)
              dispatchEvent($original, event.type)
          })
          onPointerDown($buttonDecrement[0], function() {
              stepHandling(-step)
          })
          onPointerDown($buttonIncrement[0], function() {
              stepHandling(step)
          })
          onPointerUp(document.body, function() {
              resetTimer()
          })
          function setValue(newValue, updateInput) {
              if (updateInput === undefined) {
                  updateInput = true
              }
              if (isNaN(newValue) || newValue === "") {
                  $original[0].value = ""
                  if (updateInput) {
                      $input[0].value = ""
                  }
                  value = 0
              } else {
                  newValue = parseFloat(newValue)
                  newValue = Math.min(Math.max(newValue, min), max)
                  newValue = Math.round(newValue * Math.pow(10, decimals)) / Math.pow(10, decimals)
                  $original[0].value = newValue
                  if (updateInput) {
                      $input[0].value = numberFormat.format(newValue)
                  }
                  value = newValue
              }
          }
          function dispatchEvent($element, type) {
              if (type) {
                  setTimeout(function() {
                      var event;
                      if (typeof (Event) === 'function') {
                          event = new Event(type,{
                              bubbles: true
                          })
                      } else {
                          event = document.createEvent('Event');
                          event.initEvent(type, true, true);
                      }
                      $element[0].dispatchEvent(event)
                  })
              }
          }
          function stepHandling(step) {
              if (!$input[0].disabled) {
                  calcStep(step)
                  resetTimer()
                  autoDelayHandler = setTimeout(function() {
                      autoIntervalHandler = setInterval(function() {
                          if (boostStepsCount > config.boostThreshold) {
                              if (autoMultiplier) {
                                  calcStep(step * parseInt(boostMultiplier, 10))
                                  if (boostMultiplier < 100000000) {
                                      boostMultiplier = boostMultiplier * 1.1
                                  }
                                  if (stepMax) {
                                      boostMultiplier = Math.min(stepMax, boostMultiplier)
                                  }
                              } else {
                                  calcStep(step * boostMultiplier)
                              }
                          } else {
                              calcStep(step)
                          }
                          boostStepsCount++
                      }, config.autoInterval)
                  }, config.autoDelay)
              }
          }
          function calcStep(step) {
              if (isNaN(value)) {
                  value = 0
              }
              setValue(Math.round(value / step) * step + step)
              dispatchEvent($original, "input")
              dispatchEvent($original, "change")
          }
          function resetTimer() {
              boostStepsCount = 0
              boostMultiplier = boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier
              clearTimeout(autoDelayHandler)
              clearTimeout(autoIntervalHandler)
          }
          function copyAttributes() {
              $input.prop("required", $original.prop("required"))
              $input.prop("placeholder", $original.prop("placeholder"))
              var disabled = $original.prop("disabled")
              $input.prop("disabled", disabled)
              $buttonIncrement.prop("disabled", disabled)
              $buttonDecrement.prop("disabled", disabled)
              $input.prop("class", "form-control " + $original.prop("class"))
              $inputGroup.prop("class", "input-group " + $original.prop("class") + " " + config.groupClass)
          }
      })
  }
  function onPointerUp(element, callback) {
      element.addEventListener("mouseup", function(e) {
          callback(e)
      })
      element.addEventListener("touchend", function(e) {
          callback(e)
      })
      element.addEventListener("keyup", function(e) {
          if (e.keyCode === 32) {
              spacePressed = false
              callback(e)
          }
      })
  }
  function onPointerDown(element, callback) {
      element.addEventListener("mousedown", function(e) {
          e.preventDefault()
          callback(e)
      })
      element.addEventListener("touchstart", function(e) {
          if (e.cancelable) {
              e.preventDefault()
          }
          callback(e)
      })
      element.addEventListener("keydown", function(e) {
          if (e.keyCode === 32 && !spacePressed) {
              spacePressed = true
              callback(e)
          }
      })
  }
}(jQuery))
$(document).on('wc_fragments_refreshed wc_fragments_loaded', function() {
  var $buttons = $(document).find('.woocommerce-mini-cart__buttons')
  $.each($buttons, function() {
      $(this).find('a').eq(0).addClass('jupiterx-icon-shopping-cart-6')
  })
  $(document).find('.woocommerce-mini-cart-item .remove').addClass('jupiterx-icon-solid-times-circle').html(' ')
  $(document).find('.woocommerce-mini-cart__empty-message').addClass('jupiterx-icon-shopping-cart-6')
})
jQuery(document).ready(function($) {
  function InputSpinnerInit() {
      $('.quantity > input').InputSpinner({
          buttonsClass: 'btn-sm btn-outline-secondary',
          buttonsWidth: 0
      });
  }
  $(document).on('ready updated_wc_div', function() {
      InputSpinnerInit();
  });
  $(document).on('click', '.jupiterx-navbar-cart, .raven-shopping-cart', function(e) {
      if ('#' !== $(this).attr('href')) {
          return
      }
      e.preventDefault()
      $('body').addClass('jupiterx-cart-quick-view-overlay')
  })
  $(document).on('click', '.jupiterx-mini-cart-close', function() {
      $('body').alterClass('jupiterx-cart-quick-view-*', '')
  })
});
jQuery(document).ready(function($) {
  var ProductGallery = function($target) {
      this.$target = $target;
      this.$images = $target.find('.woocommerce-product-gallery__image');
      if (this.$target.hasClass('jupiterx-product-gallery-static')) {
          this.initZoom();
      } else {
          this.createSlickThumbnailsSlider();
          this.repositionDirectionNav();
      }
      this.preventSmoothScroll()
  }
  ProductGallery.prototype.createSlickThumbnailsSlider = function() {
      var $gallery = this.$target
        , options = {
          infinite: false,
          draggable: false,
          slidesToShow: 7,
          slidesToScroll: 1,
          prevArrow: '<button class="slick-prev" aria-label="Prev" type="button"><svg fill="#333333" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="7.2px" height="12px" viewBox="0 0 7.2 12" style="enable-background:new 0 0 7.2 12;" xml:space="preserve"><path class="st0" d="M2.4,6l4.5-4.3c0.4-0.4,0.4-1,0-1.4c-0.4-0.4-1-0.4-1.4,0l-5.2,5C0.1,5.5,0,5.7,0,6s0.1,0.5,0.3,0.7l5.2,5 C5.7,11.9,6,12,6.2,12c0.3,0,0.5-0.1,0.7-0.3c0.4-0.4,0.4-1,0-1.4L2.4,6z"/></svg></button>',
          nextArrow: '<button class="slick-next" aria-label="Next" type="button"><svg fill="#333333" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="7.2px" height="12px" viewBox="0 0 7.2 12" style="enable-background:new 0 0 7.2 12;" xml:space="preserve"><path class="st0" d="M4.8,6l-4.5,4.3c-0.4,0.4-0.4,1,0,1.4c0.4,0.4,1,0.4,1.4,0l5.2-5C7.1,6.5,7.2,6.3,7.2,6S7.1,5.5,6.9,5.3l-5.2-5C1.5,0.1,1.2,0,1,0C0.7,0,0.5,0.1,0.3,0.3c-0.4,0.4-0.4,1,0,1.4L4.8,6z"/></svg></button>'
      };
      if ($gallery.hasClass('jupiterx-product-gallery-vertical')) {
          options = $.extend(options, {
              vertical: true,
              slidesToShow: 5,
          })
      }
      $gallery.find('.flex-control-thumbs').slick(options);
      $gallery.on('click', '.flex-direction-nav a', function() {
          $gallery.find('.flex-control-nav').slick('slickGoTo', $gallery.find('.flex-active-slide').index());
      });
  }
  ProductGallery.prototype.repositionDirectionNav = function() {
      var $gallery = this.$target, positionNav;
      if (!$gallery.hasClass('jupiterx-product-gallery-vertical')) {
          return;
      }
      positionNav = function() {
          var $nav = $gallery.find('.flex-direction-nav')
            , $thumbs = $gallery.find('.flex-control-thumbs')
          $nav.css('left', $thumbs.outerWidth(true))
      }
      $(window).resize(positionNav)
      positionNav()
  }
  ProductGallery.prototype.initZoom = function() {
      if (!$.isFunction($.fn.zoom) && !wc_single_product_params.zoom_enabled) {
          return;
      }
      var $target = this.$target
        , zoomTarget = $target.find('.woocommerce-product-gallery__image');
      var galleryWidth = $target.width()
        , zoomEnabled = false;
      $(zoomTarget).each(function(index, target) {
          var image = $(target).find('img');
          if (image.data('large_image_width') > galleryWidth) {
              zoomEnabled = true;
              return false;
          }
      });
      if (zoomEnabled) {
          var zoom_options = {
              touch: false
          };
          if ('ontouchstart'in window) {
              zoom_options.on = 'click';
          }
          zoomTarget.trigger('zoom.destroy');
          zoomTarget.zoom(zoom_options);
      }
  }
  ProductGallery.prototype.preventSmoothScroll = function() {
      this.$target.on('click', '.flex-direction-nav a', function(event) {
          event.preventDefault();
          event.stopPropagation();
      });
  }
  $('.woocommerce-product-gallery').each(function(index, element) {
      new ProductGallery($(element))
  });
  function VariableProduct($variationsForm) {
      var self = this;
      this.$variationsForm = $variationsForm;
      this.$outOfStockBadge = $('.jupiterx-out-of-stock');
      this.$onSaleBadge = $('.jupiterx-product-badges .onsale');
      this.variations = this.$variationsForm.data('product_variations') || [];
      if (typeof VariableProduct._initialized == 'undefined') {
          VariableProduct.prototype.bindEvents = function() {
              this.$variationsForm.on("woocommerce_variation_select_change", this.onVariationAttributeChange);
              $('.single_variation_wrap').on('show_variation', this.onVariationSelected);
          }
          VariableProduct.prototype.checkOutOfStockStatus = function() {
              if (this.isProductInStock()) {
                  return;
              }
              this.$onSaleBadge.hide();
              this.$outOfStockBadge.show();
          }
          VariableProduct.prototype.onVariationAttributeChange = function() {
              var variationId = self.$variationsForm.find('input[name=variation_id]').val() || 0;
              if (variationId === 0) {
                  if (!self.isProductInStock()) {
                      self.$outOfStockBadge.show();
                  } else if (self.isProductOnSale()) {
                      self.$onSaleBadge.show();
                      self.$outOfStockBadge.hide();
                  }
              }
          }
          VariableProduct.prototype.onVariationSelected = function(event, variation) {
              if (variation) {
                  self.toggleOutOfStockBadgeVisibility(variation)
              }
          }
          VariableProduct.prototype.toggleOutOfStockBadgeVisibility = function(variation) {
              if (variation.is_in_stock) {
                  this.isVariationOnSale(variation.variation_id) ? this.$onSaleBadge.show() : this.$onSaleBadge.hide()
                  this.$outOfStockBadge.hide();
              } else {
                  this.$onSaleBadge.hide();
                  this.$outOfStockBadge.show();
              }
          }
          VariableProduct.prototype.isProductOnSale = function() {
              for (var i = 0; i < this.variations.length; i++) {
                  var variation = this.variations[i]
                  if (variation.display_price !== variation.display_regular_price) {
                      return true;
                  }
              }
              return false;
          }
          VariableProduct.prototype.isVariationOnSale = function(variationId) {
              for (var i = 0; i < this.variations.length; i++) {
                  var variation = this.variations[i]
                  if (variation.display_price !== variation.display_regular_price && variationId === variation.variation_id) {
                      return true;
                  }
              }
              return false;
          }
          VariableProduct.prototype.isProductInStock = function() {
              for (var i = 0; i < this.variations.length; i++) {
                  if (this.variations[i].is_in_stock) {
                      return true;
                  }
              }
              return false
          }
          VariableProduct._initialized = true;
      }
  }
  if ($('form.variations_form').length > 0) {
      var variableProduct = new VariableProduct($('form.variations_form'));
      variableProduct.bindEvents();
      variableProduct.checkOutOfStockStatus();
  }
});
