PageSourceSearch

https://www.sailingsantorini.gr/sites/default/files/js/js_WIZEz6lyyXBuyTNQa9ztS6YN8IZ2vUYgIvm7_lfZTfs.js

js sailingsantorini.gr collected 2026-10-08 02:55:15 UTC 1,050,474 bytes, 20,822 lines download raw bytes

vendor: 89,947 bytes, lines 1-2
1/*! jQuery v3.6.3 | (c) OpenJS Foundation and other contributors | jquery.org/license */
2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.3",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E});
3;
4/**
5* DO NOT EDIT THIS FILE.
6* See the following change record for more information,
7* https://www.drupal.org/node/2815083
8* @preserve
9**/
10if (!Element.prototype.matches) {
11  Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
12};
13/**
14* DO NOT EDIT THIS FILE.
15* See the following change record for more information,
16* https://www.drupal.org/node/2815083
17* @preserve
18**/
19if (typeof Object.assign !== 'function') {
20  Object.defineProperty(Object, 'assign', {
21    value: function assign(target, varArgs) {
22      'use strict';
23
24      if (target === null || target === undefined) {
25        throw new TypeError('Cannot convert undefined or null to object');
26      }
27      var to = Object(target);
28      for (var index = 1; index < arguments.length; index++) {
29        var nextSource = arguments[index];
30        if (nextSource !== null && nextSource !== undefined) {
31          for (var nextKey in nextSource) {
32            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
33              to[nextKey] = nextSource[nextKey];
34            }
35          }
36        }
37      }
38      return to;
39    },
40    writable: true,
41    configurable: true
42  });
43};
44/*! @drupal/once - v1.0.1 - 2021-06-12 */
45var once=function(){"use strict";var n=/[\11\12\14\15\40]+/,e="data-once",t=document;function r(n,t,r){return n[t+"Attribute"](e,r)}function o(e){if("string"!=typeof e)throw new TypeError("once ID must be a string");if(""===e||n.test(e))throw new RangeError("once ID must not be empty or contain spaces");return'[data-once~="'+e+'"]'}function u(n){if(!(n instanceof Element))throw new TypeError("The element must be an instance of Element");return!0}function i(n,e){void 0===e&&(e=t);var r=n;if(null===n)r=[];else{if(!n)throw new TypeError("Selector must not be empty");"string"!=typeof n||e!==t&&!u(e)?n instanceof Element&&(r=[n]):r=e.querySelectorAll(n)}return Array.prototype.slice.call(r)}function c(n,e,t){return e.filter((function(e){var r=u(e)&&e.matches(n);return r&&t&&t(e),r}))}function f(e,t){var o=t.add,u=t.remove,i=[];r(e,"has")&&r(e,"get").trim().split(n).forEach((function(n){i.indexOf(n)<0&&n!==u&&i.push(n)})),o&&i.push(o);var c=i.join(" ");r(e,""===c?"remove":"set",c)}function a(n,e,t){return c(":not("+o(n)+")",i(e,t),(function(e){return f(e,{add:n})}))}return a.remove=function(n,e,t){return c(o(n),i(e,t),(function(e){return f(e,{remove:n})}))},a.filter=function(n,e,t){return c(o(n),i(e,t))},a.find=function(n,e){return i(n?o(n):"[data-once]",e)},a}();
46
47;
48/*!
49 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once
50 * @license MIT, GPL-2.0
51 *   http://opensource.org/licenses/MIT
52 *   http://opensource.org/licenses/GPL-2.0
53 */
54(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}});
55
56/**
57* DO NOT EDIT THIS FILE.
58* See the following change record for more information,
59* https://www.drupal.org/node/2815083
60* @preserve
61**/
62(function () {
63  var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');
64  window.drupalSettings = {};
65  if (settingsElement !== null) {
66    window.drupalSettings = JSON.parse(settingsElement.textContent);
67  }
68})();;
69/**
70* DO NOT EDIT THIS FILE.
71* See the following change record for more information,
72* https://www.drupal.org/node/2815083
73* @preserve
74**/
75window.Drupal = {
76  behaviors: {},
77  locale: {}
78};
79(function (Drupal, drupalSettings, drupalTranslations, console, Proxy, Reflect) {
80  Drupal.throwError = function (error) {
81    setTimeout(function () {
82      throw error;
83    }, 0);
84  };
85  Drupal.attachBehaviors = function (context, settings) {
86    context = context || document;
87    settings = settings || drupalSettings;
88    var behaviors = Drupal.behaviors;
89    Object.keys(behaviors || {}).forEach(function (i) {
90      if (typeof behaviors[i].attach === 'function') {
91        try {
92          behaviors[i].attach(context, settings);
93        } catch (e) {
94          Drupal.throwError(e);
95        }
96      }
97    });
98  };
99  Drupal.detachBehaviors = function (context, settings, trigger) {
100    context = context || document;
101    settings = settings || drupalSettings;
102    trigger = trigger || 'unload';
103    var behaviors = Drupal.behaviors;
104    Object.keys(behaviors || {}).forEach(function (i) {
105      if (typeof behaviors[i].detach === 'function') {
106        try {
107          behaviors[i].detach(context, settings, trigger);
108        } catch (e) {
109          Drupal.throwError(e);
110        }
111      }
112    });
113  };
114  Drupal.checkPlain = function (str) {
115    str = str.toString().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
116    return str;
117  };
118  Drupal.formatString = function (str, args) {
119    var processedArgs = {};
120    Object.keys(args || {}).forEach(function (key) {
121      switch (key.charAt(0)) {
122        case '@':
123          processedArgs[key] = Drupal.checkPlain(args[key]);
124          break;
125        case '!':
126          processedArgs[key] = args[key];
127          break;
128        default:
129          processedArgs[key] = Drupal.theme('placeholder', args[key]);
130          break;
131      }
132    });
133    return Drupal.stringReplace(str, processedArgs, null);
134  };
135  Drupal.stringReplace = function (str, args, keys) {
136    if (str.length === 0) {
137      return str;
138    }
139    if (!Array.isArray(keys)) {
140      keys = Object.keys(args || {});
141      keys.sort(function (a, b) {
142        return a.length - b.length;
143      });
144    }
145    if (keys.length === 0) {
146      return str;
147    }
148    var key = keys.pop();
149    var fragments = str.split(key);
150    if (keys.length) {
151      for (var i = 0; i < fragments.length; i++) {
152        fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0));
153      }
154    }
155    return fragments.join(args[key]);
156  };
157  Drupal.t = function (str, args, options) {
158    options = options || {};
159    options.context = options.context || '';
160    if (typeof drupalTranslations !== 'undefined' && drupalTranslations.strings && drupalTranslations.strings[options.context] && drupalTranslations.strings[options.context][str]) {
161      str = drupalTranslations.strings[options.context][str];
162    }
163    if (args) {
164      str = Drupal.formatString(str, args);
165    }
166    return str;
167  };
168  Drupal.url = function (path) {
169    return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path;
170  };
171  Drupal.url.toAbsolute = function (url) {
172    var urlParsingNode = document.createElement('a');
173    try {
174      url = decodeURIComponent(url);
175    } catch (e) {}
176    urlParsingNode.setAttribute('href', url);
177    return urlParsingNode.cloneNode(false).href;
178  };
179  Drupal.url.isLocal = function (url) {
180    var absoluteUrl = Drupal.url.toAbsolute(url);
181    var protocol = window.location.protocol;
182    if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) {
183      protocol = 'https:';
184    }
185    var baseUrl = "".concat(protocol, "//").concat(window.location.host).concat(drupalSettings.path.baseUrl.slice(0, -1));
186    try {
187      absoluteUrl = decodeURIComponent(absoluteUrl);
188    } catch (e) {}
189    try {
190      baseUrl = decodeURIComponent(baseUrl);
191    } catch (e) {}
192    return absoluteUrl === baseUrl || absoluteUrl.indexOf("".concat(baseUrl, "/")) === 0;
193  };
194  Drupal.formatPlural = function (count, singular, plural, args, options) {
195    args = args || {};
196    args['@count'] = count;
197    var pluralDelimiter = drupalSettings.pluralDelimiter;
198    var translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter);
199    var index = 0;
200    if (typeof drupalTranslations !== 'undefined' && drupalTranslations.pluralFormula) {
201      index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula.default;
202    } else if (args['@count'] !== 1) {
203      index = 1;
204    }
205    return translations[index];
206  };
207  Drupal.encodePath = function (item) {
208    return window.encodeURIComponent(item).replace(/%2F/g, '/');
209  };
210  Drupal.deprecationError = function (_ref) {
211    var message = _ref.message;
212    if (drupalSettings.suppressDeprecationErrors === false && typeof console !== 'undefined' && console.warn) {
213      console.warn("[Deprecation] ".concat(message));
214    }
215  };
216  Drupal.deprecatedProperty = function (_ref2) {
217    var target = _ref2.target,
218      deprecatedProperty = _ref2.deprecatedProperty,
219      message = _ref2.message;
220    if (!Proxy || !Reflect) {
221      return target;
222    }
223    return new Proxy(target, {
224      get: function get(target, key) {
225        if (key === deprecatedProperty) {
226          Drupal.deprecationError({
227            message: message
228          });
229        }
230        for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
231          rest[_key - 2] = arguments[_key];
232        }
233        return Reflect.get.apply(Reflect, [target, key].concat(rest));
234      }
235    });
236  };
237  Drupal.theme = function (func) {
238    if (func in Drupal.theme) {
239      var _Drupal$theme;
240      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
241        args[_key2 - 1] = arguments[_key2];
242      }
243      return (_Drupal$theme = Drupal.theme)[func].apply(_Drupal$theme, args);
244    }
245  };
246  Drupal.theme.placeholder = function (str) {
247    return "<em class=\"placeholder\">".concat(Drupal.checkPlain(str), "</em>");
248  };
249})(Drupal, window.drupalSettings, window.drupalTranslations, window.console, window.Proxy, window.Reflect);;
250/**
251* DO NOT EDIT THIS FILE.
252* See the following change record for more information,
253* https://www.drupal.org/node/2815083
254* @preserve
255**/
256if (window.jQuery) {
257  jQuery.noConflict();
258}
259document.documentElement.className += ' js';
260(function (Drupal, drupalSettings) {
261  var domReady = function domReady(callback) {
262    var listener = function listener() {
263      callback();
264      document.removeEventListener('DOMContentLoaded', listener);
265    };
266    if (document.readyState !== 'loading') {
267      setTimeout(callback, 0);
268    } else {
269      document.addEventListener('DOMContentLoaded', listener);
270    }
271  };
272  domReady(function () {
273    Drupal.attachBehaviors(document, drupalSettings);
274  });
275})(Drupal, window.drupalSettings);;
vendor: 19,149 bytes, lines 276-279
276/*
277 Copyright (C) Federico Zivolo 2017
278 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
279 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['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'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe});
280
281;
282/*!
283  * Bootstrap v5.3.0-alpha3 (https://getbootstrap.com/)
284  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
285  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
286  */
287(function (global, factory) {
288  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
289  typeof define === 'function' && define.amd ? define(factory) :
290  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap
vendor: 9,682 bytes, lines 290-594
290 = factory());
291})(this, (function () { 'use strict';
292
293  /**
294   * --------------------------------------------------------------------------
295   * Bootstrap dom/data.js
296   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
297   * --------------------------------------------------------------------------
298   */
299
300  /**
301   * Constants
302   */
303
304  const elementMap = new Map();
305  const Data = {
306    set(element, key, instance) {
307      if (!elementMap.has(element)) {
308        elementMap.set(element, new Map());
309      }
310      const instanceMap = elementMap.get(element);
311
312      // make it clear we only want one instance per element
313      // can be removed later when multiple key/instances are fine to be used
314      if (!instanceMap.has(key) && instanceMap.size !== 0) {
315        // eslint-disable-next-line no-console
316        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
317        return;
318      }
319      instanceMap.set(key, instance);
320    },
321    get(element, key) {
322      if (elementMap.has(element)) {
323        return elementMap.get(element).get(key) || null;
324      }
325      return null;
326    },
327    remove(element, key) {
328      if (!elementMap.has(element)) {
329        return;
330      }
331      const instanceMap = elementMap.get(element);
332      instanceMap.delete(key);
333
334      // free up element references if there are no instances left for an element
335      if (instanceMap.size === 0) {
336        elementMap.delete(element);
337      }
338    }
339  };
340
341  /**
342   * --------------------------------------------------------------------------
343   * Bootstrap util/index.js
344   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
345   * --------------------------------------------------------------------------
346   */
347
348  const MAX_UID = 1000000;
349  const MILLISECONDS_MULTIPLIER = 1000;
350  const TRANSITION_END = 'transitionend';
351
352  /**
353   * Properly escape IDs selectors to handle weird IDs
354   * @param {string} selector
355   * @returns {string}
356   */
357  const parseSelector = selector => {
358    if (selector && window.CSS && window.CSS.escape) {
359      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
360      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
361    }
362    return selector;
363  };
364
365  // Shout-out Angus Croll (https://goo.gl/pxwQGp)
366  const toType = object => {
367    if (object === null || object === undefined) {
368      return `${object}`;
369    }
370    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
371  };
372
373  /**
374   * Public Util API
375   */
376
377  const getUID = prefix => {
378    do {
379      prefix += Math.floor(Math.random() * MAX_UID);
380    } while (document.getElementById(prefix));
381    return prefix;
382  };
383  const getTransitionDurationFromElement = element => {
384    if (!element) {
385      return 0;
386    }
387
388    // Get transition-duration of the element
389    let {
390      transitionDuration,
391      transitionDelay
392    } = window.getComputedStyle(element);
393    const floatTransitionDuration = Number.parseFloat(transitionDuration);
394    const floatTransitionDelay = Number.parseFloat(transitionDelay);
395
396    // Return 0 if element or transition duration is not found
397    if (!floatTransitionDuration && !floatTransitionDelay) {
398      return 0;
399    }
400
401    // If multiple durations are defined, take the first
402    transitionDuration = transitionDuration.split(',')[0];
403    transitionDelay = transitionDelay.split(',')[0];
404    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
405  };
406  const triggerTransitionEnd = element => {
407    element.dispatchEvent(new Event(TRANSITION_END));
408  };
409  const isElement$1 = object => {
410    if (!object || typeof object !== 'object') {
411      return false;
412    }
413    if (typeof object.jquery !== 'undefined') {
414      object = object[0];
415    }
416    return typeof object.nodeType !== 'undefined';
417  };
418  const getElement = object => {
419    // it's a jQuery object or a node element
420    if (isElement$1(object)) {
421      return object.jquery ? object[0] : object;
422    }
423    if (typeof object === 'string' && object.length > 0) {
424      return document.querySelector(parseSelector(object));
425    }
426    return null;
427  };
428  const isVisible = element => {
429    if (!isElement$1(element) || element.getClientRects().length === 0) {
430      return false;
431    }
432    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
433    // Handle `details` element as its content may falsie appear visible when it is closed
434    const closedDetails = element.closest('details:not([open])');
435    if (!closedDetails) {
436      return elementIsVisible;
437    }
438    if (closedDetails !== element) {
439      const summary = element.closest('summary');
440      if (summary && summary.parentNode !== closedDetails) {
441        return false;
442      }
443      if (summary === null) {
444        return false;
445      }
446    }
447    return elementIsVisible;
448  };
449  const isDisabled = element => {
450    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
451      return true;
452    }
453    if (element.classList.contains('disabled')) {
454      return true;
455    }
456    if (typeof element.disabled !== 'undefined') {
457      return element.disabled;
458    }
459    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
460  };
461  const findShadowRoot = element => {
462    if (!document.documentElement.attachShadow) {
463      return null;
464    }
465
466    // Can find the shadow root otherwise it'll return the document
467    if (typeof element.getRootNode === 'function') {
468      const root = element.getRootNode();
469      return root instanceof ShadowRoot ? root : null;
470    }
471    if (element instanceof ShadowRoot) {
472      return element;
473    }
474
475    // when we don't find a shadow root
476    if (!element.parentNode) {
477      return null;
478    }
479    return findShadowRoot(element.parentNode);
480  };
481  const noop = () => {};
482
483  /**
484   * Trick to restart an element's animation
485   *
486   * @param {HTMLElement} element
487   * @return void
488   *
489   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
490   */
491  const reflow = element => {
492    element.offsetHeight; // eslint-disable-line no-unused-expressions
493  };
494
495  const getjQuery = () => {
496    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
497      return window.jQuery;
498    }
499    return null;
500  };
501  const DOMContentLoadedCallbacks = [];
502  const onDOMContentLoaded = callback => {
503    if (document.readyState === 'loading') {
504      // add listener on the first call when the document is in loading state
505      if (!DOMContentLoadedCallbacks.length) {
506        document.addEventListener('DOMContentLoaded', () => {
507          for (const callback of DOMContentLoadedCallbacks) {
508            callback();
509          }
510        });
511      }
512      DOMContentLoadedCallbacks.push(callback);
513    } else {
514      callback();
515    }
516  };
517  const isRTL = () => document.documentElement.dir === 'rtl';
518  const defineJQueryPlugin = plugin => {
519    onDOMContentLoaded(() => {
520      const $ = getjQuery();
521      /* istanbul ignore if */
522      if ($) {
523        const name = plugin.NAME;
524        const JQUERY_NO_CONFLICT = $.fn[name];
525        $.fn[name] = plugin.jQueryInterface;
526        $.fn[name].Constructor = plugin;
527        $.fn[name].noConflict = () => {
528          $.fn[name] = JQUERY_NO_CONFLICT;
529          return plugin.jQueryInterface;
530        };
531      }
532    });
533  };
534  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
535    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
536  };
537  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
538    if (!waitForTransition) {
539      execute(callback);
540      return;
541    }
542    const durationPadding = 5;
543    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
544    let called = false;
545    const handler = ({
546      target
547    }) => {
548      if (target !== transitionElement) {
549        return;
550      }
551      called = true;
552      transitionElement.removeEventListener(TRANSITION_END, handler);
553      execute(callback);
554    };
555    transitionElement.addEventListener(TRANSITION_END, handler);
556    setTimeout(() => {
557      if (!called) {
558        triggerTransitionEnd(transitionElement);
559      }
560    }, emulatedDuration);
561  };
562
563  /**
564   * Return the previous/next element of a list.
565   *
566   * @param {array} list    The list of elements
567   * @param activeElement   The active element
568   * @param shouldGetNext   Choose to get next or previous element
569   * @param isCycleAllowed
570   * @return {Element|elem} The proper element
571   */
572  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
573    const listLength = list.length;
574    let index = list.indexOf(activeElement);
575
576    // if the element does not exist in the list return an element
577    // depending on the direction and if cycle is allowed
578    if (index === -1) {
579      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
580    }
581    index += shouldGetNext ? 1 : -1;
582    if (isCycleAllowed) {
583      index = (index + listLength) % listLength;
584    }
585    return list[Math.max(0, Math.min(index, listLength - 1))];
586  };
587
588  /**
589   * --------------------------------------------------------------------------
590   * Bootstrap dom/event-handler.js
591   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
592   * --------------------------------------------------------------------------
593   */
594
vendor: 10,449 bytes, lines 595-872
595  /**
596   * Constants
597   */
598
599  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
600  const stripNameRegex = /\..*/;
601  const stripUidRegex = /::\d+$/;
602  const eventRegistry = {}; // Events storage
603  let uidEvent = 1;
604  const customEvents = {
605    mouseenter: 'mouseover',
606    mouseleave: 'mouseout'
607  };
608  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
609
610  /**
611   * Private methods
612   */
613
614  function makeEventUid(element, uid) {
615    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
616  }
617  function getElementEvents(element) {
618    const uid = makeEventUid(element);
619    element.uidEvent = uid;
620    eventRegistry[uid] = eventRegistry[uid] || {};
621    return eventRegistry[uid];
622  }
623  function bootstrapHandler(element, fn) {
624    return function handler(event) {
625      hydrateObj(event, {
626        delegateTarget: element
627      });
628      if (handler.oneOff) {
629        EventHandler.off(element, event.type, fn);
630      }
631      return fn.apply(element, [event]);
632    };
633  }
634  function bootstrapDelegationHandler(element, selector, fn) {
635    return function handler(event) {
636      const domElements = element.querySelectorAll(selector);
637      for (let {
638        target
639      } = event; target && target !== this; target = target.parentNode) {
640        for (const domElement of domElements) {
641          if (domElement !== target) {
642            continue;
643          }
644          hydrateObj(event, {
645            delegateTarget: target
646          });
647          if (handler.oneOff) {
648            EventHandler.off(element, event.type, selector, fn);
649          }
650          return fn.apply(target, [event]);
651        }
652      }
653    };
654  }
655  function findHandler(events, callable, delegationSelector = null) {
656    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
657  }
658  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
659    const isDelegated = typeof handler === 'string';
660    // TODO: tooltip passes `false` instead of selector, so we need to check
661    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
662    let typeEvent = getTypeEvent(originalTypeEvent);
663    if (!nativeEvents.has(typeEvent)) {
664      typeEvent = originalTypeEvent;
665    }
666    return [isDelegated, callable, typeEvent];
667  }
668  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
669    if (typeof originalTypeEvent !== 'string' || !element) {
670      return;
671    }
672    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
673
674    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
675    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
676    if (originalTypeEvent in customEvents) {
677      const wrapFunction = fn => {
678        return function (event) {
679          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
680            return fn.call(this, event);
681          }
682        };
683      };
684      callable = wrapFunction(callable);
685    }
686    const events = getElementEvents(element);
687    const handlers = events[typeEvent] || (events[typeEvent] = {});
688    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
689    if (previousFunction) {
690      previousFunction.oneOff = previousFunction.oneOff && oneOff;
691      return;
692    }
693    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
694    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
695    fn.delegationSelector = isDelegated ? handler : null;
696    fn.callable = callable;
697    fn.oneOff = oneOff;
698    fn.uidEvent = uid;
699    handlers[uid] = fn;
700    element.addEventListener(typeEvent, fn, isDelegated);
701  }
702  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
703    const fn = findHandler(events[typeEvent], handler, delegationSelector);
704    if (!fn) {
705      return;
706    }
707    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
708    delete events[typeEvent][fn.uidEvent];
709  }
710  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
711    const storeElementEvent = events[typeEvent] || {};
712    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
713      if (handlerKey.includes(namespace)) {
714        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
715      }
716    }
717  }
718  function getTypeEvent(event) {
719    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
720    event = event.replace(stripNameRegex, '');
721    return customEvents[event] || event;
722  }
723  const EventHandler = {
724    on(element, event, handler, delegationFunction) {
725      addHandler(element, event, handler, delegationFunction, false);
726    },
727    one(element, event, handler, delegationFunction) {
728      addHandler(element, event, handler, delegationFunction, true);
729    },
730    off(element, originalTypeEvent, handler, delegationFunction) {
731      if (typeof originalTypeEvent !== 'string' || !element) {
732        return;
733      }
734      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
735      const inNamespace = typeEvent !== originalTypeEvent;
736      const events = getElementEvents(element);
737      const storeElementEvent = events[typeEvent] || {};
738      const isNamespace = originalTypeEvent.startsWith('.');
739      if (typeof callable !== 'undefined') {
740        // Simplest case: handler is passed, remove that listener ONLY.
741        if (!Object.keys(storeElementEvent).length) {
742          return;
743        }
744        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
745        return;
746      }
747      if (isNamespace) {
748        for (const elementEvent of Object.keys(events)) {
749          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
750        }
751      }
752      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
753        const handlerKey = keyHandlers.replace(stripUidRegex, '');
754        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
755          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
756        }
757      }
758    },
759    trigger(element, event, args) {
760      if (typeof event !== 'string' || !element) {
761        return null;
762      }
763      const $ = getjQuery();
764      const typeEvent = getTypeEvent(event);
765      const inNamespace = event !== typeEvent;
766      let jQueryEvent = null;
767      let bubbles = true;
768      let nativeDispatch = true;
769      let defaultPrevented = false;
770      if (inNamespace && $) {
771        jQueryEvent = $.Event(event, args);
772        $(element).trigger(jQueryEvent);
773        bubbles = !jQueryEvent.isPropagationStopped();
774        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
775        defaultPrevented = jQueryEvent.isDefaultPrevented();
776      }
777      const evt = hydrateObj(new Event(event, {
778        bubbles,
779        cancelable: true
780      }), args);
781      if (defaultPrevented) {
782        evt.preventDefault();
783      }
784      if (nativeDispatch) {
785        element.dispatchEvent(evt);
786      }
787      if (evt.defaultPrevented && jQueryEvent) {
788        jQueryEvent.preventDefault();
789      }
790      return evt;
791    }
792  };
793  function hydrateObj(obj, meta = {}) {
794    for (const [key, value] of Object.entries(meta)) {
795      try {
796        obj[key] = value;
797      } catch (_unused) {
798        Object.defineProperty(obj, key, {
799          configurable: true,
800          get() {
801            return value;
802          }
803        });
804      }
805    }
806    return obj;
807  }
808
809  /**
810   * --------------------------------------------------------------------------
811   * Bootstrap dom/manipulator.js
812   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
813   * --------------------------------------------------------------------------
814   */
815
816  function normalizeData(value) {
817    if (value === 'true') {
818      return true;
819    }
820    if (value === 'false') {
821      return false;
822    }
823    if (value === Number(value).toString()) {
824      return Number(value);
825    }
826    if (value === '' || value === 'null') {
827      return null;
828    }
829    if (typeof value !== 'string') {
830      return value;
831    }
832    try {
833      return JSON.parse(decodeURIComponent(value));
834    } catch (_unused) {
835      return value;
836    }
837  }
838  function normalizeDataKey(key) {
839    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
840  }
841  const Manipulator = {
842    setDataAttribute(element, key, value) {
843      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
844    },
845    removeDataAttribute(element, key) {
846      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
847    },
848    getDataAttributes(element) {
849      if (!element) {
850        return {};
851      }
852      const attributes = {};
853      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
854      for (const key of bsKeys) {
855        let pureKey = key.replace(/^bs/, '');
856        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
857        attributes[pureKey] = normalizeData(element.dataset[key]);
858      }
859      return attributes;
860    },
861    getDataAttribute(element, key) {
862      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
863    }
864  };
865
866  /**
867   * --------------------------------------------------------------------------
868   * Bootstrap util/config.js
869   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
870   * --------------------------------------------------------------------------
871   */
872
vendor: 14,928 bytes, lines 873-1359
873  /**
874   * Class definition
875   */
876
877  class Config {
878    // Getters
879    static get Default() {
880      return {};
881    }
882    static get DefaultType() {
883      return {};
884    }
885    static get NAME() {
886      throw new Error('You have to implement the static method "NAME", for each component!');
887    }
888    _getConfig(config) {
889      config = this._mergeConfigObj(config);
890      config = this._configAfterMerge(config);
891      this._typeCheckConfig(config);
892      return config;
893    }
894    _configAfterMerge(config) {
895      return config;
896    }
897    _mergeConfigObj(config, element) {
898      const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
899
900      return {
901        ...this.constructor.Default,
902        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
903        ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}),
904        ...(typeof config === 'object' ? config : {})
905      };
906    }
907    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
908      for (const [property, expectedTypes] of Object.entries(configTypes)) {
909        const value = config[property];
910        const valueType = isElement$1(value) ? 'element' : toType(value);
911        if (!new RegExp(expectedTypes).test(valueType)) {
912          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
913        }
914      }
915    }
916  }
917
918  /**
919   * --------------------------------------------------------------------------
920   * Bootstrap base-component.js
921   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
922   * --------------------------------------------------------------------------
923   */
924
925  /**
926   * Constants
927   */
928
929  const VERSION = '5.3.0-alpha2';
930
931  /**
932   * Class definition
933   */
934
935  class BaseComponent extends Config {
936    constructor(element, config) {
937      super();
938      element = getElement(element);
939      if (!element) {
940        return;
941      }
942      this._element = element;
943      this._config = this._getConfig(config);
944      Data.set(this._element, this.constructor.DATA_KEY, this);
945    }
946
947    // Public
948    dispose() {
949      Data.remove(this._element, this.constructor.DATA_KEY);
950      EventHandler.off(this._element, this.constructor.EVENT_KEY);
951      for (const propertyName of Object.getOwnPropertyNames(this)) {
952        this[propertyName] = null;
953      }
954    }
955    _queueCallback(callback, element, isAnimated = true) {
956      executeAfterTransition(callback, element, isAnimated);
957    }
958    _getConfig(config) {
959      config = this._mergeConfigObj(config, this._element);
960      config = this._configAfterMerge(config);
961      this._typeCheckConfig(config);
962      return config;
963    }
964
965    // Static
966    static getInstance(element) {
967      return Data.get(getElement(element), this.DATA_KEY);
968    }
969    static getOrCreateInstance(element, config = {}) {
970      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
971    }
972    static get VERSION() {
973      return VERSION;
974    }
975    static get DATA_KEY() {
976      return `bs.${this.NAME}`;
977    }
978    static get EVENT_KEY() {
979      return `.${this.DATA_KEY}`;
980    }
981    static eventName(name) {
982      return `${name}${this.EVENT_KEY}`;
983    }
984  }
985
986  /**
987   * --------------------------------------------------------------------------
988   * Bootstrap dom/selector-engine.js
989   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
990   * --------------------------------------------------------------------------
991   */
992  const getSelector = element => {
993    let selector = element.getAttribute('data-bs-target');
994    if (!selector || selector === '#') {
995      let hrefAttribute = element.getAttribute('href');
996
997      // The only valid content that could double as a selector are IDs or classes,
998      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
999      // `document.querySelector` will rightfully complain it is invalid.
1000      // See https://github.com/twbs/bootstrap/issues/32273
1001      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
1002        return null;
1003      }
1004
1005      // Just in case some CMS puts out a full URL with the anchor appended
1006      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
1007        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
1008      }
1009      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
1010    }
1011    return parseSelector(selector);
1012  };
1013  const SelectorEngine = {
1014    find(selector, element = document.documentElement) {
1015      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
1016    },
1017    findOne(selector, element = document.documentElement) {
1018      return Element.prototype.querySelector.call(element, selector);
1019    },
1020    children(element, selector) {
1021      return [].concat(...element.children).filter(child => child.matches(selector));
1022    },
1023    parents(element, selector) {
1024      const parents = [];
1025      let ancestor = element.parentNode.closest(selector);
1026      while (ancestor) {
1027        parents.push(ancestor);
1028        ancestor = ancestor.parentNode.closest(selector);
1029      }
1030      return parents;
1031    },
1032    prev(element, selector) {
1033      let previous = element.previousElementSibling;
1034      while (previous) {
1035        if (previous.matches(selector)) {
1036          return [previous];
1037        }
1038        previous = previous.previousElementSibling;
1039      }
1040      return [];
1041    },
1042    // TODO: this is now unused; remove later along with prev()
1043    next(element, selector) {
1044      let next = element.nextElementSibling;
1045      while (next) {
1046        if (next.matches(selector)) {
1047          return [next];
1048        }
1049        next = next.nextElementSibling;
1050      }
1051      return [];
1052    },
1053    focusableChildren(element) {
1054      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
1055      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
1056    },
1057    getSelectorFromElement(element) {
1058      const selector = getSelector(element);
1059      if (selector) {
1060        return SelectorEngine.findOne(selector) ? selector : null;
1061      }
1062      return null;
1063    },
1064    getElementFromSelector(element) {
1065      const selector = getSelector(element);
1066      return selector ? SelectorEngine.findOne(selector) : null;
1067    },
1068    getMultipleElementsFromSelector(element) {
1069      const selector = getSelector(element);
1070      return selector ? SelectorEngine.find(selector) : [];
1071    }
1072  };
1073
1074  /**
1075   * --------------------------------------------------------------------------
1076   * Bootstrap util/component-functions.js
1077   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1078   * --------------------------------------------------------------------------
1079   */
1080  const enableDismissTrigger = (component, method = 'hide') => {
1081    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
1082    const name = component.NAME;
1083    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
1084      if (['A', 'AREA'].includes(this.tagName)) {
1085        event.preventDefault();
1086      }
1087      if (isDisabled(this)) {
1088        return;
1089      }
1090      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
1091      const instance = component.getOrCreateInstance(target);
1092
1093      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
1094      instance[method]();
1095    });
1096  };
1097
1098  /**
1099   * --------------------------------------------------------------------------
1100   * Bootstrap alert.js
1101   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1102   * --------------------------------------------------------------------------
1103   */
1104
1105  /**
1106   * Constants
1107   */
1108
1109  const NAME$f = 'alert';
1110  const DATA_KEY$a = 'bs.alert';
1111  const EVENT_KEY$b = `.${DATA_KEY$a}`;
1112  const EVENT_CLOSE = `close${EVENT_KEY$b}`;
1113  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
1114  const CLASS_NAME_FADE$5 = 'fade';
1115  const CLASS_NAME_SHOW$8 = 'show';
1116
1117  /**
1118   * Class definition
1119   */
1120
1121  class Alert extends BaseComponent {
1122    // Getters
1123    static get NAME() {
1124      return NAME$f;
1125    }
1126
1127    // Public
1128    close() {
1129      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
1130      if (closeEvent.defaultPrevented) {
1131        return;
1132      }
1133      this._element.classList.remove(CLASS_NAME_SHOW$8);
1134      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
1135      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
1136    }
1137
1138    // Private
1139    _destroyElement() {
1140      this._element.remove();
1141      EventHandler.trigger(this._element, EVENT_CLOSED);
1142      this.dispose();
1143    }
1144
1145    // Static
1146    static jQueryInterface(config) {
1147      return this.each(function () {
1148        const data = Alert.getOrCreateInstance(this);
1149        if (typeof config !== 'string') {
1150          return;
1151        }
1152        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
1153          throw new TypeError(`No method named "${config}"`);
1154        }
1155        data[config](this);
1156      });
1157    }
1158  }
1159
1160  /**
1161   * Data API implementation
1162   */
1163
1164  enableDismissTrigger(Alert, 'close');
1165
1166  /**
1167   * jQuery
1168   */
1169
1170  defineJQueryPlugin(Alert);
1171
1172  /**
1173   * --------------------------------------------------------------------------
1174   * Bootstrap button.js
1175   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1176   * --------------------------------------------------------------------------
1177   */
1178
1179  /**
1180   * Constants
1181   */
1182
1183  const NAME$e = 'button';
1184  const DATA_KEY$9 = 'bs.button';
1185  const EVENT_KEY$a = `.${DATA_KEY$9}`;
1186  const DATA_API_KEY$6 = '.data-api';
1187  const CLASS_NAME_ACTIVE$3 = 'active';
1188  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
1189  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
1190
1191  /**
1192   * Class definition
1193   */
1194
1195  class Button extends BaseComponent {
1196    // Getters
1197    static get NAME() {
1198      return NAME$e;
1199    }
1200
1201    // Public
1202    toggle() {
1203      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
1204      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
1205    }
1206
1207    // Static
1208    static jQueryInterface(config) {
1209      return this.each(function () {
1210        const data = Button.getOrCreateInstance(this);
1211        if (config === 'toggle') {
1212          data[config]();
1213        }
1214      });
1215    }
1216  }
1217
1218  /**
1219   * Data API implementation
1220   */
1221
1222  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
1223    event.preventDefault();
1224    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
1225    const data = Button.getOrCreateInstance(button);
1226    data.toggle();
1227  });
1228
1229  /**
1230   * jQuery
1231   */
1232
1233  defineJQueryPlugin(Button);
1234
1235  /**
1236   * --------------------------------------------------------------------------
1237   * Bootstrap util/swipe.js
1238   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1239   * --------------------------------------------------------------------------
1240   */
1241
1242  /**
1243   * Constants
1244   */
1245
1246  const NAME$d = 'swipe';
1247  const EVENT_KEY$9 = '.bs.swipe';
1248  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
1249  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
1250  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
1251  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
1252  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
1253  const POINTER_TYPE_TOUCH = 'touch';
1254  const POINTER_TYPE_PEN = 'pen';
1255  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
1256  const SWIPE_THRESHOLD = 40;
1257  const Default$c = {
1258    endCallback: null,
1259    leftCallback: null,
1260    rightCallback: null
1261  };
1262  const DefaultType$c = {
1263    endCallback: '(function|null)',
1264    leftCallback: '(function|null)',
1265    rightCallback: '(function|null)'
1266  };
1267
1268  /**
1269   * Class definition
1270   */
1271
1272  class Swipe extends Config {
1273    constructor(element, config) {
1274      super();
1275      this._element = element;
1276      if (!element || !Swipe.isSupported()) {
1277        return;
1278      }
1279      this._config = this._getConfig(config);
1280      this._deltaX = 0;
1281      this._supportPointerEvents = Boolean(window.PointerEvent);
1282      this._initEvents();
1283    }
1284
1285    // Getters
1286    static get Default() {
1287      return Default$c;
1288    }
1289    static get DefaultType() {
1290      return DefaultType$c;
1291    }
1292    static get NAME() {
1293      return NAME$d;
1294    }
1295
1296    // Public
1297    dispose() {
1298      EventHandler.off(this._element, EVENT_KEY$9);
1299    }
1300
1301    // Private
1302    _start(event) {
1303      if (!this._supportPointerEvents) {
1304        this._deltaX = event.touches[0].clientX;
1305        return;
1306      }
1307      if (this._eventIsPointerPenTouch(event)) {
1308        this._deltaX = event.clientX;
1309      }
1310    }
1311    _end(event) {
1312      if (this._eventIsPointerPenTouch(event)) {
1313        this._deltaX = event.clientX - this._deltaX;
1314      }
1315      this._handleSwipe();
1316      execute(this._config.endCallback);
1317    }
1318    _move(event) {
1319      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
1320    }
1321    _handleSwipe() {
1322      const absDeltaX = Math.abs(this._deltaX);
1323      if (absDeltaX <= SWIPE_THRESHOLD) {
1324        return;
1325      }
1326      const direction = absDeltaX / this._deltaX;
1327      this._deltaX = 0;
1328      if (!direction) {
1329        return;
1330      }
1331      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
1332    }
1333    _initEvents() {
1334      if (this._supportPointerEvents) {
1335        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
1336        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
1337        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
1338      } else {
1339        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
1340        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
1341        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
1342      }
1343    }
1344    _eventIsPointerPenTouch(event) {
1345      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
1346    }
1347
1348    // Static
1349    static isSupported() {
1350      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
1351    }
1352  }
1353
1354  /**
1355   * --------------------------------------------------------------------------
1356   * Bootstrap carousel.js
1357   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1358   * --------------------------------------------------------------------------
1359   */
vendor: 12,291 bytes, lines 1359-1732
1359
1360
1361  /**
1362   * Constants
1363   */
1364
1365  const NAME$c = 'carousel';
1366  const DATA_KEY$8 = 'bs.carousel';
1367  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
1368  const DATA_API_KEY$5 = '.data-api';
1369  const ARROW_LEFT_KEY$1 = 'ArrowLeft';
1370  const ARROW_RIGHT_KEY$1 = 'ArrowRight';
1371  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
1372
1373  const ORDER_NEXT = 'next';
1374  const ORDER_PREV = 'prev';
1375  const DIRECTION_LEFT = 'left';
1376  const DIRECTION_RIGHT = 'right';
1377  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
1378  const EVENT_SLID = `slid${EVENT_KEY$8}`;
1379  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
1380  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
1381  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
1382  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
1383  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
1384  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
1385  const CLASS_NAME_CAROUSEL = 'carousel';
1386  const CLASS_NAME_ACTIVE$2 = 'active';
1387  const CLASS_NAME_SLIDE = 'slide';
1388  const CLASS_NAME_END = 'carousel-item-end';
1389  const CLASS_NAME_START = 'carousel-item-start';
1390  const CLASS_NAME_NEXT = 'carousel-item-next';
1391  const CLASS_NAME_PREV = 'carousel-item-prev';
1392  const SELECTOR_ACTIVE = '.active';
1393  const SELECTOR_ITEM = '.carousel-item';
1394  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
1395  const SELECTOR_ITEM_IMG = '.carousel-item img';
1396  const SELECTOR_INDICATORS = '.carousel-indicators';
1397  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
1398  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
1399  const KEY_TO_DIRECTION = {
1400    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
1401    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
1402  };
1403  const Default$b = {
1404    interval: 5000,
1405    keyboard: true,
1406    pause: 'hover',
1407    ride: false,
1408    touch: true,
1409    wrap: true
1410  };
1411  const DefaultType$b = {
1412    interval: '(number|boolean)',
1413    // TODO:v6 remove boolean support
1414    keyboard: 'boolean',
1415    pause: '(string|boolean)',
1416    ride: '(boolean|string)',
1417    touch: 'boolean',
1418    wrap: 'boolean'
1419  };
1420
1421  /**
1422   * Class definition
1423   */
1424
1425  class Carousel extends BaseComponent {
1426    constructor(element, config) {
1427      super(element, config);
1428      this._interval = null;
1429      this._activeElement = null;
1430      this._isSliding = false;
1431      this.touchTimeout = null;
1432      this._swipeHelper = null;
1433      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
1434      this._addEventListeners();
1435      if (this._config.ride === CLASS_NAME_CAROUSEL) {
1436        this.cycle();
1437      }
1438    }
1439
1440    // Getters
1441    static get Default() {
1442      return Default$b;
1443    }
1444    static get DefaultType() {
1445      return DefaultType$b;
1446    }
1447    static get NAME() {
1448      return NAME$c;
1449    }
1450
1451    // Public
1452    next() {
1453      this._slide(ORDER_NEXT);
1454    }
1455    nextWhenVisible() {
1456      // FIXME TODO use `document.visibilityState`
1457      // Don't call next when the page isn't visible
1458      // or the carousel or its parent isn't visible
1459      if (!document.hidden && isVisible(this._element)) {
1460        this.next();
1461      }
1462    }
1463    prev() {
1464      this._slide(ORDER_PREV);
1465    }
1466    pause() {
1467      if (this._isSliding) {
1468        triggerTransitionEnd(this._element);
1469      }
1470      this._clearInterval();
1471    }
1472    cycle() {
1473      this._clearInterval();
1474      this._updateInterval();
1475      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
1476    }
1477    _maybeEnableCycle() {
1478      if (!this._config.ride) {
1479        return;
1480      }
1481      if (this._isSliding) {
1482        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
1483        return;
1484      }
1485      this.cycle();
1486    }
1487    to(index) {
1488      const items = this._getItems();
1489      if (index > items.length - 1 || index < 0) {
1490        return;
1491      }
1492      if (this._isSliding) {
1493        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
1494        return;
1495      }
1496      const activeIndex = this._getItemIndex(this._getActive());
1497      if (activeIndex === index) {
1498        return;
1499      }
1500      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
1501      this._slide(order, items[index]);
1502    }
1503    dispose() {
1504      if (this._swipeHelper) {
1505        this._swipeHelper.dispose();
1506      }
1507      super.dispose();
1508    }
1509
1510    // Private
1511    _configAfterMerge(config) {
1512      config.defaultInterval = config.interval;
1513      return config;
1514    }
1515    _addEventListeners() {
1516      if (this._config.keyboard) {
1517        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
1518      }
1519      if (this._config.pause === 'hover') {
1520        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
1521        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
1522      }
1523      if (this._config.touch && Swipe.isSupported()) {
1524        this._addTouchEventListeners();
1525      }
1526    }
1527    _addTouchEventListeners() {
1528      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
1529        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
1530      }
1531      const endCallBack = () => {
1532        if (this._config.pause !== 'hover') {
1533          return;
1534        }
1535
1536        // If it's a touch-enabled device, mouseenter/leave are fired as
1537        // part of the mouse compatibility events on first tap - the carousel
1538        // would stop cycling until user tapped out of it;
1539        // here, we listen for touchend, explicitly pause the carousel
1540        // (as if it's the second time we tap on it, mouseenter compat event
1541        // is NOT fired) and after a timeout (to allow for mouse compatibility
1542        // events to fire) we explicitly restart cycling
1543
1544        this.pause();
1545        if (this.touchTimeout) {
1546          clearTimeout(this.touchTimeout);
1547        }
1548        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
1549      };
1550      const swipeConfig = {
1551        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
1552        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
1553        endCallback: endCallBack
1554      };
1555      this._swipeHelper = new Swipe(this._element, swipeConfig);
1556    }
1557    _keydown(event) {
1558      if (/input|textarea/i.test(event.target.tagName)) {
1559        return;
1560      }
1561      const direction = KEY_TO_DIRECTION[event.key];
1562      if (direction) {
1563        event.preventDefault();
1564        this._slide(this._directionToOrder(direction));
1565      }
1566    }
1567    _getItemIndex(element) {
1568      return this._getItems().indexOf(element);
1569    }
1570    _setActiveIndicatorElement(index) {
1571      if (!this._indicatorsElement) {
1572        return;
1573      }
1574      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
1575      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
1576      activeIndicator.removeAttribute('aria-current');
1577      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
1578      if (newActiveIndicator) {
1579        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
1580        newActiveIndicator.setAttribute('aria-current', 'true');
1581      }
1582    }
1583    _updateInterval() {
1584      const element = this._activeElement || this._getActive();
1585      if (!element) {
1586        return;
1587      }
1588      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
1589      this._config.interval = elementInterval || this._config.defaultInterval;
1590    }
1591    _slide(order, element = null) {
1592      if (this._isSliding) {
1593        return;
1594      }
1595      const activeElement = this._getActive();
1596      const isNext = order === ORDER_NEXT;
1597      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
1598      if (nextElement === activeElement) {
1599        return;
1600      }
1601      const nextElementIndex = this._getItemIndex(nextElement);
1602      const triggerEvent = eventName => {
1603        return EventHandler.trigger(this._element, eventName, {
1604          relatedTarget: nextElement,
1605          direction: this._orderToDirection(order),
1606          from: this._getItemIndex(activeElement),
1607          to: nextElementIndex
1608        });
1609      };
1610      const slideEvent = triggerEvent(EVENT_SLIDE);
1611      if (slideEvent.defaultPrevented) {
1612        return;
1613      }
1614      if (!activeElement || !nextElement) {
1615        // Some weirdness is happening, so we bail
1616        // TODO: change tests that use empty divs to avoid this check
1617        return;
1618      }
1619      const isCycling = Boolean(this._interval);
1620      this.pause();
1621      this._isSliding = true;
1622      this._setActiveIndicatorElement(nextElementIndex);
1623      this._activeElement = nextElement;
1624      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
1625      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
1626      nextElement.classList.add(orderClassName);
1627      reflow(nextElement);
1628      activeElement.classList.add(directionalClassName);
1629      nextElement.classList.add(directionalClassName);
1630      const completeCallBack = () => {
1631        nextElement.classList.remove(directionalClassName, orderClassName);
1632        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
1633        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
1634        this._isSliding = false;
1635        triggerEvent(EVENT_SLID);
1636      };
1637      this._queueCallback(completeCallBack, activeElement, this._isAnimated());
1638      if (isCycling) {
1639        this.cycle();
1640      }
1641    }
1642    _isAnimated() {
1643      return this._element.classList.contains(CLASS_NAME_SLIDE);
1644    }
1645    _getActive() {
1646      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
1647    }
1648    _getItems() {
1649      return SelectorEngine.find(SELECTOR_ITEM, this._element);
1650    }
1651    _clearInterval() {
1652      if (this._interval) {
1653        clearInterval(this._interval);
1654        this._interval = null;
1655      }
1656    }
1657    _directionToOrder(direction) {
1658      if (isRTL()) {
1659        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
1660      }
1661      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
1662    }
1663    _orderToDirection(order) {
1664      if (isRTL()) {
1665        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
1666      }
1667      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
1668    }
1669
1670    // Static
1671    static jQueryInterface(config) {
1672      return this.each(function () {
1673        const data = Carousel.getOrCreateInstance(this, config);
1674        if (typeof config === 'number') {
1675          data.to(config);
1676          return;
1677        }
1678        if (typeof config === 'string') {
1679          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
1680            throw new TypeError(`No method named "${config}"`);
1681          }
1682          data[config]();
1683        }
1684      });
1685    }
1686  }
1687
1688  /**
1689   * Data API implementation
1690   */
1691
1692  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
1693    const target = SelectorEngine.getElementFromSelector(this);
1694    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
1695      return;
1696    }
1697    event.preventDefault();
1698    const carousel = Carousel.getOrCreateInstance(target);
1699    const slideIndex = this.getAttribute('data-bs-slide-to');
1700    if (slideIndex) {
1701      carousel.to(slideIndex);
1702      carousel._maybeEnableCycle();
1703      return;
1704    }
1705    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
1706      carousel.next();
1707      carousel._maybeEnableCycle();
1708      return;
1709    }
1710    carousel.prev();
1711    carousel._maybeEnableCycle();
1712  });
1713  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
1714    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
1715    for (const carousel of carousels) {
1716      Carousel.getOrCreateInstance(carousel);
1717    }
1718  });
1719
1720  /**
1721   * jQuery
1722   */
1723
1724  defineJQueryPlugin(Carousel);
1725
1726  /**
1727   * --------------------------------------------------------------------------
1728   * Bootstrap collapse.js
1729   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1730   * --------------------------------------------------------------------------
1731   */
1732
vendor: 4,775 bytes, lines 1733-1871
1733  /**
1734   * Constants
1735   */
1736
1737  const NAME$b = 'collapse';
1738  const DATA_KEY$7 = 'bs.collapse';
1739  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
1740  const DATA_API_KEY$4 = '.data-api';
1741  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
1742  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
1743  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
1744  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
1745  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
1746  const CLASS_NAME_SHOW$7 = 'show';
1747  const CLASS_NAME_COLLAPSE = 'collapse';
1748  const CLASS_NAME_COLLAPSING = 'collapsing';
1749  const CLASS_NAME_COLLAPSED = 'collapsed';
1750  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
1751  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
1752  const WIDTH = 'width';
1753  const HEIGHT = 'height';
1754  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
1755  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
1756  const Default$a = {
1757    parent: null,
1758    toggle: true
1759  };
1760  const DefaultType$a = {
1761    parent: '(null|element)',
1762    toggle: 'boolean'
1763  };
1764
1765  /**
1766   * Class definition
1767   */
1768
1769  class Collapse extends BaseComponent {
1770    constructor(element, config) {
1771      super(element, config);
1772      this._isTransitioning = false;
1773      this._triggerArray = [];
1774      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
1775      for (const elem of toggleList) {
1776        const selector = SelectorEngine.getSelectorFromElement(elem);
1777        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
1778        if (selector !== null && filterElement.length) {
1779          this._triggerArray.push(elem);
1780        }
1781      }
1782      this._initializeChildren();
1783      if (!this._config.parent) {
1784        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
1785      }
1786      if (this._config.toggle) {
1787        this.toggle();
1788      }
1789    }
1790
1791    // Getters
1792    static get Default() {
1793      return Default$a;
1794    }
1795    static get DefaultType() {
1796      return DefaultType$a;
1797    }
1798    static get NAME() {
1799      return NAME$b;
1800    }
1801
1802    // Public
1803    toggle() {
1804      if (this._isShown()) {
1805        this.hide();
1806      } else {
1807        this.show();
1808      }
1809    }
1810    show() {
1811      if (this._isTransitioning || this._isShown()) {
1812        return;
1813      }
1814      let activeChildren = [];
1815
1816      // find active children
1817      if (this._config.parent) {
1818        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
1819          toggle: false
1820        }));
1821      }
1822      if (activeChildren.length && activeChildren[0]._isTransitioning) {
1823        return;
1824      }
1825      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
1826      if (startEvent.defaultPrevented) {
1827        return;
1828      }
1829      for (const activeInstance of activeChildren) {
1830        activeInstance.hide();
1831      }
1832      const dimension = this._getDimension();
1833      this._element.classList.remove(CLASS_NAME_COLLAPSE);
1834      this._element.classList.add(CLASS_NAME_COLLAPSING);
1835      this._element.style[dimension] = 0;
1836      this._addAriaAndCollapsedClass(this._triggerArray, true);
1837      this._isTransitioning = true;
1838      const complete = () => {
1839        this._isTransitioning = false;
1840        this._element.classList.remove(CLASS_NAME_COLLAPSING);
1841        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1842        this._element.style[dimension] = '';
1843        EventHandler.trigger(this._element, EVENT_SHOWN$6);
1844      };
1845      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1846      const scrollSize = `scroll${capitalizedDimension}`;
1847      this._queueCallback(complete, this._element, true);
1848      this._element.style[dimension] = `${this._element[scrollSize]}px`;
1849    }
1850    hide() {
1851      if (this._isTransitioning || !this._isShown()) {
1852        return;
1853      }
1854      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
1855      if (startEvent.defaultPrevented) {
1856        return;
1857      }
1858      const dimension = this._getDimension();
1859      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
1860      reflow(this._element);
1861      this._element.classList.add(CLASS_NAME_COLLAPSING);
1862      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1863      for (const trigger of this._triggerArray) {
1864        const element = SelectorEngine.getElementFromSelector(trigger);
1865        if (element && !this._isShown(element)) {
1866          this._addAriaAndCollapsedClass([trigger], false);
1867        }
1868      }
1869      this._isTransitioning = true;
1870      const complete = () => {
1871        this._isTransitioning = false;
1872        this._element.classList.remove(CLASS_NAME_COLLAPSING);
1873        this._element.classList.add(CLASS_NAME_COLLAPSE);
1874        EventHandler.trigger(this._element, EVENT_HIDDEN$6
vendor: 17,216 bytes, lines 1874-2409
1874);
1875      };
1876      this._element.style[dimension] = '';
1877      this._queueCallback(complete, this._element, true);
1878    }
1879    _isShown(element = this._element) {
1880      return element.classList.contains(CLASS_NAME_SHOW$7);
1881    }
1882
1883    // Private
1884    _configAfterMerge(config) {
1885      config.toggle = Boolean(config.toggle); // Coerce string values
1886      config.parent = getElement(config.parent);
1887      return config;
1888    }
1889    _getDimension() {
1890      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
1891    }
1892    _initializeChildren() {
1893      if (!this._config.parent) {
1894        return;
1895      }
1896      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
1897      for (const element of children) {
1898        const selected = SelectorEngine.getElementFromSelector(element);
1899        if (selected) {
1900          this._addAriaAndCollapsedClass([element], this._isShown(selected));
1901        }
1902      }
1903    }
1904    _getFirstLevelChildren(selector) {
1905      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1906      // remove children if greater depth
1907      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
1908    }
1909    _addAriaAndCollapsedClass(triggerArray, isOpen) {
1910      if (!triggerArray.length) {
1911        return;
1912      }
1913      for (const element of triggerArray) {
1914        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
1915        element.setAttribute('aria-expanded', isOpen);
1916      }
1917    }
1918
1919    // Static
1920    static jQueryInterface(config) {
1921      const _config = {};
1922      if (typeof config === 'string' && /show|hide/.test(config)) {
1923        _config.toggle = false;
1924      }
1925      return this.each(function () {
1926        const data = Collapse.getOrCreateInstance(this, _config);
1927        if (typeof config === 'string') {
1928          if (typeof data[config] === 'undefined') {
1929            throw new TypeError(`No method named "${config}"`);
1930          }
1931          data[config]();
1932        }
1933      });
1934    }
1935  }
1936
1937  /**
1938   * Data API implementation
1939   */
1940
1941  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
1942    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1943    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
1944      event.preventDefault();
1945    }
1946    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
1947      Collapse.getOrCreateInstance(element, {
1948        toggle: false
1949      }).toggle();
1950    }
1951  });
1952
1953  /**
1954   * jQuery
1955   */
1956
1957  defineJQueryPlugin(Collapse);
1958
1959  var top = 'top';
1960  var bottom = 'bottom';
1961  var right = 'right';
1962  var left = 'left';
1963  var auto = 'auto';
1964  var basePlacements = [top, bottom, right, left];
1965  var start = 'start';
1966  var end = 'end';
1967  var clippingParents = 'clippingParents';
1968  var viewport = 'viewport';
1969  var popper = 'popper';
1970  var reference = 'reference';
1971  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
1972    return acc.concat([placement + "-" + start, placement + "-" + end]);
1973  }, []);
1974  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
1975    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1976  }, []); // modifiers that need to read the DOM
1977
1978  var beforeRead = 'beforeRead';
1979  var read = 'read';
1980  var afterRead = 'afterRead'; // pure-logic modifiers
1981
1982  var beforeMain = 'beforeMain';
1983  var main = 'main';
1984  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
1985
1986  var beforeWrite = 'beforeWrite';
1987  var write = 'write';
1988  var afterWrite = 'afterWrite';
1989  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1990
1991  function getNodeName(element) {
1992    return element ? (element.nodeName || '').toLowerCase() : null;
1993  }
1994
1995  function getWindow(node) {
1996    if (node == null) {
1997      return window;
1998    }
1999
2000    if (node.toString() !== '[object Window]') {
2001      var ownerDocument = node.ownerDocument;
2002      return ownerDocument ? ownerDocument.defaultView || window : window;
2003    }
2004
2005    return node;
2006  }
2007
2008  function isElement(node) {
2009    var OwnElement = getWindow(node).Element;
2010    return node instanceof OwnElement || node instanceof Element;
2011  }
2012
2013  function isHTMLElement(node) {
2014    var OwnElement = getWindow(node).HTMLElement;
2015    return node instanceof OwnElement || node instanceof HTMLElement;
2016  }
2017
2018  function isShadowRoot(node) {
2019    // IE 11 has no ShadowRoot
2020    if (typeof ShadowRoot === 'undefined') {
2021      return false;
2022    }
2023
2024    var OwnElement = getWindow(node).ShadowRoot;
2025    return node instanceof OwnElement || node instanceof ShadowRoot;
2026  }
2027
2028  // and applies them to the HTMLElements such as popper and arrow
2029
2030  function applyStyles(_ref) {
2031    var state = _ref.state;
2032    Object.keys(state.elements).forEach(function (name) {
2033      var style = state.styles[name] || {};
2034      var attributes = state.attributes[name] || {};
2035      var element = state.elements[name]; // arrow is optional + virtual elements
2036
2037      if (!isHTMLElement(element) || !getNodeName(element)) {
2038        return;
2039      } // Flow doesn't support to extend this property, but it's the most
2040      // effective way to apply styles to an HTMLElement
2041      // $FlowFixMe[cannot-write]
2042
2043
2044      Object.assign(element.style, style);
2045      Object.keys(attributes).forEach(function (name) {
2046        var value = attributes[name];
2047
2048        if (value === false) {
2049          element.removeAttribute(name);
2050        } else {
2051          element.setAttribute(name, value === true ? '' : value);
2052        }
2053      });
2054    });
2055  }
2056
2057  function effect$2(_ref2) {
2058    var state = _ref2.state;
2059    var initialStyles = {
2060      popper: {
2061        position: state.options.strategy,
2062        left: '0',
2063        top: '0',
2064        margin: '0'
2065      },
2066      arrow: {
2067        position: 'absolute'
2068      },
2069      reference: {}
2070    };
2071    Object.assign(state.elements.popper.style, initialStyles.popper);
2072    state.styles = initialStyles;
2073
2074    if (state.elements.arrow) {
2075      Object.assign(state.elements.arrow.style, initialStyles.arrow);
2076    }
2077
2078    return function () {
2079      Object.keys(state.elements).forEach(function (name) {
2080        var element = state.elements[name];
2081        var attributes = state.attributes[name] || {};
2082        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
2083
2084        var style = styleProperties.reduce(function (style, property) {
2085          style[property] = '';
2086          return style;
2087        }, {}); // arrow is optional + virtual elements
2088
2089        if (!isHTMLElement(element) || !getNodeName(element)) {
2090          return;
2091        }
2092
2093        Object.assign(element.style, style);
2094        Object.keys(attributes).forEach(function (attribute) {
2095          element.removeAttribute(attribute);
2096        });
2097      });
2098    };
2099  } // eslint-disable-next-line import/no-unused-modules
2100
2101
2102  const applyStyles$1 = {
2103    name: 'applyStyles',
2104    enabled: true,
2105    phase: 'write',
2106    fn: applyStyles,
2107    effect: effect$2,
2108    requires: ['computeStyles']
2109  };
2110
2111  function getBasePlacement(placement) {
2112    return placement.split('-')[0];
2113  }
2114
2115  var max = Math.max;
2116  var min = Math.min;
2117  var round = Math.round;
2118
2119  function getUAString() {
2120    var uaData = navigator.userAgentData;
2121
2122    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
2123      return uaData.brands.map(function (item) {
2124        return item.brand + "/" + item.version;
2125      }).join(' ');
2126    }
2127
2128    return navigator.userAgent;
2129  }
2130
2131  function isLayoutViewport() {
2132    return !/^((?!chrome|android).)*safari/i.test(getUAString());
2133  }
2134
2135  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
2136    if (includeScale === void 0) {
2137      includeScale = false;
2138    }
2139
2140    if (isFixedStrategy === void 0) {
2141      isFixedStrategy = false;
2142    }
2143
2144    var clientRect = element.getBoundingClientRect();
2145    var scaleX = 1;
2146    var scaleY = 1;
2147
2148    if (includeScale && isHTMLElement(element)) {
2149      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
2150      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
2151    }
2152
2153    var _ref = isElement(element) ? getWindow(element) : window,
2154        visualViewport = _ref.visualViewport;
2155
2156    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
2157    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
2158    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
2159    var width = clientRect.width / scaleX;
2160    var height = clientRect.height / scaleY;
2161    return {
2162      width: width,
2163      height: height,
2164      top: y,
2165      right: x + width,
2166      bottom: y + height,
2167      left: x,
2168      x: x,
2169      y: y
2170    };
2171  }
2172
2173  // means it doesn't take into account transforms.
2174
2175  function getLayoutRect(element) {
2176    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
2177    // Fixes https://github.com/popperjs/popper-core/issues/1223
2178
2179    var width = element.offsetWidth;
2180    var height = element.offsetHeight;
2181
2182    if (Math.abs(clientRect.width - width) <= 1) {
2183      width = clientRect.width;
2184    }
2185
2186    if (Math.abs(clientRect.height - height) <= 1) {
2187      height = clientRect.height;
2188    }
2189
2190    return {
2191      x: element.offsetLeft,
2192      y: element.offsetTop,
2193      width: width,
2194      height: height
2195    };
2196  }
2197
2198  function contains(parent, child) {
2199    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
2200
2201    if (parent.contains(child)) {
2202      return true;
2203    } // then fallback to custom implementation with Shadow DOM support
2204    else if (rootNode && isShadowRoot(rootNode)) {
2205        var next = child;
2206
2207        do {
2208          if (next && parent.isSameNode(next)) {
2209            return true;
2210          } // $FlowFixMe[prop-missing]: need a better way to handle this...
2211
2212
2213          next = next.parentNode || next.host;
2214        } while (next);
2215      } // Give up, the result is false
2216
2217
2218    return false;
2219  }
2220
2221  function getComputedStyle$1(element) {
2222    return getWindow(element).getComputedStyle(element);
2223  }
2224
2225  function isTableElement(element) {
2226    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
2227  }
2228
2229  function getDocumentElement(element) {
2230    // $FlowFixMe[incompatible-return]: assume body is always available
2231    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
2232    element.document) || window.document).documentElement;
2233  }
2234
2235  function getParentNode(element) {
2236    if (getNodeName(element) === 'html') {
2237      return element;
2238    }
2239
2240    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
2241      // $FlowFixMe[incompatible-return]
2242      // $FlowFixMe[prop-missing]
2243      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
2244      element.parentNode || ( // DOM Element detected
2245      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
2246      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
2247      getDocumentElement(element) // fallback
2248
2249    );
2250  }
2251
2252  function getTrueOffsetParent(element) {
2253    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
2254    getComputedStyle$1(element).position === 'fixed') {
2255      return null;
2256    }
2257
2258    return element.offsetParent;
2259  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
2260  // return the containing block
2261
2262
2263  function getContainingBlock(element) {
2264    var isFirefox = /firefox/i.test(getUAString());
2265    var isIE = /Trident/i.test(getUAString());
2266
2267    if (isIE && isHTMLElement(element)) {
2268      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
2269      var elementCss = getComputedStyle$1(element);
2270
2271      if (elementCss.position === 'fixed') {
2272        return null;
2273      }
2274    }
2275
2276    var currentNode = getParentNode(element);
2277
2278    if (isShadowRoot(currentNode)) {
2279      currentNode = currentNode.host;
2280    }
2281
2282    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
2283      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
2284      // create a containing block.
2285      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
2286
2287      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
2288        return currentNode;
2289      } else {
2290        currentNode = currentNode.parentNode;
2291      }
2292    }
2293
2294    return null;
2295  } // Gets the closest ancestor positioned element. Handles some edge cases,
2296  // such as table ancestors and cross browser bugs.
2297
2298
2299  function getOffsetParent(element) {
2300    var window = getWindow(element);
2301    var offsetParent = getTrueOffsetParent(element);
2302
2303    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
2304      offsetParent = getTrueOffsetParent(offsetParent);
2305    }
2306
2307    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
2308      return window;
2309    }
2310
2311    return offsetParent || getContainingBlock(element) || window;
2312  }
2313
2314  function getMainAxisFromPlacement(placement) {
2315    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
2316  }
2317
2318  function within(min$1, value, max$1) {
2319    return max(min$1, min(value, max$1));
2320  }
2321  function withinMaxClamp(min, value, max) {
2322    var v = within(min, value, max);
2323    return v > max ? max : v;
2324  }
2325
2326  function getFreshSideObject() {
2327    return {
2328      top: 0,
2329      right: 0,
2330      bottom: 0,
2331      left: 0
2332    };
2333  }
2334
2335  function mergePaddingObject(paddingObject) {
2336    return Object.assign({}, getFreshSideObject(), paddingObject);
2337  }
2338
2339  function expandToHashMap(value, keys) {
2340    return keys.reduce(function (hashMap, key) {
2341      hashMap[key] = value;
2342      return hashMap;
2343    }, {});
2344  }
2345
2346  var toPaddingObject = function toPaddingObject(padding, state) {
2347    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
2348      placement: state.placement
2349    })) : padding;
2350    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
2351  };
2352
2353  function arrow(_ref) {
2354    var _state$modifiersData$;
2355
2356    var state = _ref.state,
2357        name = _ref.name,
2358        options = _ref.options;
2359    var arrowElement = state.elements.arrow;
2360    var popperOffsets = state.modifiersData.popperOffsets;
2361    var basePlacement = getBasePlacement(state.placement);
2362    var axis = getMainAxisFromPlacement(basePlacement);
2363    var isVertical = [left, right].indexOf(basePlacement) >= 0;
2364    var len = isVertical ? 'height' : 'width';
2365
2366    if (!arrowElement || !popperOffsets) {
2367      return;
2368    }
2369
2370    var paddingObject = toPaddingObject(options.padding, state);
2371    var arrowRect = getLayoutRect(arrowElement);
2372    var minProp = axis === 'y' ? top : left;
2373    var maxProp = axis === 'y' ? bottom : right;
2374    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
2375    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
2376    var arrowOffsetParent = getOffsetParent(arrowElement);
2377    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
2378    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
2379    // outside of the popper bounds
2380
2381    var min = paddingObject[minProp];
2382    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
2383    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
2384    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
2385
2386    var axisProp = axis;
2387    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
2388  }
2389
2390  function effect$1(_ref2) {
2391    var state = _ref2.state,
2392        options = _ref2.options;
2393    var _options$element = options.element,
2394        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
2395
2396    if (arrowElement == null) {
2397      return;
2398    } // CSS selector
2399
2400
2401    if (typeof arrowElement === 'string') {
2402      arrowElement = state.elements.popper.querySelector(arrowElement);
2403
2404      if (!arrowElement) {
2405        return;
2406      }
2407    }
2408
2409    if (!contains(state.elements.popper, arrowElement)) {
vendor: 4,585 bytes, lines 2410-2551
2410
2411      return;
2412    }
2413
2414    state.elements.arrow = arrowElement;
2415  } // eslint-disable-next-line import/no-unused-modules
2416
2417
2418  const arrow$1 = {
2419    name: 'arrow',
2420    enabled: true,
2421    phase: 'main',
2422    fn: arrow,
2423    effect: effect$1,
2424    requires: ['popperOffsets'],
2425    requiresIfExists: ['preventOverflow']
2426  };
2427
2428  function getVariation(placement) {
2429    return placement.split('-')[1];
2430  }
2431
2432  var unsetSides = {
2433    top: 'auto',
2434    right: 'auto',
2435    bottom: 'auto',
2436    left: 'auto'
2437  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
2438  // Zooming can change the DPR, but it seems to report a value that will
2439  // cleanly divide the values into the appropriate subpixels.
2440
2441  function roundOffsetsByDPR(_ref, win) {
2442    var x = _ref.x,
2443        y = _ref.y;
2444    var dpr = win.devicePixelRatio || 1;
2445    return {
2446      x: round(x * dpr) / dpr || 0,
2447      y: round(y * dpr) / dpr || 0
2448    };
2449  }
2450
2451  function mapToStyles(_ref2) {
2452    var _Object$assign2;
2453
2454    var popper = _ref2.popper,
2455        popperRect = _ref2.popperRect,
2456        placement = _ref2.placement,
2457        variation = _ref2.variation,
2458        offsets = _ref2.offsets,
2459        position = _ref2.position,
2460        gpuAcceleration = _ref2.gpuAcceleration,
2461        adaptive = _ref2.adaptive,
2462        roundOffsets = _ref2.roundOffsets,
2463        isFixed = _ref2.isFixed;
2464    var _offsets$x = offsets.x,
2465        x = _offsets$x === void 0 ? 0 : _offsets$x,
2466        _offsets$y = offsets.y,
2467        y = _offsets$y === void 0 ? 0 : _offsets$y;
2468
2469    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
2470      x: x,
2471      y: y
2472    }) : {
2473      x: x,
2474      y: y
2475    };
2476
2477    x = _ref3.x;
2478    y = _ref3.y;
2479    var hasX = offsets.hasOwnProperty('x');
2480    var hasY = offsets.hasOwnProperty('y');
2481    var sideX = left;
2482    var sideY = top;
2483    var win = window;
2484
2485    if (adaptive) {
2486      var offsetParent = getOffsetParent(popper);
2487      var heightProp = 'clientHeight';
2488      var widthProp = 'clientWidth';
2489
2490      if (offsetParent === getWindow(popper)) {
2491        offsetParent = getDocumentElement(popper);
2492
2493        if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
2494          heightProp = 'scrollHeight';
2495          widthProp = 'scrollWidth';
2496        }
2497      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
2498
2499
2500      offsetParent = offsetParent;
2501
2502      if (placement === top || (placement === left || placement === right) && variation === end) {
2503        sideY = bottom;
2504        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
2505        offsetParent[heightProp];
2506        y -= offsetY - popperRect.height;
2507        y *= gpuAcceleration ? 1 : -1;
2508      }
2509
2510      if (placement === left || (placement === top || placement === bottom) && variation === end) {
2511        sideX = right;
2512        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
2513        offsetParent[widthProp];
2514        x -= offsetX - popperRect.width;
2515        x *= gpuAcceleration ? 1 : -1;
2516      }
2517    }
2518
2519    var commonStyles = Object.assign({
2520      position: position
2521    }, adaptive && unsetSides);
2522
2523    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
2524      x: x,
2525      y: y
2526    }, getWindow(popper)) : {
2527      x: x,
2528      y: y
2529    };
2530
2531    x = _ref4.x;
2532    y = _ref4.y;
2533
2534    if (gpuAcceleration) {
2535      var _Object$assign;
2536
2537      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
2538    }
2539
2540    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
2541  }
2542
2543  function computeStyles(_ref5) {
2544    var state = _ref5.state,
2545        options = _ref5.options;
2546    var _options$gpuAccelerat = options.gpuAcceleration,
2547        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
2548        _options$adaptive = options.adaptive,
2549        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
2550        _options$roundOffsets = options.roundOffsets,
2551        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
vendor: 37,725 bytes, lines 2552-3620
2552
2553    var commonStyles = {
2554      placement: getBasePlacement(state.placement),
2555      variation: getVariation(state.placement),
2556      popper: state.elements.popper,
2557      popperRect: state.rects.popper,
2558      gpuAcceleration: gpuAcceleration,
2559      isFixed: state.options.strategy === 'fixed'
2560    };
2561
2562    if (state.modifiersData.popperOffsets != null) {
2563      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
2564        offsets: state.modifiersData.popperOffsets,
2565        position: state.options.strategy,
2566        adaptive: adaptive,
2567        roundOffsets: roundOffsets
2568      })));
2569    }
2570
2571    if (state.modifiersData.arrow != null) {
2572      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
2573        offsets: state.modifiersData.arrow,
2574        position: 'absolute',
2575        adaptive: false,
2576        roundOffsets: roundOffsets
2577      })));
2578    }
2579
2580    state.attributes.popper = Object.assign({}, state.attributes.popper, {
2581      'data-popper-placement': state.placement
2582    });
2583  } // eslint-disable-next-line import/no-unused-modules
2584
2585
2586  const computeStyles$1 = {
2587    name: 'computeStyles',
2588    enabled: true,
2589    phase: 'beforeWrite',
2590    fn: computeStyles,
2591    data: {}
2592  };
2593
2594  var passive = {
2595    passive: true
2596  };
2597
2598  function effect(_ref) {
2599    var state = _ref.state,
2600        instance = _ref.instance,
2601        options = _ref.options;
2602    var _options$scroll = options.scroll,
2603        scroll = _options$scroll === void 0 ? true : _options$scroll,
2604        _options$resize = options.resize,
2605        resize = _options$resize === void 0 ? true : _options$resize;
2606    var window = getWindow(state.elements.popper);
2607    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
2608
2609    if (scroll) {
2610      scrollParents.forEach(function (scrollParent) {
2611        scrollParent.addEventListener('scroll', instance.update, passive);
2612      });
2613    }
2614
2615    if (resize) {
2616      window.addEventListener('resize', instance.update, passive);
2617    }
2618
2619    return function () {
2620      if (scroll) {
2621        scrollParents.forEach(function (scrollParent) {
2622          scrollParent.removeEventListener('scroll', instance.update, passive);
2623        });
2624      }
2625
2626      if (resize) {
2627        window.removeEventListener('resize', instance.update, passive);
2628      }
2629    };
2630  } // eslint-disable-next-line import/no-unused-modules
2631
2632
2633  const eventListeners = {
2634    name: 'eventListeners',
2635    enabled: true,
2636    phase: 'write',
2637    fn: function fn() {},
2638    effect: effect,
2639    data: {}
2640  };
2641
2642  var hash$1 = {
2643    left: 'right',
2644    right: 'left',
2645    bottom: 'top',
2646    top: 'bottom'
2647  };
2648  function getOppositePlacement(placement) {
2649    return placement.replace(/left|right|bottom|top/g, function (matched) {
2650      return hash$1[matched];
2651    });
2652  }
2653
2654  var hash = {
2655    start: 'end',
2656    end: 'start'
2657  };
2658  function getOppositeVariationPlacement(placement) {
2659    return placement.replace(/start|end/g, function (matched) {
2660      return hash[matched];
2661    });
2662  }
2663
2664  function getWindowScroll(node) {
2665    var win = getWindow(node);
2666    var scrollLeft = win.pageXOffset;
2667    var scrollTop = win.pageYOffset;
2668    return {
2669      scrollLeft: scrollLeft,
2670      scrollTop: scrollTop
2671    };
2672  }
2673
2674  function getWindowScrollBarX(element) {
2675    // If <html> has a CSS width greater than the viewport, then this will be
2676    // incorrect for RTL.
2677    // Popper 1 is broken in this case and never had a bug report so let's assume
2678    // it's not an issue. I don't think anyone ever specifies width on <html>
2679    // anyway.
2680    // Browsers where the left scrollbar doesn't cause an issue report `0` for
2681    // this (e.g. Edge 2019, IE11, Safari)
2682    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
2683  }
2684
2685  function getViewportRect(element, strategy) {
2686    var win = getWindow(element);
2687    var html = getDocumentElement(element);
2688    var visualViewport = win.visualViewport;
2689    var width = html.clientWidth;
2690    var height = html.clientHeight;
2691    var x = 0;
2692    var y = 0;
2693
2694    if (visualViewport) {
2695      width = visualViewport.width;
2696      height = visualViewport.height;
2697      var layoutViewport = isLayoutViewport();
2698
2699      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
2700        x = visualViewport.offsetLeft;
2701        y = visualViewport.offsetTop;
2702      }
2703    }
2704
2705    return {
2706      width: width,
2707      height: height,
2708      x: x + getWindowScrollBarX(element),
2709      y: y
2710    };
2711  }
2712
2713  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
2714
2715  function getDocumentRect(element) {
2716    var _element$ownerDocumen;
2717
2718    var html = getDocumentElement(element);
2719    var winScroll = getWindowScroll(element);
2720    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
2721    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
2722    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
2723    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
2724    var y = -winScroll.scrollTop;
2725
2726    if (getComputedStyle$1(body || html).direction === 'rtl') {
2727      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
2728    }
2729
2730    return {
2731      width: width,
2732      height: height,
2733      x: x,
2734      y: y
2735    };
2736  }
2737
2738  function isScrollParent(element) {
2739    // Firefox wants us to check `-x` and `-y` variations as well
2740    var _getComputedStyle = getComputedStyle$1(element),
2741        overflow = _getComputedStyle.overflow,
2742        overflowX = _getComputedStyle.overflowX,
2743        overflowY = _getComputedStyle.overflowY;
2744
2745    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
2746  }
2747
2748  function getScrollParent(node) {
2749    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
2750      // $FlowFixMe[incompatible-return]: assume body is always available
2751      return node.ownerDocument.body;
2752    }
2753
2754    if (isHTMLElement(node) && isScrollParent(node)) {
2755      return node;
2756    }
2757
2758    return getScrollParent(getParentNode(node));
2759  }
2760
2761  /*
2762  given a DOM element, return the list of all scroll parents, up the list of ancesors
2763  until we get to the top window object. This list is what we attach scroll listeners
2764  to, because if any of these parent elements scroll, we'll need to re-calculate the
2765  reference element's position.
2766  */
2767
2768  function listScrollParents(element, list) {
2769    var _element$ownerDocumen;
2770
2771    if (list === void 0) {
2772      list = [];
2773    }
2774
2775    var scrollParent = getScrollParent(element);
2776    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
2777    var win = getWindow(scrollParent);
2778    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
2779    var updatedList = list.concat(target);
2780    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
2781    updatedList.concat(listScrollParents(getParentNode(target)));
2782  }
2783
2784  function rectToClientRect(rect) {
2785    return Object.assign({}, rect, {
2786      left: rect.x,
2787      top: rect.y,
2788      right: rect.x + rect.width,
2789      bottom: rect.y + rect.height
2790    });
2791  }
2792
2793  function getInnerBoundingClientRect(element, strategy) {
2794    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
2795    rect.top = rect.top + element.clientTop;
2796    rect.left = rect.left + element.clientLeft;
2797    rect.bottom = rect.top + element.clientHeight;
2798    rect.right = rect.left + element.clientWidth;
2799    rect.width = element.clientWidth;
2800    rect.height = element.clientHeight;
2801    rect.x = rect.left;
2802    rect.y = rect.top;
2803    return rect;
2804  }
2805
2806  function getClientRectFromMixedType(element, clippingParent, strategy) {
2807    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2808  } // A "clipping parent" is an overflowable container with the characteristic of
2809  // clipping (or hiding) overflowing elements with a position different from
2810  // `initial`
2811
2812
2813  function getClippingParents(element) {
2814    var clippingParents = listScrollParents(getParentNode(element));
2815    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
2816    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
2817
2818    if (!isElement(clipperElement)) {
2819      return [];
2820    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
2821
2822
2823    return clippingParents.filter(function (clippingParent) {
2824      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
2825    });
2826  } // Gets the maximum area that the element is visible in due to any number of
2827  // clipping parents
2828
2829
2830  function getClippingRect(element, boundary, rootBoundary, strategy) {
2831    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
2832    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
2833    var firstClippingParent = clippingParents[0];
2834    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
2835      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
2836      accRect.top = max(rect.top, accRect.top);
2837      accRect.right = min(rect.right, accRect.right);
2838      accRect.bottom = min(rect.bottom, accRect.bottom);
2839      accRect.left = max(rect.left, accRect.left);
2840      return accRect;
2841    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
2842    clippingRect.width = clippingRect.right - clippingRect.left;
2843    clippingRect.height = clippingRect.bottom - clippingRect.top;
2844    clippingRect.x = clippingRect.left;
2845    clippingRect.y = clippingRect.top;
2846    return clippingRect;
2847  }
2848
2849  function computeOffsets(_ref) {
2850    var reference = _ref.reference,
2851        element = _ref.element,
2852        placement = _ref.placement;
2853    var basePlacement = placement ? getBasePlacement(placement) : null;
2854    var variation = placement ? getVariation(placement) : null;
2855    var commonX = reference.x + reference.width / 2 - element.width / 2;
2856    var commonY = reference.y + reference.height / 2 - element.height / 2;
2857    var offsets;
2858
2859    switch (basePlacement) {
2860      case top:
2861        offsets = {
2862          x: commonX,
2863          y: reference.y - element.height
2864        };
2865        break;
2866
2867      case bottom:
2868        offsets = {
2869          x: commonX,
2870          y: reference.y + reference.height
2871        };
2872        break;
2873
2874      case right:
2875        offsets = {
2876          x: reference.x + reference.width,
2877          y: commonY
2878        };
2879        break;
2880
2881      case left:
2882        offsets = {
2883          x: reference.x - element.width,
2884          y: commonY
2885        };
2886        break;
2887
2888      default:
2889        offsets = {
2890          x: reference.x,
2891          y: reference.y
2892        };
2893    }
2894
2895    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
2896
2897    if (mainAxis != null) {
2898      var len = mainAxis === 'y' ? 'height' : 'width';
2899
2900      switch (variation) {
2901        case start:
2902          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2903          break;
2904
2905        case end:
2906          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2907          break;
2908      }
2909    }
2910
2911    return offsets;
2912  }
2913
2914  function detectOverflow(state, options) {
2915    if (options === void 0) {
2916      options = {};
2917    }
2918
2919    var _options = options,
2920        _options$placement = _options.placement,
2921        placement = _options$placement === void 0 ? state.placement : _options$placement,
2922        _options$strategy = _options.strategy,
2923        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
2924        _options$boundary = _options.boundary,
2925        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
2926        _options$rootBoundary = _options.rootBoundary,
2927        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
2928        _options$elementConte = _options.elementContext,
2929        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
2930        _options$altBoundary = _options.altBoundary,
2931        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
2932        _options$padding = _options.padding,
2933        padding = _options$padding === void 0 ? 0 : _options$padding;
2934    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
2935    var altContext = elementContext === popper ? reference : popper;
2936    var popperRect = state.rects.popper;
2937    var element = state.elements[altBoundary ? altContext : elementContext];
2938    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
2939    var referenceClientRect = getBoundingClientRect(state.elements.reference);
2940    var popperOffsets = computeOffsets({
2941      reference: referenceClientRect,
2942      element: popperRect,
2943      strategy: 'absolute',
2944      placement: placement
2945    });
2946    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
2947    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
2948    // 0 or negative = within the clipping rect
2949
2950    var overflowOffsets = {
2951      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2952      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2953      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2954      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2955    };
2956    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
2957
2958    if (elementContext === popper && offsetData) {
2959      var offset = offsetData[placement];
2960      Object.keys(overflowOffsets).forEach(function (key) {
2961        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
2962        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
2963        overflowOffsets[key] += offset[axis] * multiply;
2964      });
2965    }
2966
2967    return overflowOffsets;
2968  }
2969
2970  function computeAutoPlacement(state, options) {
2971    if (options === void 0) {
2972      options = {};
2973    }
2974
2975    var _options = options,
2976        placement = _options.placement,
2977        boundary = _options.boundary,
2978        rootBoundary = _options.rootBoundary,
2979        padding = _options.padding,
2980        flipVariations = _options.flipVariations,
2981        _options$allowedAutoP = _options.allowedAutoPlacements,
2982        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
2983    var variation = getVariation(placement);
2984    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
2985      return getVariation(placement) === variation;
2986    }) : basePlacements;
2987    var allowedPlacements = placements$1.filter(function (placement) {
2988      return allowedAutoPlacements.indexOf(placement) >= 0;
2989    });
2990
2991    if (allowedPlacements.length === 0) {
2992      allowedPlacements = placements$1;
2993    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2994
2995
2996    var overflows = allowedPlacements.reduce(function (acc, placement) {
2997      acc[placement] = detectOverflow(state, {
2998        placement: placement,
2999        boundary: boundary,
3000        rootBoundary: rootBoundary,
3001        padding: padding
3002      })[getBasePlacement(placement)];
3003      return acc;
3004    }, {});
3005    return Object.keys(overflows).sort(function (a, b) {
3006      return overflows[a] - overflows[b];
3007    });
3008  }
3009
3010  function getExpandedFallbackPlacements(placement) {
3011    if (getBasePlacement(placement) === auto) {
3012      return [];
3013    }
3014
3015    var oppositePlacement = getOppositePlacement(placement);
3016    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
3017  }
3018
3019  function flip(_ref) {
3020    var state = _ref.state,
3021        options = _ref.options,
3022        name = _ref.name;
3023
3024    if (state.modifiersData[name]._skip) {
3025      return;
3026    }
3027
3028    var _options$mainAxis = options.mainAxis,
3029        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
3030        _options$altAxis = options.altAxis,
3031        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
3032        specifiedFallbackPlacements = options.fallbackPlacements,
3033        padding = options.padding,
3034        boundary = options.boundary,
3035        rootBoundary = options.rootBoundary,
3036        altBoundary = options.altBoundary,
3037        _options$flipVariatio = options.flipVariations,
3038        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
3039        allowedAutoPlacements = options.allowedAutoPlacements;
3040    var preferredPlacement = state.options.placement;
3041    var basePlacement = getBasePlacement(preferredPlacement);
3042    var isBasePlacement = basePlacement === preferredPlacement;
3043    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
3044    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
3045      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
3046        placement: placement,
3047        boundary: boundary,
3048        rootBoundary: rootBoundary,
3049        padding: padding,
3050        flipVariations: flipVariations,
3051        allowedAutoPlacements: allowedAutoPlacements
3052      }) : placement);
3053    }, []);
3054    var referenceRect = state.rects.reference;
3055    var popperRect = state.rects.popper;
3056    var checksMap = new Map();
3057    var makeFallbackChecks = true;
3058    var firstFittingPlacement = placements[0];
3059
3060    for (var i = 0; i < placements.length; i++) {
3061      var placement = placements[i];
3062
3063      var _basePlacement = getBasePlacement(placement);
3064
3065      var isStartVariation = getVariation(placement) === start;
3066      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
3067      var len = isVertical ? 'width' : 'height';
3068      var overflow = detectOverflow(state, {
3069        placement: placement,
3070        boundary: boundary,
3071        rootBoundary: rootBoundary,
3072        altBoundary: altBoundary,
3073        padding: padding
3074      });
3075      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
3076
3077      if (referenceRect[len] > popperRect[len]) {
3078        mainVariationSide = getOppositePlacement(mainVariationSide);
3079      }
3080
3081      var altVariationSide = getOppositePlacement(mainVariationSide);
3082      var checks = [];
3083
3084      if (checkMainAxis) {
3085        checks.push(overflow[_basePlacement] <= 0);
3086      }
3087
3088      if (checkAltAxis) {
3089        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
3090      }
3091
3092      if (checks.every(function (check) {
3093        return check;
3094      })) {
3095        firstFittingPlacement = placement;
3096        makeFallbackChecks = false;
3097        break;
3098      }
3099
3100      checksMap.set(placement, checks);
3101    }
3102
3103    if (makeFallbackChecks) {
3104      // `2` may be desired in some cases – research later
3105      var numberOfChecks = flipVariations ? 3 : 1;
3106
3107      var _loop = function _loop(_i) {
3108        var fittingPlacement = placements.find(function (placement) {
3109          var checks = checksMap.get(placement);
3110
3111          if (checks) {
3112            return checks.slice(0, _i).every(function (check) {
3113              return check;
3114            });
3115          }
3116        });
3117
3118        if (fittingPlacement) {
3119          firstFittingPlacement = fittingPlacement;
3120          return "break";
3121        }
3122      };
3123
3124      for (var _i = numberOfChecks; _i > 0; _i--) {
3125        var _ret = _loop(_i);
3126
3127        if (_ret === "break") break;
3128      }
3129    }
3130
3131    if (state.placement !== firstFittingPlacement) {
3132      state.modifiersData[name]._skip = true;
3133      state.placement = firstFittingPlacement;
3134      state.reset = true;
3135    }
3136  } // eslint-disable-next-line import/no-unused-modules
3137
3138
3139  const flip$1 = {
3140    name: 'flip',
3141    enabled: true,
3142    phase: 'main',
3143    fn: flip,
3144    requiresIfExists: ['offset'],
3145    data: {
3146      _skip: false
3147    }
3148  };
3149
3150  function getSideOffsets(overflow, rect, preventedOffsets) {
3151    if (preventedOffsets === void 0) {
3152      preventedOffsets = {
3153        x: 0,
3154        y: 0
3155      };
3156    }
3157
3158    return {
3159      top: overflow.top - rect.height - preventedOffsets.y,
3160      right: overflow.right - rect.width + preventedOffsets.x,
3161      bottom: overflow.bottom - rect.height + preventedOffsets.y,
3162      left: overflow.left - rect.width - preventedOffsets.x
3163    };
3164  }
3165
3166  function isAnySideFullyClipped(overflow) {
3167    return [top, right, bottom, left].some(function (side) {
3168      return overflow[side] >= 0;
3169    });
3170  }
3171
3172  function hide(_ref) {
3173    var state = _ref.state,
3174        name = _ref.name;
3175    var referenceRect = state.rects.reference;
3176    var popperRect = state.rects.popper;
3177    var preventedOffsets = state.modifiersData.preventOverflow;
3178    var referenceOverflow = detectOverflow(state, {
3179      elementContext: 'reference'
3180    });
3181    var popperAltOverflow = detectOverflow(state, {
3182      altBoundary: true
3183    });
3184    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
3185    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
3186    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
3187    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
3188    state.modifiersData[name] = {
3189      referenceClippingOffsets: referenceClippingOffsets,
3190      popperEscapeOffsets: popperEscapeOffsets,
3191      isReferenceHidden: isReferenceHidden,
3192      hasPopperEscaped: hasPopperEscaped
3193    };
3194    state.attributes.popper = Object.assign({}, state.attributes.popper, {
3195      'data-popper-reference-hidden': isReferenceHidden,
3196      'data-popper-escaped': hasPopperEscaped
3197    });
3198  } // eslint-disable-next-line import/no-unused-modules
3199
3200
3201  const hide$1 = {
3202    name: 'hide',
3203    enabled: true,
3204    phase: 'main',
3205    requiresIfExists: ['preventOverflow'],
3206    fn: hide
3207  };
3208
3209  function distanceAndSkiddingToXY(placement, rects, offset) {
3210    var basePlacement = getBasePlacement(placement);
3211    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
3212
3213    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
3214      placement: placement
3215    })) : offset,
3216        skidding = _ref[0],
3217        distance = _ref[1];
3218
3219    skidding = skidding || 0;
3220    distance = (distance || 0) * invertDistance;
3221    return [left, right].indexOf(basePlacement) >= 0 ? {
3222      x: distance,
3223      y: skidding
3224    } : {
3225      x: skidding,
3226      y: distance
3227    };
3228  }
3229
3230  function offset(_ref2) {
3231    var state = _ref2.state,
3232        options = _ref2.options,
3233        name = _ref2.name;
3234    var _options$offset = options.offset,
3235        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
3236    var data = placements.reduce(function (acc, placement) {
3237      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
3238      return acc;
3239    }, {});
3240    var _data$state$placement = data[state.placement],
3241        x = _data$state$placement.x,
3242        y = _data$state$placement.y;
3243
3244    if (state.modifiersData.popperOffsets != null) {
3245      state.modifiersData.popperOffsets.x += x;
3246      state.modifiersData.popperOffsets.y += y;
3247    }
3248
3249    state.modifiersData[name] = data;
3250  } // eslint-disable-next-line import/no-unused-modules
3251
3252
3253  const offset$1 = {
3254    name: 'offset',
3255    enabled: true,
3256    phase: 'main',
3257    requires: ['popperOffsets'],
3258    fn: offset
3259  };
3260
3261  function popperOffsets(_ref) {
3262    var state = _ref.state,
3263        name = _ref.name;
3264    // Offsets are the actual position the popper needs to have to be
3265    // properly positioned near its reference element
3266    // This is the most basic placement, and will be adjusted by
3267    // the modifiers in the next step
3268    state.modifiersData[name] = computeOffsets({
3269      reference: state.rects.reference,
3270      element: state.rects.popper,
3271      strategy: 'absolute',
3272      placement: state.placement
3273    });
3274  } // eslint-disable-next-line import/no-unused-modules
3275
3276
3277  const popperOffsets$1 = {
3278    name: 'popperOffsets',
3279    enabled: true,
3280    phase: 'read',
3281    fn: popperOffsets,
3282    data: {}
3283  };
3284
3285  function getAltAxis(axis) {
3286    return axis === 'x' ? 'y' : 'x';
3287  }
3288
3289  function preventOverflow(_ref) {
3290    var state = _ref.state,
3291        options = _ref.options,
3292        name = _ref.name;
3293    var _options$mainAxis = options.mainAxis,
3294        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
3295        _options$altAxis = options.altAxis,
3296        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
3297        boundary = options.boundary,
3298        rootBoundary = options.rootBoundary,
3299        altBoundary = options.altBoundary,
3300        padding = options.padding,
3301        _options$tether = options.tether,
3302        tether = _options$tether === void 0 ? true : _options$tether,
3303        _options$tetherOffset = options.tetherOffset,
3304        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
3305    var overflow = detectOverflow(state, {
3306      boundary: boundary,
3307      rootBoundary: rootBoundary,
3308      padding: padding,
3309      altBoundary: altBoundary
3310    });
3311    var basePlacement = getBasePlacement(state.placement);
3312    var variation = getVariation(state.placement);
3313    var isBasePlacement = !variation;
3314    var mainAxis = getMainAxisFromPlacement(basePlacement);
3315    var altAxis = getAltAxis(mainAxis);
3316    var popperOffsets = state.modifiersData.popperOffsets;
3317    var referenceRect = state.rects.reference;
3318    var popperRect = state.rects.popper;
3319    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
3320      placement: state.placement
3321    })) : tetherOffset;
3322    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
3323      mainAxis: tetherOffsetValue,
3324      altAxis: tetherOffsetValue
3325    } : Object.assign({
3326      mainAxis: 0,
3327      altAxis: 0
3328    }, tetherOffsetValue);
3329    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
3330    var data = {
3331      x: 0,
3332      y: 0
3333    };
3334
3335    if (!popperOffsets) {
3336      return;
3337    }
3338
3339    if (checkMainAxis) {
3340      var _offsetModifierState$;
3341
3342      var mainSide = mainAxis === 'y' ? top : left;
3343      var altSide = mainAxis === 'y' ? bottom : right;
3344      var len = mainAxis === 'y' ? 'height' : 'width';
3345      var offset = popperOffsets[mainAxis];
3346      var min$1 = offset + overflow[mainSide];
3347      var max$1 = offset - overflow[altSide];
3348      var additive = tether ? -popperRect[len] / 2 : 0;
3349      var minLen = variation === start ? referenceRect[len] : popperRect[len];
3350      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
3351      // outside the reference bounds
3352
3353      var arrowElement = state.elements.arrow;
3354      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
3355        width: 0,
3356        height: 0
3357      };
3358      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
3359      var arrowPaddingMin = arrowPaddingObject[mainSide];
3360      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
3361      // to include its full size in the calculation. If the reference is small
3362      // and near the edge of a boundary, the popper can overflow even if the
3363      // reference is not overflowing as well (e.g. virtual elements with no
3364      // width or height)
3365
3366      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
3367      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
3368      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
3369      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
3370      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
3371      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
3372      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
3373      var tetherMax = offset + maxOffset - offsetModifierValue;
3374      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
3375      popperOffsets[mainAxis] = preventedOffset;
3376      data[mainAxis] = preventedOffset - offset;
3377    }
3378
3379    if (checkAltAxis) {
3380      var _offsetModifierState$2;
3381
3382      var _mainSide = mainAxis === 'x' ? top : left;
3383
3384      var _altSide = mainAxis === 'x' ? bottom : right;
3385
3386      var _offset = popperOffsets[altAxis];
3387
3388      var _len = altAxis === 'y' ? 'height' : 'width';
3389
3390      var _min = _offset + overflow[_mainSide];
3391
3392      var _max = _offset - overflow[_altSide];
3393
3394      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
3395
3396      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
3397
3398      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
3399
3400      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
3401
3402      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
3403
3404      popperOffsets[altAxis] = _preventedOffset;
3405      data[altAxis] = _preventedOffset - _offset;
3406    }
3407
3408    state.modifiersData[name] = data;
3409  } // eslint-disable-next-line import/no-unused-modules
3410
3411
3412  const preventOverflow$1 = {
3413    name: 'preventOverflow',
3414    enabled: true,
3415    phase: 'main',
3416    fn: preventOverflow,
3417    requiresIfExists: ['offset']
3418  };
3419
3420  function getHTMLElementScroll(element) {
3421    return {
3422      scrollLeft: element.scrollLeft,
3423      scrollTop: element.scrollTop
3424    };
3425  }
3426
3427  function getNodeScroll(node) {
3428    if (node === getWindow(node) || !isHTMLElement(node)) {
3429      return getWindowScroll(node);
3430    } else {
3431      return getHTMLElementScroll(node);
3432    }
3433  }
3434
3435  function isElementScaled(element) {
3436    var rect = element.getBoundingClientRect();
3437    var scaleX = round(rect.width) / element.offsetWidth || 1;
3438    var scaleY = round(rect.height) / element.offsetHeight || 1;
3439    return scaleX !== 1 || scaleY !== 1;
3440  } // Returns the composite rect of an element relative to its offsetParent.
3441  // Composite means it takes into account transforms as well as layout.
3442
3443
3444  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
3445    if (isFixed === void 0) {
3446      isFixed = false;
3447    }
3448
3449    var isOffsetParentAnElement = isHTMLElement(offsetParent);
3450    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
3451    var documentElement = getDocumentElement(offsetParent);
3452    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
3453    var scroll = {
3454      scrollLeft: 0,
3455      scrollTop: 0
3456    };
3457    var offsets = {
3458      x: 0,
3459      y: 0
3460    };
3461
3462    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
3463      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
3464      isScrollParent(documentElement)) {
3465        scroll = getNodeScroll(offsetParent);
3466      }
3467
3468      if (isHTMLElement(offsetParent)) {
3469        offsets = getBoundingClientRect(offsetParent, true);
3470        offsets.x += offsetParent.clientLeft;
3471        offsets.y += offsetParent.clientTop;
3472      } else if (documentElement) {
3473        offsets.x = getWindowScrollBarX(documentElement);
3474      }
3475    }
3476
3477    return {
3478      x: rect.left + scroll.scrollLeft - offsets.x,
3479      y: rect.top + scroll.scrollTop - offsets.y,
3480      width: rect.width,
3481      height: rect.height
3482    };
3483  }
3484
3485  function order(modifiers) {
3486    var map = new Map();
3487    var visited = new Set();
3488    var result = [];
3489    modifiers.forEach(function (modifier) {
3490      map.set(modifier.name, modifier);
3491    }); // On visiting object, check for its dependencies and visit them recursively
3492
3493    function sort(modifier) {
3494      visited.add(modifier.name);
3495      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
3496      requires.forEach(function (dep) {
3497        if (!visited.has(dep)) {
3498          var depModifier = map.get(dep);
3499
3500          if (depModifier) {
3501            sort(depModifier);
3502          }
3503        }
3504      });
3505      result.push(modifier);
3506    }
3507
3508    modifiers.forEach(function (modifier) {
3509      if (!visited.has(modifier.name)) {
3510        // check for visited object
3511        sort(modifier);
3512      }
3513    });
3514    return result;
3515  }
3516
3517  function orderModifiers(modifiers) {
3518    // order based on dependencies
3519    var orderedModifiers = order(modifiers); // order based on phase
3520
3521    return modifierPhases.reduce(function (acc, phase) {
3522      return acc.concat(orderedModifiers.filter(function (modifier) {
3523        return modifier.phase === phase;
3524      }));
3525    }, []);
3526  }
3527
3528  function debounce(fn) {
3529    var pending;
3530    return function () {
3531      if (!pending) {
3532        pending = new Promise(function (resolve) {
3533          Promise.resolve().then(function () {
3534            pending = undefined;
3535            resolve(fn());
3536          });
3537        });
3538      }
3539
3540      return pending;
3541    };
3542  }
3543
3544  function mergeByName(modifiers) {
3545    var merged = modifiers.reduce(function (merged, current) {
3546      var existing = merged[current.name];
3547      merged[current.name] = existing ? Object.assign({}, existing, current, {
3548        options: Object.assign({}, existing.options, current.options),
3549        data: Object.assign({}, existing.data, current.data)
3550      }) : current;
3551      return merged;
3552    }, {}); // IE11 does not support Object.values
3553
3554    return Object.keys(merged).map(function (key) {
3555      return merged[key];
3556    });
3557  }
3558
3559  var DEFAULT_OPTIONS = {
3560    placement: 'bottom',
3561    modifiers: [],
3562    strategy: 'absolute'
3563  };
3564
3565  function areValidElements() {
3566    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3567      args[_key] = arguments[_key];
3568    }
3569
3570    return !args.some(function (element) {
3571      return !(element && typeof element.getBoundingClientRect === 'function');
3572    });
3573  }
3574
3575  function popperGenerator(generatorOptions) {
3576    if (generatorOptions === void 0) {
3577      generatorOptions = {};
3578    }
3579
3580    var _generatorOptions = generatorOptions,
3581        _generatorOptions$def = _generatorOptions.defaultModifiers,
3582        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
3583        _generatorOptions$def2 = _generatorOptions.defaultOptions,
3584        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
3585    return function createPopper(reference, popper, options) {
3586      if (options === void 0) {
3587        options = defaultOptions;
3588      }
3589
3590      var state = {
3591        placement: 'bottom',
3592        orderedModifiers: [],
3593        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
3594        modifiersData: {},
3595        elements: {
3596          reference: reference,
3597          popper: popper
3598        },
3599        attributes: {},
3600        styles: {}
3601      };
3602      var effectCleanupFns = [];
3603      var isDestroyed = false;
3604      var instance = {
3605        state: state,
3606        setOptions: function setOptions(setOptionsAction) {
3607          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
3608          cleanupModifierEffects();
3609          state.options = Object.assign({}, defaultOptions, state.options, options);
3610          state.scrollParents = {
3611            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
3612            popper: listScrollParents(popper)
3613          }; // Orders the modifiers based on their dependencies and `phase`
3614          // properties
3615
3616          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
3617
3618          state.orderedModifiers = orderedModifiers.filter(function (m) {
3619            return m.enabled;
3620          });
vendor: 13,361 bytes, lines 3620-3992
3620 // Validate the provided modifiers so that the consumer will get warned
3621
3622          runModifierEffects();
3623          return instance.update();
3624        },
3625        // Sync update – it will always be executed, even if not necessary. This
3626        // is useful for low frequency updates where sync behavior simplifies the
3627        // logic.
3628        // For high frequency updates (e.g. `resize` and `scroll` events), always
3629        // prefer the async Popper#update method
3630        forceUpdate: function forceUpdate() {
3631          if (isDestroyed) {
3632            return;
3633          }
3634
3635          var _state$elements = state.elements,
3636              reference = _state$elements.reference,
3637              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
3638          // anymore
3639
3640          if (!areValidElements(reference, popper)) {
3641
3642            return;
3643          } // Store the reference and popper rects to be read by modifiers
3644
3645
3646          state.rects = {
3647            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
3648            popper: getLayoutRect(popper)
3649          }; // Modifiers have the ability to reset the current update cycle. The
3650          // most common use case for this is the `flip` modifier changing the
3651          // placement, which then needs to re-run all the modifiers, because the
3652          // logic was previously ran for the previous placement and is therefore
3653          // stale/incorrect
3654
3655          state.reset = false;
3656          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
3657          // is filled with the initial data specified by the modifier. This means
3658          // it doesn't persist and is fresh on each update.
3659          // To ensure persistent data, use `${name}#persistent`
3660
3661          state.orderedModifiers.forEach(function (modifier) {
3662            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
3663          });
3664
3665          for (var index = 0; index < state.orderedModifiers.length; index++) {
3666
3667            if (state.reset === true) {
3668              state.reset = false;
3669              index = -1;
3670              continue;
3671            }
3672
3673            var _state$orderedModifie = state.orderedModifiers[index],
3674                fn = _state$orderedModifie.fn,
3675                _state$orderedModifie2 = _state$orderedModifie.options,
3676                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
3677                name = _state$orderedModifie.name;
3678
3679            if (typeof fn === 'function') {
3680              state = fn({
3681                state: state,
3682                options: _options,
3683                name: name,
3684                instance: instance
3685              }) || state;
3686            }
3687          }
3688        },
3689        // Async and optimistically optimized update – it will not be executed if
3690        // not necessary (debounced to run at most once-per-tick)
3691        update: debounce(function () {
3692          return new Promise(function (resolve) {
3693            instance.forceUpdate();
3694            resolve(state);
3695          });
3696        }),
3697        destroy: function destroy() {
3698          cleanupModifierEffects();
3699          isDestroyed = true;
3700        }
3701      };
3702
3703      if (!areValidElements(reference, popper)) {
3704
3705        return instance;
3706      }
3707
3708      instance.setOptions(options).then(function (state) {
3709        if (!isDestroyed && options.onFirstUpdate) {
3710          options.onFirstUpdate(state);
3711        }
3712      }); // Modifiers have the ability to execute arbitrary code before the first
3713      // update cycle runs. They will be executed in the same order as the update
3714      // cycle. This is useful when a modifier adds some persistent data that
3715      // other modifiers need to use, but the modifier is run after the dependent
3716      // one.
3717
3718      function runModifierEffects() {
3719        state.orderedModifiers.forEach(function (_ref3) {
3720          var name = _ref3.name,
3721              _ref3$options = _ref3.options,
3722              options = _ref3$options === void 0 ? {} : _ref3$options,
3723              effect = _ref3.effect;
3724
3725          if (typeof effect === 'function') {
3726            var cleanupFn = effect({
3727              state: state,
3728              name: name,
3729              instance: instance,
3730              options: options
3731            });
3732
3733            var noopFn = function noopFn() {};
3734
3735            effectCleanupFns.push(cleanupFn || noopFn);
3736          }
3737        });
3738      }
3739
3740      function cleanupModifierEffects() {
3741        effectCleanupFns.forEach(function (fn) {
3742          return fn();
3743        });
3744        effectCleanupFns = [];
3745      }
3746
3747      return instance;
3748    };
3749  }
3750  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
3751
3752  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
3753  var createPopper$1 = /*#__PURE__*/popperGenerator({
3754    defaultModifiers: defaultModifiers$1
3755  }); // eslint-disable-next-line import/no-unused-modules
3756
3757  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
3758  var createPopper = /*#__PURE__*/popperGenerator({
3759    defaultModifiers: defaultModifiers
3760  }); // eslint-disable-next-line import/no-unused-modules
3761
3762  const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3763    __proto__: null,
3764    afterMain,
3765    afterRead,
3766    afterWrite,
3767    applyStyles: applyStyles$1,
3768    arrow: arrow$1,
3769    auto,
3770    basePlacements,
3771    beforeMain,
3772    beforeRead,
3773    beforeWrite,
3774    bottom,
3775    clippingParents,
3776    computeStyles: computeStyles$1,
3777    createPopper,
3778    createPopperBase: createPopper$2,
3779    createPopperLite: createPopper$1,
3780    detectOverflow,
3781    end,
3782    eventListeners,
3783    flip: flip$1,
3784    hide: hide$1,
3785    left,
3786    main,
3787    modifierPhases,
3788    offset: offset$1,
3789    placements,
3790    popper,
3791    popperGenerator,
3792    popperOffsets: popperOffsets$1,
3793    preventOverflow: preventOverflow$1,
3794    read,
3795    reference,
3796    right,
3797    start,
3798    top,
3799    variationPlacements,
3800    viewport,
3801    write
3802  }, Symbol.toStringTag, { value: 'Module' }));
3803
3804  /**
3805   * --------------------------------------------------------------------------
3806   * Bootstrap dropdown.js
3807   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3808   * --------------------------------------------------------------------------
3809   */
3810
3811  /**
3812   * Constants
3813   */
3814
3815  const NAME$a = 'dropdown';
3816  const DATA_KEY$6 = 'bs.dropdown';
3817  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
3818  const DATA_API_KEY$3 = '.data-api';
3819  const ESCAPE_KEY$2 = 'Escape';
3820  const TAB_KEY$1 = 'Tab';
3821  const ARROW_UP_KEY$1 = 'ArrowUp';
3822  const ARROW_DOWN_KEY$1 = 'ArrowDown';
3823  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
3824
3825  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
3826  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
3827  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
3828  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
3829  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
3830  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
3831  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
3832  const CLASS_NAME_SHOW$6 = 'show';
3833  const CLASS_NAME_DROPUP = 'dropup';
3834  const CLASS_NAME_DROPEND = 'dropend';
3835  const CLASS_NAME_DROPSTART = 'dropstart';
3836  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
3837  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
3838  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
3839  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
3840  const SELECTOR_MENU = '.dropdown-menu';
3841  const SELECTOR_NAVBAR = '.navbar';
3842  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
3843  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
3844  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
3845  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
3846  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
3847  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
3848  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
3849  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
3850  const PLACEMENT_TOPCENTER = 'top';
3851  const PLACEMENT_BOTTOMCENTER = 'bottom';
3852  const Default$9 = {
3853    autoClose: true,
3854    boundary: 'clippingParents',
3855    display: 'dynamic',
3856    offset: [0, 2],
3857    popperConfig: null,
3858    reference: 'toggle'
3859  };
3860  const DefaultType$9 = {
3861    autoClose: '(boolean|string)',
3862    boundary: '(string|element)',
3863    display: 'string',
3864    offset: '(array|string|function)',
3865    popperConfig: '(null|object|function)',
3866    reference: '(string|element|object)'
3867  };
3868
3869  /**
3870   * Class definition
3871   */
3872
3873  class Dropdown extends BaseComponent {
3874    constructor(element, config) {
3875      super(element, config);
3876      this._popper = null;
3877      this._parent = this._element.parentNode; // dropdown wrapper
3878      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
3879      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
3880      this._inNavbar = this._detectNavbar();
3881    }
3882
3883    // Getters
3884    static get Default() {
3885      return Default$9;
3886    }
3887    static get DefaultType() {
3888      return DefaultType$9;
3889    }
3890    static get NAME() {
3891      return NAME$a;
3892    }
3893
3894    // Public
3895    toggle() {
3896      return this._isShown() ? this.hide() : this.show();
3897    }
3898    show() {
3899      if (isDisabled(this._element) || this._isShown()) {
3900        return;
3901      }
3902      const relatedTarget = {
3903        relatedTarget: this._element
3904      };
3905      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
3906      if (showEvent.defaultPrevented) {
3907        return;
3908      }
3909      this._createPopper();
3910
3911      // If this is a touch-enabled device we add extra
3912      // empty mouseover listeners to the body's immediate children;
3913      // only needed because of broken event delegation on iOS
3914      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
3915      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
3916        for (const element of [].concat(...document.body.children)) {
3917          EventHandler.on(element, 'mouseover', noop);
3918        }
3919      }
3920      this._element.focus();
3921      this._element.setAttribute('aria-expanded', true);
3922      this._menu.classList.add(CLASS_NAME_SHOW$6);
3923      this._element.classList.add(CLASS_NAME_SHOW$6);
3924      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
3925    }
3926    hide() {
3927      if (isDisabled(this._element) || !this._isShown()) {
3928        return;
3929      }
3930      const relatedTarget = {
3931        relatedTarget: this._element
3932      };
3933      this._completeHide(relatedTarget);
3934    }
3935    dispose() {
3936      if (this._popper) {
3937        this._popper.destroy();
3938      }
3939      super.dispose();
3940    }
3941    update() {
3942      this._inNavbar = this._detectNavbar();
3943      if (this._popper) {
3944        this._popper.update();
3945      }
3946    }
3947
3948    // Private
3949    _completeHide(relatedTarget) {
3950      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
3951      if (hideEvent.defaultPrevented) {
3952        return;
3953      }
3954
3955      // If this is a touch-enabled device we remove the extra
3956      // empty mouseover listeners we added for iOS support
3957      if ('ontouchstart' in document.documentElement) {
3958        for (const element of [].concat(...document.body.children)) {
3959          EventHandler.off(element, 'mouseover', noop);
3960        }
3961      }
3962      if (this._popper) {
3963        this._popper.destroy();
3964      }
3965      this._menu.classList.remove(CLASS_NAME_SHOW$6);
3966      this._element.classList.remove(CLASS_NAME_SHOW$6);
3967      this._element.setAttribute('aria-expanded', 'false');
3968      Manipulator.removeDataAttribute(this._menu, 'popper');
3969      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
3970    }
3971    _getConfig(config) {
3972      config = super._getConfig(config);
3973      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
3974        // Popper virtual elements require a getBoundingClientRect method
3975        throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
3976      }
3977      return config;
3978    }
3979    _createPopper() {
3980      if (typeof Popper === 'undefined') {
3981        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
3982      }
3983      let referenceElement = this._element;
3984      if (this._config.reference === 'parent') {
3985        referenceElement = this._parent;
3986      } else if (isElement$1(this._config.reference)) {
3987        referenceElement = getElement(this._config.reference);
3988      } else if (typeof this._config.reference === 'object') {
3989        referenceElement = this._config.reference;
3990      }
3991      const popperConfig = this._getPopperConfig();
3992      this._popper = 
vendor: 6,595 bytes, lines 3992-4173
3992createPopper(referenceElement, this._menu, popperConfig);
3993    }
3994    _isShown() {
3995      return this._menu.classList.contains(CLASS_NAME_SHOW$6);
3996    }
3997    _getPlacement() {
3998      const parentDropdown = this._parent;
3999      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
4000        return PLACEMENT_RIGHT;
4001      }
4002      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
4003        return PLACEMENT_LEFT;
4004      }
4005      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
4006        return PLACEMENT_TOPCENTER;
4007      }
4008      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
4009        return PLACEMENT_BOTTOMCENTER;
4010      }
4011
4012      // We need to trim the value because custom properties can also include spaces
4013      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
4014      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
4015        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
4016      }
4017      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
4018    }
4019    _detectNavbar() {
4020      return this._element.closest(SELECTOR_NAVBAR) !== null;
4021    }
4022    _getOffset() {
4023      const {
4024        offset
4025      } = this._config;
4026      if (typeof offset === 'string') {
4027        return offset.split(',').map(value => Number.parseInt(value, 10));
4028      }
4029      if (typeof offset === 'function') {
4030        return popperData => offset(popperData, this._element);
4031      }
4032      return offset;
4033    }
4034    _getPopperConfig() {
4035      const defaultBsPopperConfig = {
4036        placement: this._getPlacement(),
4037        modifiers: [{
4038          name: 'preventOverflow',
4039          options: {
4040            boundary: this._config.boundary
4041          }
4042        }, {
4043          name: 'offset',
4044          options: {
4045            offset: this._getOffset()
4046          }
4047        }]
4048      };
4049
4050      // Disable Popper if we have a static display or Dropdown is in Navbar
4051      if (this._inNavbar || this._config.display === 'static') {
4052        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
4053        defaultBsPopperConfig.modifiers = [{
4054          name: 'applyStyles',
4055          enabled: false
4056        }];
4057      }
4058      return {
4059        ...defaultBsPopperConfig,
4060        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
4061      };
4062    }
4063    _selectMenuItem({
4064      key,
4065      target
4066    }) {
4067      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
4068      if (!items.length) {
4069        return;
4070      }
4071
4072      // if target isn't included in items (e.g. when expanding the dropdown)
4073      // allow cycling to get the last item in case key equals ARROW_UP_KEY
4074      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
4075    }
4076
4077    // Static
4078    static jQueryInterface(config) {
4079      return this.each(function () {
4080        const data = Dropdown.getOrCreateInstance(this, config);
4081        if (typeof config !== 'string') {
4082          return;
4083        }
4084        if (typeof data[config] === 'undefined') {
4085          throw new TypeError(`No method named "${config}"`);
4086        }
4087        data[config]();
4088      });
4089    }
4090    static clearMenus(event) {
4091      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
4092        return;
4093      }
4094      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
4095      for (const toggle of openToggles) {
4096        const context = Dropdown.getInstance(toggle);
4097        if (!context || context._config.autoClose === false) {
4098          continue;
4099        }
4100        const composedPath = event.composedPath();
4101        const isMenuTarget = composedPath.includes(context._menu);
4102        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
4103          continue;
4104        }
4105
4106        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
4107        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
4108          continue;
4109        }
4110        const relatedTarget = {
4111          relatedTarget: context._element
4112        };
4113        if (event.type === 'click') {
4114          relatedTarget.clickEvent = event;
4115        }
4116        context._completeHide(relatedTarget);
4117      }
4118    }
4119    static dataApiKeydownHandler(event) {
4120      // If not an UP | DOWN | ESCAPE key => not a dropdown command
4121      // If input/textarea && if key is other than ESCAPE => not a dropdown command
4122
4123      const isInput = /input|textarea/i.test(event.target.tagName);
4124      const isEscapeEvent = event.key === ESCAPE_KEY$2;
4125      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
4126      if (!isUpOrDownEvent && !isEscapeEvent) {
4127        return;
4128      }
4129      if (isInput && !isEscapeEvent) {
4130        return;
4131      }
4132      event.preventDefault();
4133
4134      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
4135      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
4136      const instance = Dropdown.getOrCreateInstance(getToggleButton);
4137      if (isUpOrDownEvent) {
4138        event.stopPropagation();
4139        instance.show();
4140        instance._selectMenuItem(event);
4141        return;
4142      }
4143      if (instance._isShown()) {
4144        // else is escape and we check if it is shown
4145        event.stopPropagation();
4146        instance.hide();
4147        getToggleButton.focus();
4148      }
4149    }
4150  }
4151
4152  /**
4153   * Data API implementation
4154   */
4155
4156  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
4157  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
4158  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
4159  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
4160  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
4161    event.preventDefault();
4162    Dropdown.getOrCreateInstance(this).toggle();
4163  });
4164
4165  /**
4166   * jQuery
4167   */
4168
4169  defineJQueryPlugin(Dropdown);
4170
4171  /**
4172   * --------------------------------------------------------------------------
4173   * Bootstrap 
4173util/backdrop.js
4174   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4175   * --------------------------------------------------------------------------
4176   */
4177
4178  /**
4179   * Constants
4180   */
4181
4182  const NAME$9 = 'backdrop';
4183  const CLASS_NAME_FADE$4 = 'fade';
vendor: 9,491 bytes, lines 4184-4495
4184  const CLASS_NAME_SHOW$5 = 'show';
4185  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
4186  const Default$8 = {
4187    className: 'modal-backdrop',
4188    clickCallback: null,
4189    isAnimated: false,
4190    isVisible: true,
4191    // if false, we use the backdrop helper without adding any element to the dom
4192    rootElement: 'body' // give the choice to place backdrop under different elements
4193  };
4194
4195  const DefaultType$8 = {
4196    className: 'string',
4197    clickCallback: '(function|null)',
4198    isAnimated: 'boolean',
4199    isVisible: 'boolean',
4200    rootElement: '(element|string)'
4201  };
4202
4203  /**
4204   * Class definition
4205   */
4206
4207  class Backdrop extends Config {
4208    constructor(config) {
4209      super();
4210      this._config = this._getConfig(config);
4211      this._isAppended = false;
4212      this._element = null;
4213    }
4214
4215    // Getters
4216    static get Default() {
4217      return Default$8;
4218    }
4219    static get DefaultType() {
4220      return DefaultType$8;
4221    }
4222    static get NAME() {
4223      return NAME$9;
4224    }
4225
4226    // Public
4227    show(callback) {
4228      if (!this._config.isVisible) {
4229        execute(callback);
4230        return;
4231      }
4232      this._append();
4233      const element = this._getElement();
4234      if (this._config.isAnimated) {
4235        reflow(element);
4236      }
4237      element.classList.add(CLASS_NAME_SHOW$5);
4238      this._emulateAnimation(() => {
4239        execute(callback);
4240      });
4241    }
4242    hide(callback) {
4243      if (!this._config.isVisible) {
4244        execute(callback);
4245        return;
4246      }
4247      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
4248      this._emulateAnimation(() => {
4249        this.dispose();
4250        execute(callback);
4251      });
4252    }
4253    dispose() {
4254      if (!this._isAppended) {
4255        return;
4256      }
4257      EventHandler.off(this._element, EVENT_MOUSEDOWN);
4258      this._element.remove();
4259      this._isAppended = false;
4260    }
4261
4262    // Private
4263    _getElement() {
4264      if (!this._element) {
4265        const backdrop = document.createElement('div');
4266        backdrop.className = this._config.className;
4267        if (this._config.isAnimated) {
4268          backdrop.classList.add(CLASS_NAME_FADE$4);
4269        }
4270        this._element = backdrop;
4271      }
4272      return this._element;
4273    }
4274    _configAfterMerge(config) {
4275      // use getElement() with the default "body" to get a fresh Element on each instantiation
4276      config.rootElement = getElement(config.rootElement);
4277      return config;
4278    }
4279    _append() {
4280      if (this._isAppended) {
4281        return;
4282      }
4283      const element = this._getElement();
4284      this._config.rootElement.append(element);
4285      EventHandler.on(element, EVENT_MOUSEDOWN, () => {
4286        execute(this._config.clickCallback);
4287      });
4288      this._isAppended = true;
4289    }
4290    _emulateAnimation(callback) {
4291      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
4292    }
4293  }
4294
4295  /**
4296   * --------------------------------------------------------------------------
4297   * Bootstrap util/focustrap.js
4298   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4299   * --------------------------------------------------------------------------
4300   */
4301
4302  /**
4303   * Constants
4304   */
4305
4306  const NAME$8 = 'focustrap';
4307  const DATA_KEY$5 = 'bs.focustrap';
4308  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
4309  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
4310  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
4311  const TAB_KEY = 'Tab';
4312  const TAB_NAV_FORWARD = 'forward';
4313  const TAB_NAV_BACKWARD = 'backward';
4314  const Default$7 = {
4315    autofocus: true,
4316    trapElement: null // The element to trap focus inside of
4317  };
4318
4319  const DefaultType$7 = {
4320    autofocus: 'boolean',
4321    trapElement: 'element'
4322  };
4323
4324  /**
4325   * Class definition
4326   */
4327
4328  class FocusTrap extends Config {
4329    constructor(config) {
4330      super();
4331      this._config = this._getConfig(config);
4332      this._isActive = false;
4333      this._lastTabNavDirection = null;
4334    }
4335
4336    // Getters
4337    static get Default() {
4338      return Default$7;
4339    }
4340    static get DefaultType() {
4341      return DefaultType$7;
4342    }
4343    static get NAME() {
4344      return NAME$8;
4345    }
4346
4347    // Public
4348    activate() {
4349      if (this._isActive) {
4350        return;
4351      }
4352      if (this._config.autofocus) {
4353        this._config.trapElement.focus();
4354      }
4355      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
4356      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
4357      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
4358      this._isActive = true;
4359    }
4360    deactivate() {
4361      if (!this._isActive) {
4362        return;
4363      }
4364      this._isActive = false;
4365      EventHandler.off(document, EVENT_KEY$5);
4366    }
4367
4368    // Private
4369    _handleFocusin(event) {
4370      const {
4371        trapElement
4372      } = this._config;
4373      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
4374        return;
4375      }
4376      const elements = SelectorEngine.focusableChildren(trapElement);
4377      if (elements.length === 0) {
4378        trapElement.focus();
4379      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
4380        elements[elements.length - 1].focus();
4381      } else {
4382        elements[0].focus();
4383      }
4384    }
4385    _handleKeydown(event) {
4386      if (event.key !== TAB_KEY) {
4387        return;
4388      }
4389      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
4390    }
4391  }
4392
4393  /**
4394   * --------------------------------------------------------------------------
4395   * Bootstrap util/scrollBar.js
4396   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4397   * --------------------------------------------------------------------------
4398   */
4399
4400  /**
4401   * Constants
4402   */
4403
4404  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
4405  const SELECTOR_STICKY_CONTENT = '.sticky-top';
4406  const PROPERTY_PADDING = 'padding-right';
4407  const PROPERTY_MARGIN = 'margin-right';
4408
4409  /**
4410   * Class definition
4411   */
4412
4413  class ScrollBarHelper {
4414    constructor() {
4415      this._element = document.body;
4416    }
4417
4418    // Public
4419    getWidth() {
4420      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
4421      const documentWidth = document.documentElement.clientWidth;
4422      return Math.abs(window.innerWidth - documentWidth);
4423    }
4424    hide() {
4425      const width = this.getWidth();
4426      this._disableOverFlow();
4427      // give padding to element to balance the hidden scrollbar width
4428      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
4429      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
4430      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
4431      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
4432    }
4433    reset() {
4434      this._resetElementAttributes(this._element, 'overflow');
4435      this._resetElementAttributes(this._element, PROPERTY_PADDING);
4436      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
4437      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
4438    }
4439    isOverflowing() {
4440      return this.getWidth() > 0;
4441    }
4442
4443    // Private
4444    _disableOverFlow() {
4445      this._saveInitialAttribute(this._element, 'overflow');
4446      this._element.style.overflow = 'hidden';
4447    }
4448    _setElementAttributes(selector, styleProperty, callback) {
4449      const scrollbarWidth = this.getWidth();
4450      const manipulationCallBack = element => {
4451        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
4452          return;
4453        }
4454        this._saveInitialAttribute(element, styleProperty);
4455        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
4456        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
4457      };
4458      this._applyManipulationCallback(selector, manipulationCallBack);
4459    }
4460    _saveInitialAttribute(element, styleProperty) {
4461      const actualValue = element.style.getPropertyValue(styleProperty);
4462      if (actualValue) {
4463        Manipulator.setDataAttribute(element, styleProperty, actualValue);
4464      }
4465    }
4466    _resetElementAttributes(selector, styleProperty) {
4467      const manipulationCallBack = element => {
4468        const value = Manipulator.getDataAttribute(element, styleProperty);
4469        // We only want to remove the property if the value is `null`; the value can also be zero
4470        if (value === null) {
4471          element.style.removeProperty(styleProperty);
4472          return;
4473        }
4474        Manipulator.removeDataAttribute(element, styleProperty);
4475        element.style.setProperty(styleProperty, value);
4476      };
4477      this._applyManipulationCallback(selector, manipulationCallBack);
4478    }
4479    _applyManipulationCallback(selector, callBack) {
4480      if (isElement$1(selector)) {
4481        callBack(selector);
4482        return;
4483      }
4484      for (const sel of SelectorEngine.find(selector, this._element)) {
4485        callBack(sel);
4486      }
4487    }
4488  }
4489
4490  /**
4491   * --------------------------------------------------------------------------
4492   * Bootstrap modal.js
4493   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4494   * --------------------------------------------------------------------------
4495   */
vendor: 16,833 bytes, lines 4495-5031
4495
4496
4497  /**
4498   * Constants
4499   */
4500
4501  const NAME$7 = 'modal';
4502  const DATA_KEY$4 = 'bs.modal';
4503  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
4504  const DATA_API_KEY$2 = '.data-api';
4505  const ESCAPE_KEY$1 = 'Escape';
4506  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
4507  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
4508  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
4509  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
4510  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
4511  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
4512  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
4513  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
4514  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
4515  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
4516  const CLASS_NAME_OPEN = 'modal-open';
4517  const CLASS_NAME_FADE$3 = 'fade';
4518  const CLASS_NAME_SHOW$4 = 'show';
4519  const CLASS_NAME_STATIC = 'modal-static';
4520  const OPEN_SELECTOR$1 = '.modal.show';
4521  const SELECTOR_DIALOG = '.modal-dialog';
4522  const SELECTOR_MODAL_BODY = '.modal-body';
4523  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
4524  const Default$6 = {
4525    backdrop: true,
4526    focus: true,
4527    keyboard: true
4528  };
4529  const DefaultType$6 = {
4530    backdrop: '(boolean|string)',
4531    focus: 'boolean',
4532    keyboard: 'boolean'
4533  };
4534
4535  /**
4536   * Class definition
4537   */
4538
4539  class Modal extends BaseComponent {
4540    constructor(element, config) {
4541      super(element, config);
4542      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
4543      this._backdrop = this._initializeBackDrop();
4544      this._focustrap = this._initializeFocusTrap();
4545      this._isShown = false;
4546      this._isTransitioning = false;
4547      this._scrollBar = new ScrollBarHelper();
4548      this._addEventListeners();
4549    }
4550
4551    // Getters
4552    static get Default() {
4553      return Default$6;
4554    }
4555    static get DefaultType() {
4556      return DefaultType$6;
4557    }
4558    static get NAME() {
4559      return NAME$7;
4560    }
4561
4562    // Public
4563    toggle(relatedTarget) {
4564      return this._isShown ? this.hide() : this.show(relatedTarget);
4565    }
4566    show(relatedTarget) {
4567      if (this._isShown || this._isTransitioning) {
4568        return;
4569      }
4570      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
4571        relatedTarget
4572      });
4573      if (showEvent.defaultPrevented) {
4574        return;
4575      }
4576      this._isShown = true;
4577      this._isTransitioning = true;
4578      this._scrollBar.hide();
4579      document.body.classList.add(CLASS_NAME_OPEN);
4580      this._adjustDialog();
4581      this._backdrop.show(() => this._showElement(relatedTarget));
4582    }
4583    hide() {
4584      if (!this._isShown || this._isTransitioning) {
4585        return;
4586      }
4587      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
4588      if (hideEvent.defaultPrevented) {
4589        return;
4590      }
4591      this._isShown = false;
4592      this._isTransitioning = true;
4593      this._focustrap.deactivate();
4594      this._element.classList.remove(CLASS_NAME_SHOW$4);
4595      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
4596    }
4597    dispose() {
4598      EventHandler.off(window, EVENT_KEY$4);
4599      EventHandler.off(this._dialog, EVENT_KEY$4);
4600      this._backdrop.dispose();
4601      this._focustrap.deactivate();
4602      super.dispose();
4603    }
4604    handleUpdate() {
4605      this._adjustDialog();
4606    }
4607
4608    // Private
4609    _initializeBackDrop() {
4610      return new Backdrop({
4611        isVisible: Boolean(this._config.backdrop),
4612        // 'static' option will be translated to true, and booleans will keep their value,
4613        isAnimated: this._isAnimated()
4614      });
4615    }
4616    _initializeFocusTrap() {
4617      return new FocusTrap({
4618        trapElement: this._element
4619      });
4620    }
4621    _showElement(relatedTarget) {
4622      // try to append dynamic modal
4623      if (!document.body.contains(this._element)) {
4624        document.body.append(this._element);
4625      }
4626      this._element.style.display = 'block';
4627      this._element.removeAttribute('aria-hidden');
4628      this._element.setAttribute('aria-modal', true);
4629      this._element.setAttribute('role', 'dialog');
4630      this._element.scrollTop = 0;
4631      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
4632      if (modalBody) {
4633        modalBody.scrollTop = 0;
4634      }
4635      reflow(this._element);
4636      this._element.classList.add(CLASS_NAME_SHOW$4);
4637      const transitionComplete = () => {
4638        if (this._config.focus) {
4639          this._focustrap.activate();
4640        }
4641        this._isTransitioning = false;
4642        EventHandler.trigger(this._element, EVENT_SHOWN$4, {
4643          relatedTarget
4644        });
4645      };
4646      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
4647    }
4648    _addEventListeners() {
4649      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
4650        if (event.key !== ESCAPE_KEY$1) {
4651          return;
4652        }
4653        if (this._config.keyboard) {
4654          this.hide();
4655          return;
4656        }
4657        this._triggerBackdropTransition();
4658      });
4659      EventHandler.on(window, EVENT_RESIZE$1, () => {
4660        if (this._isShown && !this._isTransitioning) {
4661          this._adjustDialog();
4662        }
4663      });
4664      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
4665        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
4666        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
4667          if (this._element !== event.target || this._element !== event2.target) {
4668            return;
4669          }
4670          if (this._config.backdrop === 'static') {
4671            this._triggerBackdropTransition();
4672            return;
4673          }
4674          if (this._config.backdrop) {
4675            this.hide();
4676          }
4677        });
4678      });
4679    }
4680    _hideModal() {
4681      this._element.style.display = 'none';
4682      this._element.setAttribute('aria-hidden', true);
4683      this._element.removeAttribute('aria-modal');
4684      this._element.removeAttribute('role');
4685      this._isTransitioning = false;
4686      this._backdrop.hide(() => {
4687        document.body.classList.remove(CLASS_NAME_OPEN);
4688        this._resetAdjustments();
4689        this._scrollBar.reset();
4690        EventHandler.trigger(this._element, EVENT_HIDDEN$4);
4691      });
4692    }
4693    _isAnimated() {
4694      return this._element.classList.contains(CLASS_NAME_FADE$3);
4695    }
4696    _triggerBackdropTransition() {
4697      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
4698      if (hideEvent.defaultPrevented) {
4699        return;
4700      }
4701      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4702      const initialOverflowY = this._element.style.overflowY;
4703      // return if the following background transition hasn't yet completed
4704      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
4705        return;
4706      }
4707      if (!isModalOverflowing) {
4708        this._element.style.overflowY = 'hidden';
4709      }
4710      this._element.classList.add(CLASS_NAME_STATIC);
4711      this._queueCallback(() => {
4712        this._element.classList.remove(CLASS_NAME_STATIC);
4713        this._queueCallback(() => {
4714          this._element.style.overflowY = initialOverflowY;
4715        }, this._dialog);
4716      }, this._dialog);
4717      this._element.focus();
4718    }
4719
4720    /**
4721     * The following methods are used to handle overflowing modals
4722     */
4723
4724    _adjustDialog() {
4725      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4726      const scrollbarWidth = this._scrollBar.getWidth();
4727      const isBodyOverflowing = scrollbarWidth > 0;
4728      if (isBodyOverflowing && !isModalOverflowing) {
4729        const property = isRTL() ? 'paddingLeft' : 'paddingRight';
4730        this._element.style[property] = `${scrollbarWidth}px`;
4731      }
4732      if (!isBodyOverflowing && isModalOverflowing) {
4733        const property = isRTL() ? 'paddingRight' : 'paddingLeft';
4734        this._element.style[property] = `${scrollbarWidth}px`;
4735      }
4736    }
4737    _resetAdjustments() {
4738      this._element.style.paddingLeft = '';
4739      this._element.style.paddingRight = '';
4740    }
4741
4742    // Static
4743    static jQueryInterface(config, relatedTarget) {
4744      return this.each(function () {
4745        const data = Modal.getOrCreateInstance(this, config);
4746        if (typeof config !== 'string') {
4747          return;
4748        }
4749        if (typeof data[config] === 'undefined') {
4750          throw new TypeError(`No method named "${config}"`);
4751        }
4752        data[config](relatedTarget);
4753      });
4754    }
4755  }
4756
4757  /**
4758   * Data API implementation
4759   */
4760
4761  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
4762    const target = SelectorEngine.getElementFromSelector(this);
4763    if (['A', 'AREA'].includes(this.tagName)) {
4764      event.preventDefault();
4765    }
4766    EventHandler.one(target, EVENT_SHOW$4, showEvent => {
4767      if (showEvent.defaultPrevented) {
4768        // only register focus restorer if modal will actually get shown
4769        return;
4770      }
4771      EventHandler.one(target, EVENT_HIDDEN$4, () => {
4772        if (isVisible(this)) {
4773          this.focus();
4774        }
4775      });
4776    });
4777
4778    // avoid conflict when clicking modal toggler while another one is open
4779    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
4780    if (alreadyOpen) {
4781      Modal.getInstance(alreadyOpen).hide();
4782    }
4783    const data = Modal.getOrCreateInstance(target);
4784    data.toggle(this);
4785  });
4786  enableDismissTrigger(Modal);
4787
4788  /**
4789   * jQuery
4790   */
4791
4792  defineJQueryPlugin(Modal);
4793
4794  /**
4795   * --------------------------------------------------------------------------
4796   * Bootstrap offcanvas.js
4797   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4798   * --------------------------------------------------------------------------
4799   */
4800
4801  /**
4802   * Constants
4803   */
4804
4805  const NAME$6 = 'offcanvas';
4806  const DATA_KEY$3 = 'bs.offcanvas';
4807  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
4808  const DATA_API_KEY$1 = '.data-api';
4809  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
4810  const ESCAPE_KEY = 'Escape';
4811  const CLASS_NAME_SHOW$3 = 'show';
4812  const CLASS_NAME_SHOWING$1 = 'showing';
4813  const CLASS_NAME_HIDING = 'hiding';
4814  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
4815  const OPEN_SELECTOR = '.offcanvas.show';
4816  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
4817  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
4818  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
4819  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
4820  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
4821  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
4822  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
4823  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
4824  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
4825  const Default$5 = {
4826    backdrop: true,
4827    keyboard: true,
4828    scroll: false
4829  };
4830  const DefaultType$5 = {
4831    backdrop: '(boolean|string)',
4832    keyboard: 'boolean',
4833    scroll: 'boolean'
4834  };
4835
4836  /**
4837   * Class definition
4838   */
4839
4840  class Offcanvas extends BaseComponent {
4841    constructor(element, config) {
4842      super(element, config);
4843      this._isShown = false;
4844      this._backdrop = this._initializeBackDrop();
4845      this._focustrap = this._initializeFocusTrap();
4846      this._addEventListeners();
4847    }
4848
4849    // Getters
4850    static get Default() {
4851      return Default$5;
4852    }
4853    static get DefaultType() {
4854      return DefaultType$5;
4855    }
4856    static get NAME() {
4857      return NAME$6;
4858    }
4859
4860    // Public
4861    toggle(relatedTarget) {
4862      return this._isShown ? this.hide() : this.show(relatedTarget);
4863    }
4864    show(relatedTarget) {
4865      if (this._isShown) {
4866        return;
4867      }
4868      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
4869        relatedTarget
4870      });
4871      if (showEvent.defaultPrevented) {
4872        return;
4873      }
4874      this._isShown = true;
4875      this._backdrop.show();
4876      if (!this._config.scroll) {
4877        new ScrollBarHelper().hide();
4878      }
4879      this._element.setAttribute('aria-modal', true);
4880      this._element.setAttribute('role', 'dialog');
4881      this._element.classList.add(CLASS_NAME_SHOWING$1);
4882      const completeCallBack = () => {
4883        if (!this._config.scroll || this._config.backdrop) {
4884          this._focustrap.activate();
4885        }
4886        this._element.classList.add(CLASS_NAME_SHOW$3);
4887        this._element.classList.remove(CLASS_NAME_SHOWING$1);
4888        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
4889          relatedTarget
4890        });
4891      };
4892      this._queueCallback(completeCallBack, this._element, true);
4893    }
4894    hide() {
4895      if (!this._isShown) {
4896        return;
4897      }
4898      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
4899      if (hideEvent.defaultPrevented) {
4900        return;
4901      }
4902      this._focustrap.deactivate();
4903      this._element.blur();
4904      this._isShown = false;
4905      this._element.classList.add(CLASS_NAME_HIDING);
4906      this._backdrop.hide();
4907      const completeCallback = () => {
4908        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
4909        this._element.removeAttribute('aria-modal');
4910        this._element.removeAttribute('role');
4911        if (!this._config.scroll) {
4912          new ScrollBarHelper().reset();
4913        }
4914        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
4915      };
4916      this._queueCallback(completeCallback, this._element, true);
4917    }
4918    dispose() {
4919      this._backdrop.dispose();
4920      this._focustrap.deactivate();
4921      super.dispose();
4922    }
4923
4924    // Private
4925    _initializeBackDrop() {
4926      const clickCallback = () => {
4927        if (this._config.backdrop === 'static') {
4928          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
4929          return;
4930        }
4931        this.hide();
4932      };
4933
4934      // 'static' option will be translated to true, and booleans will keep their value
4935      const isVisible = Boolean(this._config.backdrop);
4936      return new Backdrop({
4937        className: CLASS_NAME_BACKDROP,
4938        isVisible,
4939        isAnimated: true,
4940        rootElement: this._element.parentNode,
4941        clickCallback: isVisible ? clickCallback : null
4942      });
4943    }
4944    _initializeFocusTrap() {
4945      return new FocusTrap({
4946        trapElement: this._element
4947      });
4948    }
4949    _addEventListeners() {
4950      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
4951        if (event.key !== ESCAPE_KEY) {
4952          return;
4953        }
4954        if (this._config.keyboard) {
4955          this.hide();
4956          return;
4957        }
4958        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
4959      });
4960    }
4961
4962    // Static
4963    static jQueryInterface(config) {
4964      return this.each(function () {
4965        const data = Offcanvas.getOrCreateInstance(this, config);
4966        if (typeof config !== 'string') {
4967          return;
4968        }
4969        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
4970          throw new TypeError(`No method named "${config}"`);
4971        }
4972        data[config](this);
4973      });
4974    }
4975  }
4976
4977  /**
4978   * Data API implementation
4979   */
4980
4981  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
4982    const target = SelectorEngine.getElementFromSelector(this);
4983    if (['A', 'AREA'].includes(this.tagName)) {
4984      event.preventDefault();
4985    }
4986    if (isDisabled(this)) {
4987      return;
4988    }
4989    EventHandler.one(target, EVENT_HIDDEN$3, () => {
4990      // focus on trigger when it is closed
4991      if (isVisible(this)) {
4992        this.focus();
4993      }
4994    });
4995
4996    // avoid conflict when clicking a toggler of an offcanvas, while another is open
4997    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
4998    if (alreadyOpen && alreadyOpen !== target) {
4999      Offcanvas.getInstance(alreadyOpen).hide();
5000    }
5001    const data = Offcanvas.getOrCreateInstance(target);
5002    data.toggle(this);
5003  });
5004  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
5005    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
5006      Offcanvas.getOrCreateInstance(selector).show();
5007    }
5008  });
5009  EventHandler.on(window, EVENT_RESIZE, () => {
5010    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
5011      if (getComputedStyle(element).position !== 'fixed') {
5012        Offcanvas.getOrCreateInstance(element).hide();
5013      }
5014    }
5015  });
5016  enableDismissTrigger(Offcanvas);
5017
5018  /**
5019   * jQuery
5020   */
5021
5022  defineJQueryPlugin(Offcanvas);
5023
5024  /**
5025   * --------------------------------------------------------------------------
5026   * Bootstrap util/sanitizer.js
5027   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5028   * --------------------------------------------------------------------------
5029   */
5030
5031  
vendor: 3,042 bytes, lines 5031-5115
5031const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
5032
5033  /**
5034   * A pattern that recognizes a commonly useful subset of URLs that are safe.
5035   *
5036   * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
5037   */
5038  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
5039
5040  /**
5041   * A pattern that matches safe data URLs. Only matches image, video and audio types.
5042   *
5043   * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
5044   */
5045  const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
5046  const allowedAttribute = (attribute, allowedAttributeList) => {
5047    const attributeName = attribute.nodeName.toLowerCase();
5048    if (allowedAttributeList.includes(attributeName)) {
5049      if (uriAttributes.has(attributeName)) {
5050        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
5051      }
5052      return true;
5053    }
5054
5055    // Check if a regular expression validates the attribute.
5056    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
5057  };
5058
5059  // js-docs-start allow-list
5060  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5061  const DefaultAllowlist = {
5062    // Global attributes allowed on any supplied element below.
5063    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5064    a: ['target', 'href', 'title', 'rel'],
5065    area: [],
5066    b: [],
5067    br: [],
5068    col: [],
5069    code: [],
5070    div: [],
5071    em: [],
5072    hr: [],
5073    h1: [],
5074    h2: [],
5075    h3: [],
5076    h4: [],
5077    h5: [],
5078    h6: [],
5079    i: [],
5080    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
5081    li: [],
5082    ol: [],
5083    p: [],
5084    pre: [],
5085    s: [],
5086    small: [],
5087    span: [],
5088    sub: [],
5089    sup: [],
5090    strong: [],
5091    u: [],
5092    ul: []
5093  };
5094  // js-docs-end allow-list
5095
5096  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
5097    if (!unsafeHtml.length) {
5098      return unsafeHtml;
5099    }
5100    if (sanitizeFunction && typeof sanitizeFunction === 'function') {
5101      return sanitizeFunction(unsafeHtml);
5102    }
5103    const domParser = new window.DOMParser();
5104    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
5105    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
5106    for (const element of elements) {
5107      const elementName = element.nodeName.toLowerCase();
5108      if (!Object.keys(allowList).includes(elementName)) {
5109        element.remove();
5110        continue;
5111      }
5112      const attributeList = [].concat(...element.attributes);
5113      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
5114      for (const attribute of attributeList) {
5115        if (!allowedAttribute(attribute, allowedAttributes)) {
vendor: 7,436 bytes, lines 5116-5390
5116          element.removeAttribute(attribute.nodeName);
5117        }
5118      }
5119    }
5120    return createdDocument.body.innerHTML;
5121  }
5122
5123  /**
5124   * --------------------------------------------------------------------------
5125   * Bootstrap util/template-factory.js
5126   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5127   * --------------------------------------------------------------------------
5128   */
5129
5130  /**
5131   * Constants
5132   */
5133
5134  const NAME$5 = 'TemplateFactory';
5135  const Default$4 = {
5136    allowList: DefaultAllowlist,
5137    content: {},
5138    // { selector : text ,  selector2 : text2 , }
5139    extraClass: '',
5140    html: false,
5141    sanitize: true,
5142    sanitizeFn: null,
5143    template: '<div></div>'
5144  };
5145  const DefaultType$4 = {
5146    allowList: 'object',
5147    content: 'object',
5148    extraClass: '(string|function)',
5149    html: 'boolean',
5150    sanitize: 'boolean',
5151    sanitizeFn: '(null|function)',
5152    template: 'string'
5153  };
5154  const DefaultContentType = {
5155    entry: '(string|element|function|null)',
5156    selector: '(string|element)'
5157  };
5158
5159  /**
5160   * Class definition
5161   */
5162
5163  class TemplateFactory extends Config {
5164    constructor(config) {
5165      super();
5166      this._config = this._getConfig(config);
5167    }
5168
5169    // Getters
5170    static get Default() {
5171      return Default$4;
5172    }
5173    static get DefaultType() {
5174      return DefaultType$4;
5175    }
5176    static get NAME() {
5177      return NAME$5;
5178    }
5179
5180    // Public
5181    getContent() {
5182      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
5183    }
5184    hasContent() {
5185      return this.getContent().length > 0;
5186    }
5187    changeContent(content) {
5188      this._checkContent(content);
5189      this._config.content = {
5190        ...this._config.content,
5191        ...content
5192      };
5193      return this;
5194    }
5195    toHtml() {
5196      const templateWrapper = document.createElement('div');
5197      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
5198      for (const [selector, text] of Object.entries(this._config.content)) {
5199        this._setContent(templateWrapper, text, selector);
5200      }
5201      const template = templateWrapper.children[0];
5202      const extraClass = this._resolvePossibleFunction(this._config.extraClass);
5203      if (extraClass) {
5204        template.classList.add(...extraClass.split(' '));
5205      }
5206      return template;
5207    }
5208
5209    // Private
5210    _typeCheckConfig(config) {
5211      super._typeCheckConfig(config);
5212      this._checkContent(config.content);
5213    }
5214    _checkContent(arg) {
5215      for (const [selector, content] of Object.entries(arg)) {
5216        super._typeCheckConfig({
5217          selector,
5218          entry: content
5219        }, DefaultContentType);
5220      }
5221    }
5222    _setContent(template, content, selector) {
5223      const templateElement = SelectorEngine.findOne(selector, template);
5224      if (!templateElement) {
5225        return;
5226      }
5227      content = this._resolvePossibleFunction(content);
5228      if (!content) {
5229        templateElement.remove();
5230        return;
5231      }
5232      if (isElement$1(content)) {
5233        this._putElementInTemplate(getElement(content), templateElement);
5234        return;
5235      }
5236      if (this._config.html) {
5237        templateElement.innerHTML = this._maybeSanitize(content);
5238        return;
5239      }
5240      templateElement.textContent = content;
5241    }
5242    _maybeSanitize(arg) {
5243      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
5244    }
5245    _resolvePossibleFunction(arg) {
5246      return execute(arg, [this]);
5247    }
5248    _putElementInTemplate(element, templateElement) {
5249      if (this._config.html) {
5250        templateElement.innerHTML = '';
5251        templateElement.append(element);
5252        return;
5253      }
5254      templateElement.textContent = element.textContent;
5255    }
5256  }
5257
5258  /**
5259   * --------------------------------------------------------------------------
5260   * Bootstrap tooltip.js
5261   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5262   * --------------------------------------------------------------------------
5263   */
5264
5265  /**
5266   * Constants
5267   */
5268
5269  const NAME$4 = 'tooltip';
5270  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
5271  const CLASS_NAME_FADE$2 = 'fade';
5272  const CLASS_NAME_MODAL = 'modal';
5273  const CLASS_NAME_SHOW$2 = 'show';
5274  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
5275  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
5276  const EVENT_MODAL_HIDE = 'hide.bs.modal';
5277  const TRIGGER_HOVER = 'hover';
5278  const TRIGGER_FOCUS = 'focus';
5279  const TRIGGER_CLICK = 'click';
5280  const TRIGGER_MANUAL = 'manual';
5281  const EVENT_HIDE$2 = 'hide';
5282  const EVENT_HIDDEN$2 = 'hidden';
5283  const EVENT_SHOW$2 = 'show';
5284  const EVENT_SHOWN$2 = 'shown';
5285  const EVENT_INSERTED = 'inserted';
5286  const EVENT_CLICK$1 = 'click';
5287  const EVENT_FOCUSIN$1 = 'focusin';
5288  const EVENT_FOCUSOUT$1 = 'focusout';
5289  const EVENT_MOUSEENTER = 'mouseenter';
5290  const EVENT_MOUSELEAVE = 'mouseleave';
5291  const AttachmentMap = {
5292    AUTO: 'auto',
5293    TOP: 'top',
5294    RIGHT: isRTL() ? 'left' : 'right',
5295    BOTTOM: 'bottom',
5296    LEFT: isRTL() ? 'right' : 'left'
5297  };
5298  const Default$3 = {
5299    allowList: DefaultAllowlist,
5300    animation: true,
5301    boundary: 'clippingParents',
5302    container: false,
5303    customClass: '',
5304    delay: 0,
5305    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
5306    html: false,
5307    offset: [0, 6],
5308    placement: 'top',
5309    popperConfig: null,
5310    sanitize: true,
5311    sanitizeFn: null,
5312    selector: false,
5313    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
5314    title: '',
5315    trigger: 'hover focus'
5316  };
5317  const DefaultType$3 = {
5318    allowList: 'object',
5319    animation: 'boolean',
5320    boundary: '(string|element)',
5321    container: '(string|element|boolean)',
5322    customClass: '(string|function)',
5323    delay: '(number|object)',
5324    fallbackPlacements: 'array',
5325    html: 'boolean',
5326    offset: '(array|string|function)',
5327    placement: '(string|function)',
5328    popperConfig: '(null|object|function)',
5329    sanitize: 'boolean',
5330    sanitizeFn: '(null|function)',
5331    selector: '(string|boolean)',
5332    template: 'string',
5333    title: '(string|element|function)',
5334    trigger: 'string'
5335  };
5336
5337  /**
5338   * Class definition
5339   */
5340
5341  class Tooltip extends BaseComponent {
5342    constructor(element, config) {
5343      if (typeof Popper === 'undefined') {
5344        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
5345      }
5346      super(element, config);
5347
5348      // Private
5349      this._isEnabled = true;
5350      this._timeout = 0;
5351      this._isHovered = null;
5352      this._activeTrigger = {};
5353      this._popper = null;
5354      this._templateFactory = null;
5355      this._newContent = null;
5356
5357      // Protected
5358      this.tip = null;
5359      this._setListeners();
5360      if (!this._config.selector) {
5361        this._fixTitle();
5362      }
5363    }
5364
5365    // Getters
5366    static get Default() {
5367      return Default$3;
5368    }
5369    static get DefaultType() {
5370      return DefaultType$3;
5371    }
5372    static get NAME() {
5373      return NAME$4;
5374    }
5375
5376    // Public
5377    enable() {
5378      this._isEnabled = true;
5379    }
5380    disable() {
5381      this._isEnabled = false;
5382    }
5383    toggleEnabled() {
5384      this._isEnabled = !this._isEnabled;
5385    }
5386    toggle() {
5387      if (!this._isEnabled) {
5388        return;
5389      }
5390      this._activeTrigger.click = !this._activeTrigger.click;
vendor: 6,078 bytes, lines 5390-5563
5390
5391      if (this._isShown()) {
5392        this._leave();
5393        return;
5394      }
5395      this._enter();
5396    }
5397    dispose() {
5398      clearTimeout(this._timeout);
5399      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
5400      if (this._element.getAttribute('data-bs-original-title')) {
5401        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
5402      }
5403      this._disposePopper();
5404      super.dispose();
5405    }
5406    show() {
5407      if (this._element.style.display === 'none') {
5408        throw new Error('Please use show on visible elements');
5409      }
5410      if (!(this._isWithContent() && this._isEnabled)) {
5411        return;
5412      }
5413      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
5414      const shadowRoot = findShadowRoot(this._element);
5415      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
5416      if (showEvent.defaultPrevented || !isInTheDom) {
5417        return;
5418      }
5419
5420      // TODO: v6 remove this or make it optional
5421      this._disposePopper();
5422      const tip = this._getTipElement();
5423      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
5424      const {
5425        container
5426      } = this._config;
5427      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
5428        container.append(tip);
5429        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
5430      }
5431      this._popper = this._createPopper(tip);
5432      tip.classList.add(CLASS_NAME_SHOW$2);
5433
5434      // If this is a touch-enabled device we add extra
5435      // empty mouseover listeners to the body's immediate children;
5436      // only needed because of broken event delegation on iOS
5437      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5438      if ('ontouchstart' in document.documentElement) {
5439        for (const element of [].concat(...document.body.children)) {
5440          EventHandler.on(element, 'mouseover', noop);
5441        }
5442      }
5443      const complete = () => {
5444        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
5445        if (this._isHovered === false) {
5446          this._leave();
5447        }
5448        this._isHovered = false;
5449      };
5450      this._queueCallback(complete, this.tip, this._isAnimated());
5451    }
5452    hide() {
5453      if (!this._isShown()) {
5454        return;
5455      }
5456      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
5457      if (hideEvent.defaultPrevented) {
5458        return;
5459      }
5460      const tip = this._getTipElement();
5461      tip.classList.remove(CLASS_NAME_SHOW$2);
5462
5463      // If this is a touch-enabled device we remove the extra
5464      // empty mouseover listeners we added for iOS support
5465      if ('ontouchstart' in document.documentElement) {
5466        for (const element of [].concat(...document.body.children)) {
5467          EventHandler.off(element, 'mouseover', noop);
5468        }
5469      }
5470      this._activeTrigger[TRIGGER_CLICK] = false;
5471      this._activeTrigger[TRIGGER_FOCUS] = false;
5472      this._activeTrigger[TRIGGER_HOVER] = false;
5473      this._isHovered = null; // it is a trick to support manual triggering
5474
5475      const complete = () => {
5476        if (this._isWithActiveTrigger()) {
5477          return;
5478        }
5479        if (!this._isHovered) {
5480          this._disposePopper();
5481        }
5482        this._element.removeAttribute('aria-describedby');
5483        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
5484      };
5485      this._queueCallback(complete, this.tip, this._isAnimated());
5486    }
5487    update() {
5488      if (this._popper) {
5489        this._popper.update();
5490      }
5491    }
5492
5493    // Protected
5494    _isWithContent() {
5495      return Boolean(this._getTitle());
5496    }
5497    _getTipElement() {
5498      if (!this.tip) {
5499        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
5500      }
5501      return this.tip;
5502    }
5503    _createTipElement(content) {
5504      const tip = this._getTemplateFactory(content).toHtml();
5505
5506      // TODO: remove this check in v6
5507      if (!tip) {
5508        return null;
5509      }
5510      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
5511      // TODO: v6 the following can be achieved with CSS only
5512      tip.classList.add(`bs-${this.constructor.NAME}-auto`);
5513      const tipId = getUID(this.constructor.NAME).toString();
5514      tip.setAttribute('id', tipId);
5515      if (this._isAnimated()) {
5516        tip.classList.add(CLASS_NAME_FADE$2);
5517      }
5518      return tip;
5519    }
5520    setContent(content) {
5521      this._newContent = content;
5522      if (this._isShown()) {
5523        this._disposePopper();
5524        this.show();
5525      }
5526    }
5527    _getTemplateFactory(content) {
5528      if (this._templateFactory) {
5529        this._templateFactory.changeContent(content);
5530      } else {
5531        this._templateFactory = new TemplateFactory({
5532          ...this._config,
5533          // the `content` var has to be after `this._config`
5534          // to override config.content in case of popover
5535          content,
5536          extraClass: this._resolvePossibleFunction(this._config.customClass)
5537        });
5538      }
5539      return this._templateFactory;
5540    }
5541    _getContentForTemplate() {
5542      return {
5543        [SELECTOR_TOOLTIP_INNER]: this._getTitle()
5544      };
5545    }
5546    _getTitle() {
5547      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
5548    }
5549
5550    // Private
5551    _initializeOnDelegatedTarget(event) {
5552      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
5553    }
5554    _isAnimated() {
5555      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
5556    }
5557    _isShown() {
5558      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
5559    }
5560    _createPopper(tip) {
5561      const placement = execute(this._config.placement, [this, tip, this._element]);
5562      const attachment = AttachmentMap[placement.toUpperCase()];
5563      return 
vendor: 4,168 bytes, lines 5563-5676
5563createPopper(this._element, tip, this._getPopperConfig(attachment));
5564    }
5565    _getOffset() {
5566      const {
5567        offset
5568      } = this._config;
5569      if (typeof offset === 'string') {
5570        return offset.split(',').map(value => Number.parseInt(value, 10));
5571      }
5572      if (typeof offset === 'function') {
5573        return popperData => offset(popperData, this._element);
5574      }
5575      return offset;
5576    }
5577    _resolvePossibleFunction(arg) {
5578      return execute(arg, [this._element]);
5579    }
5580    _getPopperConfig(attachment) {
5581      const defaultBsPopperConfig = {
5582        placement: attachment,
5583        modifiers: [{
5584          name: 'flip',
5585          options: {
5586            fallbackPlacements: this._config.fallbackPlacements
5587          }
5588        }, {
5589          name: 'offset',
5590          options: {
5591            offset: this._getOffset()
5592          }
5593        }, {
5594          name: 'preventOverflow',
5595          options: {
5596            boundary: this._config.boundary
5597          }
5598        }, {
5599          name: 'arrow',
5600          options: {
5601            element: `.${this.constructor.NAME}-arrow`
5602          }
5603        }, {
5604          name: 'preSetPlacement',
5605          enabled: true,
5606          phase: 'beforeMain',
5607          fn: data => {
5608            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
5609            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
5610            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
5611          }
5612        }]
5613      };
5614      return {
5615        ...defaultBsPopperConfig,
5616        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
5617      };
5618    }
5619    _setListeners() {
5620      const triggers = this._config.trigger.split(' ');
5621      for (const trigger of triggers) {
5622        if (trigger === 'click') {
5623          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
5624            const context = this._initializeOnDelegatedTarget(event);
5625            context.toggle();
5626          });
5627        } else if (trigger !== TRIGGER_MANUAL) {
5628          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
5629          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
5630          EventHandler.on(this._element, eventIn, this._config.selector, event => {
5631            const context = this._initializeOnDelegatedTarget(event);
5632            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
5633            context._enter();
5634          });
5635          EventHandler.on(this._element, eventOut, this._config.selector, event => {
5636            const context = this._initializeOnDelegatedTarget(event);
5637            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
5638            context._leave();
5639          });
5640        }
5641      }
5642      this._hideModalHandler = () => {
5643        if (this._element) {
5644          this.hide();
5645        }
5646      };
5647      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
5648    }
5649    _fixTitle() {
5650      const title = this._element.getAttribute('title');
5651      if (!title) {
5652        return;
5653      }
5654      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
5655        this._element.setAttribute('aria-label', title);
5656      }
5657      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
5658      this._element.removeAttribute('title');
5659    }
5660    _enter() {
5661      if (this._isShown() || this._isHovered) {
5662        this._isHovered = true;
5663        return;
5664      }
5665      this._isHovered = true;
5666      this._setTimeout(() => {
5667        if (this._isHovered) {
5668          this.show();
5669        }
5670      }, this._config.delay.show);
5671    }
5672    _leave() {
5673      if (this._isWithActiveTrigger()) {
5674        return;
5675      }
5676      this._isHovered = false;
vendor: 14,330 bytes, lines 5677-6134
5677      this._setTimeout(() => {
5678        if (!this._isHovered) {
5679          this.hide();
5680        }
5681      }, this._config.delay.hide);
5682    }
5683    _setTimeout(handler, timeout) {
5684      clearTimeout(this._timeout);
5685      this._timeout = setTimeout(handler, timeout);
5686    }
5687    _isWithActiveTrigger() {
5688      return Object.values(this._activeTrigger).includes(true);
5689    }
5690    _getConfig(config) {
5691      const dataAttributes = Manipulator.getDataAttributes(this._element);
5692      for (const dataAttribute of Object.keys(dataAttributes)) {
5693        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
5694          delete dataAttributes[dataAttribute];
5695        }
5696      }
5697      config = {
5698        ...dataAttributes,
5699        ...(typeof config === 'object' && config ? config : {})
5700      };
5701      config = this._mergeConfigObj(config);
5702      config = this._configAfterMerge(config);
5703      this._typeCheckConfig(config);
5704      return config;
5705    }
5706    _configAfterMerge(config) {
5707      config.container = config.container === false ? document.body : getElement(config.container);
5708      if (typeof config.delay === 'number') {
5709        config.delay = {
5710          show: config.delay,
5711          hide: config.delay
5712        };
5713      }
5714      if (typeof config.title === 'number') {
5715        config.title = config.title.toString();
5716      }
5717      if (typeof config.content === 'number') {
5718        config.content = config.content.toString();
5719      }
5720      return config;
5721    }
5722    _getDelegateConfig() {
5723      const config = {};
5724      for (const [key, value] of Object.entries(this._config)) {
5725        if (this.constructor.Default[key] !== value) {
5726          config[key] = value;
5727        }
5728      }
5729      config.selector = false;
5730      config.trigger = 'manual';
5731
5732      // In the future can be replaced with:
5733      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
5734      // `Object.fromEntries(keysWithDifferentValues)`
5735      return config;
5736    }
5737    _disposePopper() {
5738      if (this._popper) {
5739        this._popper.destroy();
5740        this._popper = null;
5741      }
5742      if (this.tip) {
5743        this.tip.remove();
5744        this.tip = null;
5745      }
5746    }
5747
5748    // Static
5749    static jQueryInterface(config) {
5750      return this.each(function () {
5751        const data = Tooltip.getOrCreateInstance(this, config);
5752        if (typeof config !== 'string') {
5753          return;
5754        }
5755        if (typeof data[config] === 'undefined') {
5756          throw new TypeError(`No method named "${config}"`);
5757        }
5758        data[config]();
5759      });
5760    }
5761  }
5762
5763  /**
5764   * jQuery
5765   */
5766
5767  defineJQueryPlugin(Tooltip);
5768
5769  /**
5770   * --------------------------------------------------------------------------
5771   * Bootstrap popover.js
5772   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5773   * --------------------------------------------------------------------------
5774   */
5775
5776  /**
5777   * Constants
5778   */
5779
5780  const NAME$3 = 'popover';
5781  const SELECTOR_TITLE = '.popover-header';
5782  const SELECTOR_CONTENT = '.popover-body';
5783  const Default$2 = {
5784    ...Tooltip.Default,
5785    content: '',
5786    offset: [0, 8],
5787    placement: 'right',
5788    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
5789    trigger: 'click'
5790  };
5791  const DefaultType$2 = {
5792    ...Tooltip.DefaultType,
5793    content: '(null|string|element|function)'
5794  };
5795
5796  /**
5797   * Class definition
5798   */
5799
5800  class Popover extends Tooltip {
5801    // Getters
5802    static get Default() {
5803      return Default$2;
5804    }
5805    static get DefaultType() {
5806      return DefaultType$2;
5807    }
5808    static get NAME() {
5809      return NAME$3;
5810    }
5811
5812    // Overrides
5813    _isWithContent() {
5814      return this._getTitle() || this._getContent();
5815    }
5816
5817    // Private
5818    _getContentForTemplate() {
5819      return {
5820        [SELECTOR_TITLE]: this._getTitle(),
5821        [SELECTOR_CONTENT]: this._getContent()
5822      };
5823    }
5824    _getContent() {
5825      return this._resolvePossibleFunction(this._config.content);
5826    }
5827
5828    // Static
5829    static jQueryInterface(config) {
5830      return this.each(function () {
5831        const data = Popover.getOrCreateInstance(this, config);
5832        if (typeof config !== 'string') {
5833          return;
5834        }
5835        if (typeof data[config] === 'undefined') {
5836          throw new TypeError(`No method named "${config}"`);
5837        }
5838        data[config]();
5839      });
5840    }
5841  }
5842
5843  /**
5844   * jQuery
5845   */
5846
5847  defineJQueryPlugin(Popover);
5848
5849  /**
5850   * --------------------------------------------------------------------------
5851   * Bootstrap scrollspy.js
5852   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5853   * --------------------------------------------------------------------------
5854   */
5855
5856  /**
5857   * Constants
5858   */
5859
5860  const NAME$2 = 'scrollspy';
5861  const DATA_KEY$2 = 'bs.scrollspy';
5862  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
5863  const DATA_API_KEY = '.data-api';
5864  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
5865  const EVENT_CLICK = `click${EVENT_KEY$2}`;
5866  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
5867  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
5868  const CLASS_NAME_ACTIVE$1 = 'active';
5869  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
5870  const SELECTOR_TARGET_LINKS = '[href]';
5871  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
5872  const SELECTOR_NAV_LINKS = '.nav-link';
5873  const SELECTOR_NAV_ITEMS = '.nav-item';
5874  const SELECTOR_LIST_ITEMS = '.list-group-item';
5875  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
5876  const SELECTOR_DROPDOWN = '.dropdown';
5877  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
5878  const Default$1 = {
5879    offset: null,
5880    // TODO: v6 @deprecated, keep it for backwards compatibility reasons
5881    rootMargin: '0px 0px -25%',
5882    smoothScroll: false,
5883    target: null,
5884    threshold: [0.1, 0.5, 1]
5885  };
5886  const DefaultType$1 = {
5887    offset: '(number|null)',
5888    // TODO v6 @deprecated, keep it for backwards compatibility reasons
5889    rootMargin: 'string',
5890    smoothScroll: 'boolean',
5891    target: 'element',
5892    threshold: 'array'
5893  };
5894
5895  /**
5896   * Class definition
5897   */
5898
5899  class ScrollSpy extends BaseComponent {
5900    constructor(element, config) {
5901      super(element, config);
5902
5903      // this._element is the observablesContainer and config.target the menu links wrapper
5904      this._targetLinks = new Map();
5905      this._observableSections = new Map();
5906      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
5907      this._activeTarget = null;
5908      this._observer = null;
5909      this._previousScrollData = {
5910        visibleEntryTop: 0,
5911        parentScrollTop: 0
5912      };
5913      this.refresh(); // initialize
5914    }
5915
5916    // Getters
5917    static get Default() {
5918      return Default$1;
5919    }
5920    static get DefaultType() {
5921      return DefaultType$1;
5922    }
5923    static get NAME() {
5924      return NAME$2;
5925    }
5926
5927    // Public
5928    refresh() {
5929      this._initializeTargetsAndObservables();
5930      this._maybeEnableSmoothScroll();
5931      if (this._observer) {
5932        this._observer.disconnect();
5933      } else {
5934        this._observer = this._getNewObserver();
5935      }
5936      for (const section of this._observableSections.values()) {
5937        this._observer.observe(section);
5938      }
5939    }
5940    dispose() {
5941      this._observer.disconnect();
5942      super.dispose();
5943    }
5944
5945    // Private
5946    _configAfterMerge(config) {
5947      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
5948      config.target = getElement(config.target) || document.body;
5949
5950      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
5951      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
5952      if (typeof config.threshold === 'string') {
5953        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
5954      }
5955      return config;
5956    }
5957    _maybeEnableSmoothScroll() {
5958      if (!this._config.smoothScroll) {
5959        return;
5960      }
5961
5962      // unregister any previous listeners
5963      EventHandler.off(this._config.target, EVENT_CLICK);
5964      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
5965        const observableSection = this._observableSections.get(event.target.hash);
5966        if (observableSection) {
5967          event.preventDefault();
5968          const root = this._rootElement || window;
5969          const height = observableSection.offsetTop - this._element.offsetTop;
5970          if (root.scrollTo) {
5971            root.scrollTo({
5972              top: height,
5973              behavior: 'smooth'
5974            });
5975            return;
5976          }
5977
5978          // Chrome 60 doesn't support `scrollTo`
5979          root.scrollTop = height;
5980        }
5981      });
5982    }
5983    _getNewObserver() {
5984      const options = {
5985        root: this._rootElement,
5986        threshold: this._config.threshold,
5987        rootMargin: this._config.rootMargin
5988      };
5989      return new IntersectionObserver(entries => this._observerCallback(entries), options);
5990    }
5991
5992    // The logic of selection
5993    _observerCallback(entries) {
5994      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
5995      const activate = entry => {
5996        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
5997        this._process(targetElement(entry));
5998      };
5999      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
6000      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
6001      this._previousScrollData.parentScrollTop = parentScrollTop;
6002      for (const entry of entries) {
6003        if (!entry.isIntersecting) {
6004          this._activeTarget = null;
6005          this._clearActiveClass(targetElement(entry));
6006          continue;
6007        }
6008        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
6009        // if we are scrolling down, pick the bigger offsetTop
6010        if (userScrollsDown && entryIsLowerThanPrevious) {
6011          activate(entry);
6012          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
6013          if (!parentScrollTop) {
6014            return;
6015          }
6016          continue;
6017        }
6018
6019        // if we are scrolling up, pick the smallest offsetTop
6020        if (!userScrollsDown && !entryIsLowerThanPrevious) {
6021          activate(entry);
6022        }
6023      }
6024    }
6025    _initializeTargetsAndObservables() {
6026      this._targetLinks = new Map();
6027      this._observableSections = new Map();
6028      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
6029      for (const anchor of targetLinks) {
6030        // ensure that the anchor has an id and is not disabled
6031        if (!anchor.hash || isDisabled(anchor)) {
6032          continue;
6033        }
6034        const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
6035
6036        // ensure that the observableSection exists & is visible
6037        if (isVisible(observableSection)) {
6038          this._targetLinks.set(anchor.hash, anchor);
6039          this._observableSections.set(anchor.hash, observableSection);
6040        }
6041      }
6042    }
6043    _process(target) {
6044      if (this._activeTarget === target) {
6045        return;
6046      }
6047      this._clearActiveClass(this._config.target);
6048      this._activeTarget = target;
6049      target.classList.add(CLASS_NAME_ACTIVE$1);
6050      this._activateParents(target);
6051      EventHandler.trigger(this._element, EVENT_ACTIVATE, {
6052        relatedTarget: target
6053      });
6054    }
6055    _activateParents(target) {
6056      // Activate dropdown parents
6057      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
6058        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
6059        return;
6060      }
6061      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
6062        // Set triggered links parents as active
6063        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6064        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
6065          item.classList.add(CLASS_NAME_ACTIVE$1);
6066        }
6067      }
6068    }
6069    _clearActiveClass(parent) {
6070      parent.classList.remove(CLASS_NAME_ACTIVE$1);
6071      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
6072      for (const node of activeNodes) {
6073        node.classList.remove(CLASS_NAME_ACTIVE$1);
6074      }
6075    }
6076
6077    // Static
6078    static jQueryInterface(config) {
6079      return this.each(function () {
6080        const data = ScrollSpy.getOrCreateInstance(this, config);
6081        if (typeof config !== 'string') {
6082          return;
6083        }
6084        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
6085          throw new TypeError(`No method named "${config}"`);
6086        }
6087        data[config]();
6088      });
6089    }
6090  }
6091
6092  /**
6093   * Data API implementation
6094   */
6095
6096  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
6097    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
6098      ScrollSpy.getOrCreateInstance(spy);
6099    }
6100  });
6101
6102  /**
6103   * jQuery
6104   */
6105
6106  defineJQueryPlugin(ScrollSpy);
6107
6108  /**
6109   * --------------------------------------------------------------------------
6110   * Bootstrap tab.js
6111   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6112   * --------------------------------------------------------------------------
6113   */
6114
6115  /**
6116   * Constants
6117   */
6118
6119  const NAME$1 = 'tab';
6120  const DATA_KEY$1 = 'bs.tab';
6121  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
6122  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
6123  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
6124  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
6125  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
6126  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
6127  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
6128  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
6129  const ARROW_LEFT_KEY = 'ArrowLeft';
6130  const ARROW_RIGHT_KEY = 'ArrowRight';
6131  const ARROW_UP_KEY = 'ArrowUp';
6132  const ARROW_DOWN_KEY = 'ArrowDown';
6133  const CLASS_NAME_ACTIVE = 'active';
6134  const CLASS_NAME_FADE$1 = 'fade';
vendor: 6,022 bytes, lines 6135-6291
6135  const CLASS_NAME_SHOW$1 = 'show';
6136  const CLASS_DROPDOWN = 'dropdown';
6137  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
6138  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
6139  const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
6140  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
6141  const SELECTOR_OUTER = '.nav-item, .list-group-item';
6142  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
6143  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
6144  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
6145  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
6146
6147  /**
6148   * Class definition
6149   */
6150
6151  class Tab extends BaseComponent {
6152    constructor(element) {
6153      super(element);
6154      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
6155      if (!this._parent) {
6156        return;
6157        // TODO: should throw exception in v6
6158        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
6159      }
6160
6161      // Set up initial aria attributes
6162      this._setInitialAttributes(this._parent, this._getChildren());
6163      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
6164    }
6165
6166    // Getters
6167    static get NAME() {
6168      return NAME$1;
6169    }
6170
6171    // Public
6172    show() {
6173      // Shows this elem and deactivate the active sibling if exists
6174      const innerElem = this._element;
6175      if (this._elemIsActive(innerElem)) {
6176        return;
6177      }
6178
6179      // Search for active tab on same parent to deactivate it
6180      const active = this._getActiveElem();
6181      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
6182        relatedTarget: innerElem
6183      }) : null;
6184      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
6185        relatedTarget: active
6186      });
6187      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
6188        return;
6189      }
6190      this._deactivate(active, innerElem);
6191      this._activate(innerElem, active);
6192    }
6193
6194    // Private
6195    _activate(element, relatedElem) {
6196      if (!element) {
6197        return;
6198      }
6199      element.classList.add(CLASS_NAME_ACTIVE);
6200      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
6201
6202      const complete = () => {
6203        if (element.getAttribute('role') !== 'tab') {
6204          element.classList.add(CLASS_NAME_SHOW$1);
6205          return;
6206        }
6207        element.removeAttribute('tabindex');
6208        element.setAttribute('aria-selected', true);
6209        this._toggleDropDown(element, true);
6210        EventHandler.trigger(element, EVENT_SHOWN$1, {
6211          relatedTarget: relatedElem
6212        });
6213      };
6214      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
6215    }
6216    _deactivate(element, relatedElem) {
6217      if (!element) {
6218        return;
6219      }
6220      element.classList.remove(CLASS_NAME_ACTIVE);
6221      element.blur();
6222      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
6223
6224      const complete = () => {
6225        if (element.getAttribute('role') !== 'tab') {
6226          element.classList.remove(CLASS_NAME_SHOW$1);
6227          return;
6228        }
6229        element.setAttribute('aria-selected', false);
6230        element.setAttribute('tabindex', '-1');
6231        this._toggleDropDown(element, false);
6232        EventHandler.trigger(element, EVENT_HIDDEN$1, {
6233          relatedTarget: relatedElem
6234        });
6235      };
6236      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
6237    }
6238    _keydown(event) {
6239      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
6240        return;
6241      }
6242      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
6243      event.preventDefault();
6244      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
6245      const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);
6246      if (nextActiveElement) {
6247        nextActiveElement.focus({
6248          preventScroll: true
6249        });
6250        Tab.getOrCreateInstance(nextActiveElement).show();
6251      }
6252    }
6253    _getChildren() {
6254      // collection of inner elements
6255      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
6256    }
6257    _getActiveElem() {
6258      return this._getChildren().find(child => this._elemIsActive(child)) || null;
6259    }
6260    _setInitialAttributes(parent, children) {
6261      this._setAttributeIfNotExists(parent, 'role', 'tablist');
6262      for (const child of children) {
6263        this._setInitialAttributesOnChild(child);
6264      }
6265    }
6266    _setInitialAttributesOnChild(child) {
6267      child = this._getInnerElement(child);
6268      const isActive = this._elemIsActive(child);
6269      const outerElem = this._getOuterElement(child);
6270      child.setAttribute('aria-selected', isActive);
6271      if (outerElem !== child) {
6272        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
6273      }
6274      if (!isActive) {
6275        child.setAttribute('tabindex', '-1');
6276      }
6277      this._setAttributeIfNotExists(child, 'role', 'tab');
6278
6279      // set attributes to the related panel too
6280      this._setInitialAttributesOnTargetPanel(child);
6281    }
6282    _setInitialAttributesOnTargetPanel(child) {
6283      const target = SelectorEngine.getElementFromSelector(child);
6284      if (!target) {
6285        return;
6286      }
6287      this._setAttributeIfNotExists(target, 'role', 'tabpanel');
6288      if (child.id) {
6289        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
6290      }
6291    }
vendor: 7,071 bytes, lines 6292-6531
6292    _toggleDropDown(element, open) {
6293      const outerElem = this._getOuterElement(element);
6294      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
6295        return;
6296      }
6297      const toggle = (selector, className) => {
6298        const element = SelectorEngine.findOne(selector, outerElem);
6299        if (element) {
6300          element.classList.toggle(className, open);
6301        }
6302      };
6303      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
6304      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
6305      outerElem.setAttribute('aria-expanded', open);
6306    }
6307    _setAttributeIfNotExists(element, attribute, value) {
6308      if (!element.hasAttribute(attribute)) {
6309        element.setAttribute(attribute, value);
6310      }
6311    }
6312    _elemIsActive(elem) {
6313      return elem.classList.contains(CLASS_NAME_ACTIVE);
6314    }
6315
6316    // Try to get the inner element (usually the .nav-link)
6317    _getInnerElement(elem) {
6318      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
6319    }
6320
6321    // Try to get the outer element (usually the .nav-item)
6322    _getOuterElement(elem) {
6323      return elem.closest(SELECTOR_OUTER) || elem;
6324    }
6325
6326    // Static
6327    static jQueryInterface(config) {
6328      return this.each(function () {
6329        const data = Tab.getOrCreateInstance(this);
6330        if (typeof config !== 'string') {
6331          return;
6332        }
6333        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
6334          throw new TypeError(`No method named "${config}"`);
6335        }
6336        data[config]();
6337      });
6338    }
6339  }
6340
6341  /**
6342   * Data API implementation
6343   */
6344
6345  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
6346    if (['A', 'AREA'].includes(this.tagName)) {
6347      event.preventDefault();
6348    }
6349    if (isDisabled(this)) {
6350      return;
6351    }
6352    Tab.getOrCreateInstance(this).show();
6353  });
6354
6355  /**
6356   * Initialize on focus
6357   */
6358  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
6359    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
6360      Tab.getOrCreateInstance(element);
6361    }
6362  });
6363  /**
6364   * jQuery
6365   */
6366
6367  defineJQueryPlugin(Tab);
6368
6369  /**
6370   * --------------------------------------------------------------------------
6371   * Bootstrap toast.js
6372   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6373   * --------------------------------------------------------------------------
6374   */
6375
6376  /**
6377   * Constants
6378   */
6379
6380  const NAME = 'toast';
6381  const DATA_KEY = 'bs.toast';
6382  const EVENT_KEY = `.${DATA_KEY}`;
6383  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
6384  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
6385  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
6386  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
6387  const EVENT_HIDE = `hide${EVENT_KEY}`;
6388  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
6389  const EVENT_SHOW = `show${EVENT_KEY}`;
6390  const EVENT_SHOWN = `shown${EVENT_KEY}`;
6391  const CLASS_NAME_FADE = 'fade';
6392  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
6393  const CLASS_NAME_SHOW = 'show';
6394  const CLASS_NAME_SHOWING = 'showing';
6395  const DefaultType = {
6396    animation: 'boolean',
6397    autohide: 'boolean',
6398    delay: 'number'
6399  };
6400  const Default = {
6401    animation: true,
6402    autohide: true,
6403    delay: 5000
6404  };
6405
6406  /**
6407   * Class definition
6408   */
6409
6410  class Toast extends BaseComponent {
6411    constructor(element, config) {
6412      super(element, config);
6413      this._timeout = null;
6414      this._hasMouseInteraction = false;
6415      this._hasKeyboardInteraction = false;
6416      this._setListeners();
6417    }
6418
6419    // Getters
6420    static get Default() {
6421      return Default;
6422    }
6423    static get DefaultType() {
6424      return DefaultType;
6425    }
6426    static get NAME() {
6427      return NAME;
6428    }
6429
6430    // Public
6431    show() {
6432      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
6433      if (showEvent.defaultPrevented) {
6434        return;
6435      }
6436      this._clearTimeout();
6437      if (this._config.animation) {
6438        this._element.classList.add(CLASS_NAME_FADE);
6439      }
6440      const complete = () => {
6441        this._element.classList.remove(CLASS_NAME_SHOWING);
6442        EventHandler.trigger(this._element, EVENT_SHOWN);
6443        this._maybeScheduleHide();
6444      };
6445      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
6446      reflow(this._element);
6447      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
6448      this._queueCallback(complete, this._element, this._config.animation);
6449    }
6450    hide() {
6451      if (!this.isShown()) {
6452        return;
6453      }
6454      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
6455      if (hideEvent.defaultPrevented) {
6456        return;
6457      }
6458      const complete = () => {
6459        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
6460        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
6461        EventHandler.trigger(this._element, EVENT_HIDDEN);
6462      };
6463      this._element.classList.add(CLASS_NAME_SHOWING);
6464      this._queueCallback(complete, this._element, this._config.animation);
6465    }
6466    dispose() {
6467      this._clearTimeout();
6468      if (this.isShown()) {
6469        this._element.classList.remove(CLASS_NAME_SHOW);
6470      }
6471      super.dispose();
6472    }
6473    isShown() {
6474      return this._element.classList.contains(CLASS_NAME_SHOW);
6475    }
6476
6477    // Private
6478
6479    _maybeScheduleHide() {
6480      if (!this._config.autohide) {
6481        return;
6482      }
6483      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
6484        return;
6485      }
6486      this._timeout = setTimeout(() => {
6487        this.hide();
6488      }, this._config.delay);
6489    }
6490    _onInteraction(event, isInteracting) {
6491      switch (event.type) {
6492        case 'mouseover':
6493        case 'mouseout':
6494          {
6495            this._hasMouseInteraction = isInteracting;
6496            break;
6497          }
6498        case 'focusin':
6499        case 'focusout':
6500          {
6501            this._hasKeyboardInteraction = isInteracting;
6502            break;
6503          }
6504      }
6505      if (isInteracting) {
6506        this._clearTimeout();
6507        return;
6508      }
6509      const nextElement = event.relatedTarget;
6510      if (this._element === nextElement || this._element.contains(nextElement)) {
6511        return;
6512      }
6513      this._maybeScheduleHide();
6514    }
6515    _setListeners() {
6516      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
6517      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
6518      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
6519      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
6520    }
6521    _clearTimeout() {
6522      clearTimeout(this._timeout);
6523      this._timeout = null;
6524    }
6525
6526    // Static
6527    static jQueryInterface(config) {
6528      return this.each(function () {
6529        const data = Toast.getOrCreateInstance(this, config);
6530        if (typeof config === 'string') {
6531          if (typeof data[config] === 'undefined') {
vendor: 23,393 bytes, lines 6532-6589
6532            throw new TypeError(`No method named "${config}"`);
6533          }
6534          data[config](this);
6535        }
6536      });
6537    }
6538  }
6539
6540  /**
6541   * Data API implementation
6542   */
6543
6544  enableDismissTrigger(Toast);
6545
6546  /**
6547   * jQuery
6548   */
6549
6550  defineJQueryPlugin(Toast);
6551
6552  /**
6553   * --------------------------------------------------------------------------
6554   * Bootstrap index.umd.js
6555   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6556   * --------------------------------------------------------------------------
6557   */
6558  const index_umd = {
6559    Alert,
6560    Button,
6561    Carousel,
6562    Collapse,
6563    Dropdown,
6564    Modal,
6565    Offcanvas,
6566    Popover,
6567    ScrollSpy,
6568    Tab,
6569    Toast,
6570    Tooltip
6571  };
6572
6573  return index_umd;
6574
6575}));
6576;
6577/**
6578 * Swiper 8.1.6
6579 * Most modern mobile touch slider and framework with hardware accelerated transitions
6580 * https://swiperjs.com
6581 *
6582 * Copyright 2014-2022 Vladimir Kharlampidi
6583 *
6584 * Released under the MIT License
6585 *
6586 * Released on: May 25, 2022
6587 */
6588
6589!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s,a){void 0===s&&(s={}),void 0===a&&(a={}),Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){"number"==typeof e?super(e):(super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this))}}function l(e){void 0===e&&(e=[]);const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("<li")&&(e="ul"),0===s.indexOf("<tr")&&(e="tbody"),0!==s.indexOf("<td")&&0!==s.indexOf("<th")||(e="tr"),0===s.indexOf("<tbody")&&(e="table"),0===s.indexOf("<option")&&(e="select");const t=i.createElement(e);t.innerHTML=s;for(let e=0;e<t.childNodes.length;e+=1)l.push(t.childNodes[e])}else l=function(e,t){if("string"!=typeof e)return[e];const s=[],a=t.querySelectorAll(e);for(let e=0;e<a.length;e+=1)s.push(a[e]);return s}(e.trim(),t||i)}else if(e.nodeType||e===s||e===i)l.push(e);else if(Array.isArray(e)){if(e instanceof n)return e;l=e}return new n(function(e){const t=[];for(let s=0;s<e.length;s+=1)-1===t.indexOf(e[s])&&t.push(e[s]);return t}(l))}d.fn=n.prototype;const c={addClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.add(...a)})),this},removeClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...a)})),this},hasClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return o(this,(e=>a.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));this.forEach((e=>{a.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s<this.length;s+=1)if(2===arguments.length)this[s].setAttribute(e,t);else for(const t in e)this[s][t]=e[t],this[s].setAttribute(t,e[t]);return this},removeAttr:function(e){for(let t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},transform:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transform=e;return this},transition:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transitionDuration="string"!=typeof e?`${e}ms`:e;return this},on:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];let[a,i,r,n]=t;function l(e){const t=e.target;if(!t)return;const s=e.target.dom7EventData||[];if(s.indexOf(e)<0&&s.unshift(e),d(t).is(i))r.apply(t,s);else{const e=d(t).parents();for(let t=0;t<e.length;t+=1)d(e[t]).is(i)&&r.apply(e[t],s)}}function o(e){const t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),r.apply(this,t)}"function"==typeof t[1]&&([a,r,n]=t,i=void 0),n||(n=!1);const c=a.split(" ");let p;for(let e=0;e<this.length;e+=1){const t=this[e];if(i)for(p=0;p<c.length;p+=1){const e=c[p];t.dom7LiveListeners||(t.dom7LiveListeners={}),t.dom7LiveListeners[e]||(t.dom7LiveListeners[e]=[]),t.dom7LiveListeners[e].push({listener:r,proxyListener:l}),t.addEventListener(e,l,n)}else for(p=0;p<c.length;p+=1){const e=c[p];t.dom7Listeners||(t.dom7Listeners={}),t.dom7Listeners[e]||(t.dom7Listeners[e]=[]),t.dom7Listeners[e].push({listener:r,proxyListener:o}),t.addEventListener(e,o,n)}}return this},off:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];let[a,i,r,n]=t;"function"==typeof t[1]&&([a,r,n]=t,i=void 0),n||(n=!1);const l=a.split(" ");for(let e=0;e<l.length;e+=1){const t=l[e];for(let e=0;e<this.length;e+=1){const s=this[e];let a;if(!i&&s.dom7Listeners?a=s.dom7Listeners[t]:i&&s.dom7LiveListeners&&(a=s.dom7LiveListeners[t]),a&&a.length)for(let e=a.length-1;e>=0;e-=1){const i=a[e];r&&i.listener===r||r&&i.listener&&i.listener.dom7proxy&&i.listener.dom7proxy===r?(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1)):r||(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1))}}}return this},trigger:function(){const e=r();for(var t=arguments.length,s=new Array(t),a=0;a<t;a++)s[a]=arguments[a];const i=s[0].split(" "),n=s[1];for(let t=0;t<i.length;t+=1){const a=i[t];for(let t=0;t<this.length;t+=1){const i=this[t];if(e.CustomEvent){const t=new e.CustomEvent(a,{detail:n,bubbles:!0,cancelable:!0});i.dom7EventData=s.filter(((e,t)=>t>0)),i.dispatchEvent(t),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a<this.length;a+=1)for(const t in e)this[a].style[t]=e[t];return this}if(this[0])return s.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(a=0;a<this.length;a+=1)this[a].style[e]=t;return this}return this},each:function(e){return e?(this.forEach(((t,s)=>{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(let t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){const t=r(),s=a(),i=this[0];let l,o;if(!i||void 0===e)return!1;if("string"==typeof e){if(i.matches)return i.matches(e);if(i.webkitMatchesSelector)return i.webkitMatchesSelector(e);if(i.msMatchesSelector)return i.msMatchesSelector(e);for(l=d(e),o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}if(e===s)return i===s;if(e===t)return i===t;if(e.nodeType||e instanceof n){for(l=e.nodeType?[e]:e,o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}return!1},index:function(){let e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;const t=this.length;if(e>t-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(){let e;const t=a();for(let s=0;s<arguments.length;s+=1){e=s<0||arguments.length<=s?void 0:arguments[s];for(let s=0;s<this.length;s+=1)if("string"==typeof e){const a=t.createElement("div");for(a.innerHTML=e;a.firstChild;)this[s].appendChild(a.firstChild)}else if(e instanceof n)for(let t=0;t<e.length;t+=1)this[s].appendChild(e[t]);else this[s].appendChild(e)}return this},prepend:function(e){const t=a();let s,i;for(s=0;s<this.length;s+=1)if("string"==typeof e){const a=t.createElement("div");for(a.innerHTML=e,i=a.childNodes.length-1;i>=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i<e.length;i+=1)this[s].insertBefore(e[i],this[s].childNodes[0]);else this[s].insertBefore(e,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s<this.length;s+=1)null!==this[s].parentNode&&(e?d(this[s].parentNode).is(e)&&t.push(this[s].parentNode):t.push(this[s].parentNode));return d(t)},parents:function(e){const t=[];for(let s=0;s<this.length;s+=1){let a=this[s].parentNode;for(;a;)e?d(a).is(e)&&t.push(a):t.push(a),a=a.parentNode}return d(t)},closest:function(e){let t=this;return void 0===e?d([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].querySelectorAll(e);for(let e=0;e<a.length;e+=1)t.push(a[e])}return d(t)},children:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].children;for(let s=0;s<a.length;s+=1)e&&!d(a[s]).is(e)||t.push(a[s])}return d(t)},filter:function(e){return d(o(this,e))},remove:function(){for(let e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}};function p(e,t){return void 0===t&&(t=0),setTimeout(e,t)}function u(){return Date.now()}function h(e,t){void 0===t&&(t="x");const s=r();let a,i,n;const l=function(e){const t=r();let s;return t.getComputedStyle&&(s=t.getComputedStyle(e,null)),!s&&e.currentStyle&&(s=e.currentStyle),s||(s=e.style),s}(e);return s.WebKitCSSMatrix?(i=l.transform||l.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(e){return"undefined"!=typeof window&&void 0!==window.HTMLElement?e instanceof HTMLElement:e&&(1===e.nodeType||11===e.nodeType)}function g(){const e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"];for(let s=1;s<arguments.length;s+=1){const a=s<0||arguments.length<=s?void 0:arguments[s];if(null!=a&&!f(a)){const s=Object.keys(Object(a)).filter((e=>t.indexOf(e)<0));for(let t=0,i=s.length;t<i;t+=1){const i=s[t],r=Object.getOwnPropertyDescriptor(a,i);void 0!==r&&r.enumerable&&(m(e[i])&&m(a[i])?a[i].__swiper__?e[i]=a[i]:g(e[i],a[i]):!m(e[i])&&m(a[i])?(e[i]={},a[i].__swiper__?e[i]=a[i]:g(e[i],a[i])):e[i]=a[i])}}}return e}function v(e,t,s){e.style.setProperty(t,s)}function w(e){let{swiper:t,targetPosition:s,side:a}=e;const i=r(),n=-t.translate;let l,o=null;const d=t.params.speed;t.wrapperEl.style.scrollSnapType="none",i.cancelAnimationFrame(t.cssModeFrameID);const c=s>n?"next":"prev",p=(e,t)=>"next"===c&&e>=t||"prev"===c&&e<=t,u=()=>{l=(new Date).getTime(),null===o&&(o=l);const e=Math.max(Math.min((l-o)/d,1),0),r=.5-Math.cos(e*Math.PI)/2;let c=n+r*(s-n);if(p(c,s)&&(c=s),t.wrapperEl.scrollTo({[a]:c}),p(c,s))return t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.scrollSnapType="",setTimeout((()=>{t.wrapperEl.style.overflow="",t.wrapperEl.scrollTo({[a]:c})})),void i.cancelAnimationFrame(t.cssModeFrameID);t.cssModeFrameID=i.requestAnimationFrame(u)};u()}let b,x,y;function E(){return b||(b=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),b}function T(e){return void 0===e&&(e={}),x||(x=function(e){let{userAgent:t}=void 0===e?{}:e;const s=E(),a=r(),i=a.navigator.platform,n=t||a.navigator.userAgent,l={ios:!1,android:!1},o=a.screen.width,d=a.screen.height,c=n.match(/(Android);?[\s\/]+([\d.]+)?/);let p=n.match(/(iPad).*OS\s([\d_]+)/);const u=n.match(/(iPod)(.*OS\s([\d_]+))?/),h=!p&&n.match(/(iPhone\sOS|iOS)\s([\d_]+)/),m="Win32"===i;let f="MacIntel"===i;return!p&&f&&s.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${o}x${d}`)>=0&&(p=n.match(/(Version)\/([\d.]+)/),p||(p=[0,1,"13_0_0"]),f=!1),c&&!m&&(l.os="android",l.android=!0),(p||h||u)&&(l.os="ios",l.ios=!0),l}(e)),x}function C(){return y||(y=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),y}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var $={on(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;function i(){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy;for(var s=arguments.length,r=new Array(s),n=0;n<s;n++)r[n]=arguments[n];t.apply(a,r)}return i.__emitterProxy=t,a.on(e,i,s)},onAny(e,t){const s=this;if(!s.eventsListeners||s.destroyed)return s;if("function"!=typeof e)return s;const a=t?"unshift":"push";return s.eventsAnyListeners.indexOf(e)<0&&s.eventsAnyListeners[a](e),s},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsAnyListeners)return t;const s=t.eventsAnyListeners.indexOf(e);return s>=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return!s.eventsListeners||s.destroyed?s:s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(){const e=this;if(!e.eventsListeners||e.destroyed)return e;if(!e.eventsListeners)return e;let t,s,a;for(var i=arguments.length,r=new Array(i),n=0;n<i;n++)r[n]=arguments[n];"string"==typeof r[0]||Array.isArray(r[0])?(t=r[0],s=r.slice(1,r.length),a=e):(t=r[0].events,s=r[0].data,a=r[0].context||e),s.unshift(a);return(Array.isArray(t)?t:t.split(" ")).forEach((t=>{e.eventsAnyListeners&&e.eventsAnyListeners.length&&e.eventsAnyListeners.forEach((e=>{e.apply(a,[t,...s])})),e.eventsListeners&&e.eventsListeners[t]&&e.eventsListeners[t].forEach((e=>{e.apply(a,s)}))})),e}};var S={updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let g=a.slidesOffsetAfter;"function"==typeof g&&(g=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,T=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(v(e.wrapperEl,"--swiper-centered-offset-before",""),v(e.wrapperEl,"--swiper-centered-offset-after",""));const C=a.grid&&a.grid.rows>1&&e.grid;let $;C&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i<p;i+=1){$=0;const n=c.eq(i);if(C&&e.grid.updateSlide(i,n,p,t),"none"!==n.css("display")){if("auto"===a.slidesPerView){S&&(c[i].style[t("width")]="");const r=getComputedStyle(n[0]),l=n[0].style.transform,o=n[0].style.webkitTransform;if(l&&(n[0].style.transform="none"),o&&(n[0].style.webkitTransform="none"),a.roundLengths)$=e.isHorizontal()?n.outerWidth(!0):n.outerHeight(!0);else{const e=s(r,"width"),t=s(r,"padding-left"),a=s(r,"padding-right"),i=s(r,"margin-left"),l=s(r,"margin-right"),o=r.getPropertyValue("box-sizing");if(o&&"border-box"===o)$=e+i+l;else{const{clientWidth:s,offsetWidth:r}=n[0];$=e+t+a+i+l+(r-s)}}l&&(n[0].style.transform=l),o&&(n[0].style.webkitTransform=o),a.roundLengths&&($=Math.floor($))}else $=(r-(a.slidesPerView-1)*x)/a.slidesPerView,a.roundLengths&&($=Math.floor($)),c[i]&&(c[i].style[t("width")]=`${$}px`);c[i]&&(c[i].swiperSlideSize=$),m.push($),a.centeredSlides?(y=y+$/2+E/2+x,0===E&&0!==i&&(y=y-r/2-x),0===i&&(y=y-r/2-x),Math.abs(y)<.001&&(y=0),a.roundLengths&&(y=Math.floor(y)),T%a.slidesPerGroup==0&&u.push(y),h.push(y)):(a.roundLengths&&(y=Math.floor(y)),(T-Math.min(e.params.slidesPerGroupSkip,T))%e.params.slidesPerGroup==0&&u.push(y),h.push(y),y=y+$+x),e.virtualSize+=$+x,E=$,T+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+g,n&&l&&("slide"===a.effect||"coverflow"===a.effect)&&i.css({width:`${e.virtualSize+a.spaceBetween}px`}),a.setWrapperSize&&i.css({[t("width")]:`${e.virtualSize+a.spaceBetween}px`}),C&&e.grid.updateWrapperSize($,u,t),!a.centeredSlides){const t=[];for(let s=0;s<u.length;s+=1){let i=u[s];a.roundLengths&&(i=Math.floor(i)),u[s]<=e.virtualSize-r&&t.push(i)}u=t,Math.floor(e.virtualSize-r)-Math.floor(u[u.length-1])>1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+g:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e<r){const t=(r-e)/2;u.forEach(((e,s)=>{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){v(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),v(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}if(p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset(),!(o||a.cssMode||"slide"!==a.effect&&"fade"!==a.effect)){const t=`${a.containerModifierClass}backface-hidden`,s=e.$el.hasClass(t);p<=a.maxBackfaceHiddenSlides?s||e.$el.addClass(t):s&&e.$el.removeClass(t)}},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||d([]))
vendor: 15,932 bytes, line 6589
6589.each((e=>{s.push(e)}));else for(i=0;i<Math.ceil(t.params.slidesPerView);i+=1){const e=t.activeIndex+i;if(e>t.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;i<s.length;i+=1)if(void 0!==s[i]){const e=s[i].offsetHeight;r=e>r?e:r}(r||0===r)&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s<t.length;s+=1)t[s].swiperSlideOffset=e.isHorizontal()?t[s].offsetLeft:t[s].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);const t=this,s=t.params,{slides:a,rtlTranslate:i,snapGrid:r}=t;if(0===a.length)return;void 0===a[0].swiperSlideOffset&&t.updateSlidesOffset();let n=-e;i&&(n=e),a.removeClass(s.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(let e=0;e<a.length;e+=1){const l=a[e];let o=l.swiperSlideOffset;s.cssMode&&s.centeredSlides&&(o-=a[0].swiperSlideOffset);const d=(n+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),c=(n-r[0]+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),p=-(n-o),u=p+t.slidesSizesGrid[e];(p>=0&&p<t.size-1||u>1&&u<=t.size||p<=0&&u>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),l.progress=i?-d:d,l.originalProgress=i?-c:c}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e<a.length;e+=1)void 0!==a[e+1]?s>=a[e]&&s<a[e+1]-(a[e+1]-a[e])/2?c=e:s>=a[e]&&s<a[e+1]&&(c=e+1):s>=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;e<t.slides.length;e+=1)if(t.slides[e]===a){r=!0,i=e;break}if(!a||!r)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(d(a).attr("data-swiper-slide-index"),10):t.clickedIndex=i,s.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}};var M={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");const{params:t,rtlTranslate:s,translate:a,$wrapperEl:i}=this;if(t.virtualTranslate)return s?-a:a;if(t.cssMode)return a;let r=h(i[0],e);return s&&(r=-r),r||0},setTranslate:function(e,t){const s=this,{rtlTranslate:a,params:i,$wrapperEl:r,wrapperEl:n,progress:l}=s;let o,d=0,c=0;s.isHorizontal()?d=a?-e:e:c=e,i.roundLengths&&(d=Math.floor(d),c=Math.floor(c)),i.cssMode?n[s.isHorizontal()?"scrollLeft":"scrollTop"]=s.isHorizontal()?-d:-c:i.virtualTranslate||r.transform(`translate3d(${d}px, ${c}px, 0px)`),s.previousTranslate=s.translate,s.translate=s.isHorizontal()?d:c;const p=s.maxTranslate()-s.minTranslate();o=0===p?0:(e-s.minTranslate())/p,o!==l&&s.updateProgress(e),s.emit("setTranslate",s.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e,t,s,a,i){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),void 0===a&&(a=!0);const r=this,{params:n,wrapperEl:l}=r;if(r.animating&&n.preventInteractionOnTransition)return!1;const o=r.minTranslate(),d=r.maxTranslate();let c;if(c=a&&e>o?o:a&&e<d?d:e,r.updateProgress(c),n.cssMode){const e=r.isHorizontal();if(0===t)l[e?"scrollLeft":"scrollTop"]=-c;else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:-c,side:e?"left":"top"}),!0;l.scrollTo({[e?"left":"top"]:-c,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionEnd"))):(r.setTransition(t),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionStart")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,s&&r.emit("transitionEnd"))}),r.$wrapperEl[0].addEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd))),!0}};function P(e){let{swiper:t,runCallbacks:s,direction:a,step:i}=e;const{activeIndex:r,previousIndex:n}=t;let l=a;if(l||(l=r>n?"next":r<n?"prev":"reset"),t.emit(`transition${i}`),s&&r!==n){if("reset"===l)return void t.emit(`slideResetTransition${i}`);t.emit(`slideChangeTransition${i}`),"next"===l?t.emit(`slideNextTransition${i}`):t.emit(`slidePrevTransition${i}`)}}var k={slideTo:function(e,t,s,a,i){if(void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),"number"!=typeof e&&"string"!=typeof e)throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.`);if("string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const r=this;let n=e;n<0&&(n=0);const{params:l,snapGrid:o,slidesGrid:d,previousIndex:c,activeIndex:p,rtlTranslate:u,wrapperEl:h,enabled:m}=r;if(r.animating&&l.preventInteractionOnTransition||!m&&!a&&!i)return!1;const f=Math.min(r.params.slidesPerGroupSkip,n);let g=f+Math.floor((n-f)/r.params.slidesPerGroup);g>=o.length&&(g=o.length-1),(p||l.initialSlide||0)===(c||0)&&s&&r.emit("beforeSlideChangeStart");const v=-o[g];if(r.updateProgress(v),l.normalizeSlideIndex)for(let e=0;e<d.length;e+=1){const t=-Math.floor(100*v),s=Math.floor(100*d[e]),a=Math.floor(100*d[e+1]);void 0!==d[e+1]?t>=s&&t<a-(a-s)/2?n=e:t>=s&&t<a&&(n=e+1):t>=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&v<r.translate&&v<r.minTranslate())return!1;if(!r.allowSlidePrev&&v>r.translate&&v>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(b=n>p?"next":n<p?"prev":"reset",u&&-v===r.translate||!u&&v===r.translate)return r.updateActiveIndex(n),l.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==l.effect&&r.setTranslate(v),"reset"!==b&&(r.transitionStart(s,b),r.transitionEnd(s,b)),!1;if(l.cssMode){const e=r.isHorizontal(),s=u?v:-v;if(0===t){const t=r.virtual&&r.params.virtual.enabled;t&&(r.wrapperEl.style.scrollSnapType="none",r._immediateVirtual=!0),h[e?"scrollLeft":"scrollTop"]=s,t&&requestAnimationFrame((()=>{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return r.setTransition(t),r.setTranslate(v),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),0===t?r.transitionEnd(s,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,t,s,a){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0);const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndex<n.slidesPerGroupSkip?1:l;if(n.loop){if(i&&n.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}return n.rewind&&a.isEnd?a.slideTo(0,e,t,s):a.slideTo(a.activeIndex+o,e,t,s)},slidePrev:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{params:i,animating:r,snapGrid:n,slidesGrid:l,rtlTranslate:o,enabled:d}=a;if(!d)return a;if(i.loop){if(r&&i.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}function c(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=c(o?a.translate:-a.translate),u=n.map((e=>c(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;if(void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),i.rewind&&a.isBeginning){const i=a.params.virtual&&a.params.virtual.enabled&&a.virtual?a.virtual.slides.length-1:a.slides.length-1;return a.slideTo(i,e,t,s)}return a.slideTo(m,e,t,s)},slideReset:function(e,t,s){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e,t,s,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===a&&(a=.5);const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?r<e.loopedSlides-a/2||r>e.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}};var z={loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e,r=i.children().length>0?d(i.children()[0].parentNode):i;r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let n=r.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-n.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;a<e;a+=1){const e=d(t.createElement("div")).addClass(`${s.slideClass} ${s.slideBlankClass}`);r.append(e)}n=r.children(`.${s.slideClass}`)}}"auto"!==s.slidesPerView||s.loopedSlides||(s.loopedSlides=n.length),e.loopedSlides=Math.ceil(parseFloat(s.loopedSlides||s.slidesPerView,10)),e.loopedSlides+=s.loopAdditionalSlides,e.loopedSlides>n.length&&(e.loopedSlides=n.length);const l=[],o=[];n.each(((t,s)=>{const a=d(t);s<e.loopedSlides&&o.push(t),s<n.length&&s>=n.length-e.loopedSlides&&l.push(t),a.attr("data-swiper-slide-index",s)}));for(let e=0;e<o.length;e+=1)r.append(d(o[e].cloneNode(!0)).addClass(s.slideDuplicateClass));for(let e=l.length-1;e>=0;e-=1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t<a){o=s.length-3*a+t,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}else if(t>=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}};function O(e){const t=this,s=a(),i=r(),n=t.touchEventsData,{params:l,touches:o,enabled:c}=t;if(!c)return;if(t.animating&&l.preventInteractionOnTransition)return;!t.animating&&l.cssMode&&l.loop&&t.loopFix();let p=e;p.originalEvent&&(p=p.originalEvent);let h=d(p.target);if("wrapper"===l.touchEventsTarget&&!h.closest(t.wrapperEl).length)return;if(n.isTouchEvent="touchstart"===p.type,!n.isTouchEvent&&"which"in p&&3===p.which)return;if(!n.isTouchEvent&&"button"in p&&p.button>0)return;if(n.isTouched&&n.isMoved)return;!!l.noSwipingClass&&""!==l.noSwipingClass&&p.target&&p.target.shadowRoot&&e.path&&e.path[0]&&(h=d(e.path[0]));const m=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(f?function(e,t){return void 0===t&&(t=this),function t(s){
vendor: 4,597 bytes, line 6589
6589if(!s||s===a()||s===r())return null;s.assignedSlot&&(s=s.assignedSlot);const i=s.closest(e);return i||s.getRootNode?i||t(s.getRootNode().host):null}(t)}(m,h[0]):h.closest(m)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const g=o.currentX,v=o.currentY,w=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,b=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(w&&(g<=b||g>=i.innerWidth-b)){if("prevent"!==w)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=g,o.startY=v,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1,"SELECT"===h[0].nodeName&&(n.isTouched=!1)),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.params.freeMode&&t.params.freeMode.enabled&&t.freeMode&&t.animating&&!l.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",p)}function L(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return d(c.target).is(i.focusableElements)||(s.allowClick=!1),void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(m<n.startY&&s.translate<=s.maxTranslate()||m>n.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(h<n.startX&&s.translate<=s.maxTranslate()||h>n.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)<s.params.threshold)return;if(void 0===i.isScrolling){let e;s.isHorizontal()&&n.currentY===n.startY||s.isVertical()&&n.currentX===n.startX?i.isScrolling=!1:f*f+g*g>=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslate<s.maxTranslate()&&(w=!1,r.resistance&&(i.currentTranslate=s.maxTranslate()+1-(s.maxTranslate()-i.startTranslate-v)**b)),w&&(c.preventedByNestedSwiper=!0),!s.allowSlideNext&&"next"===s.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!s.allowSlidePrev&&"prev"===s.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);
vendor: 28,976 bytes, line 6589
6589if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function I(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick){const e=o.path||o.composedPath&&o.composedPath();t.updateClickedSlide(e&&e[0]||o.target),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)}if(s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e<n.length;e+=e<a.slidesPerGroupSkip?1:a.slidesPerGroup){const t=e<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;void 0!==n[e+t]?h>=n[e]&&h<n[e+t]&&(m=e,f=n[e+t]-n[e]):h>=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}let g=null,v=null;a.rewind&&(t.isBeginning?v=t.params.virtual&&t.params.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(g=0));const w=(h-n[m])/f,b=m<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;if(c>a.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(w>=a.longSwipesRatio?t.slideTo(a.rewind&&t.isEnd?g:m+b):t.slideTo(m)),"prev"===t.swipeDirection&&(w>1-a.longSwipesRatio?t.slideTo(m+b):null!==v&&w<0&&Math.abs(w)>a.longSwipesRatio?t.slideTo(v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+b):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(null!==g?g:m+b),"prev"===t.swipeDirection&&t.slideTo(null!==v?v:m))}}function A(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function D(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function G(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let N=!1;function B(){}const H=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",A,!0):e[u]("observerUpdate",A,!0)};var X={attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=O.bind(e),e.onTouchMove=L.bind(e),e.onTouchEnd=I.bind(e),s.cssMode&&(e.onScroll=G.bind(e)),e.onClick=D.bind(e),i.touch&&!N&&(t.addEventListener("touchstart",B),N=!0),H(e,"on")},detachEvents:function(){H(this,"off")}};const Y=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var R={addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides},{"watch-progress":s.watchSlidesProgress}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}};var W={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function j(e,t){return function(s){void 0===s&&(s={});const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),g(t,s)):g(t,s)):g(t,s)}}const _={eventsEmitter:$,update:S,translate:M,transition:{setTransition:function(e,t){const s=this;s.params.cssMode||s.$wrapperEl.transition(e),s.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;a.cssMode||(a.autoHeight&&s.updateAutoHeight(),P({swiper:s,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;s.animating=!1,a.cssMode||(s.setTransition(0),P({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:k,loop:z,grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:X,breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=Y(e,i),c=Y(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses());const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),g(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t,s){if(void 0===t&&(t="window"),!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;e<l.length;e+=1){const{point:r,value:n}=l[e];"window"===t?i.matchMedia(`(min-width: ${n}px)`).matches&&(a=r):n<=s.clientWidth&&(a=r)}return a||"max"}},checkOverflow:{checkOverflow:function(){const e=this,{isLocked:t,params:s}=e,{slidesOffsetBefore:a}=s;if(a){const t=e.slides.length-1,s=e.slidesGrid[t]+e.slidesSizesGrid[t]+2*a;e.isLocked=e.size>s}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:R,images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s<e.imagesToLoad.length;s+=1){const a=e.imagesToLoad[s];e.loadImage(a,a.currentSrc||a.getAttribute("src"),a.srcset||a.getAttribute("srcset"),a.sizes||a.getAttribute("sizes"),!0,t)}}}},q={};class V{constructor(){let e,t;for(var s=arguments.length,a=new Array(s),i=0;i<s;i++)a[i]=arguments[i];if(1===a.length&&a[0].constructor&&"Object"===Object.prototype.toString.call(a[0]).slice(8,-1)?t=a[0]:[e,t]=a,t||(t={}),t=g({},t),e&&!t.el&&(t.el=e),t.el&&d(t.el).length>1){const e=[];return d(t.el).each((s=>{const a=g({},t,{el:s});e.push(new V(a))})),e}const r=this;r.__swiper__=!0,r.support=E(),r.device=T({userAgent:t.userAgent}),r.browser=C(),r.eventsListeners={},r.eventsAnyListeners=[],r.modules=[...r.__modules__],t.modules&&Array.isArray(t.modules)&&r.modules.push(...t.modules);const n={};r.modules.forEach((e=>{e({swiper:r,extendParams:j(t,n),on:r.on.bind(r),once:r.once.bind(r),off:r.off.bind(r),emit:r.emit.bind(r)})}));const l=g({},W,n);return r.params=g({},l,q,t),r.originalParams=g({},r.params),r.passedParams=g({},t),r.params&&r.params.on&&Object.keys(r.params.on).forEach((e=>{r.on(e,r.params.on[e])})),r.params&&r.params.onAny&&r.onAny(r.params.onAny),r.$=d,Object.assign(r,{enabled:r.params.enabled,el:e,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===r.params.direction,isVertical:()=>"vertical"===r.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return r.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},r.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},r.support.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:r.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.emit("_swiper"),r.params.init&&r.init(),r}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e,t){void 0===e&&(e="current"),void 0===t&&(t=!1);const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;s<a.length;s+=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e<a.length;e+=1){(t?i[e]+r[e]-i[l]<n:i[e]-i[l]<n)&&(o+=1)}else for(let e=l-1;e>=0;e-=1){i[l]-i[e]<n&&(o+=1)}return o}update(){const e=this;if(!e||e.destroyed)return;const{snapGrid:t,params:s}=e;function a(){const t=e.rtlTranslate?-1*e.translate:e.translate,s=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(s),e.updateActiveIndex(),e.updateSlidesClasses()}let i;s.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode&&e.params.freeMode.enabled?(a(),e.params.autoHeight&&e.updateAutoHeight()):(i=("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t){void 0===t&&(t=!0);const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children?s.children(i()):d(s).children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){g(q,e)}static get extendedDefaults(){return q}static get defaults(){return W}static installModule(e){V.prototype.__modules__||(V.prototype.__modules__=[]);const t=V.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>V.installModule(e))),V):(V.installModule(e),V)}}function F(e,t,s,i){const r=a();return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function U(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function K(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.append(e[t]);else s.append(e);a.loop&&t.loopCreate(),a.observer||t.update()}function Z(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;s.loop&&t.loopDestroy();let r=i+1;if("object"==typeof e&&"length"in e){for(let t=0;t<e.length;t+=1)e[t]&&a.prepend(e[t]);r=i+e.length}else a.prepend(e);s.loop&&t.loopCreate(),s.observer||t.update(),t.slideTo(r,0,!1)}function Q(e,t){const s=this,{$wrapperEl:a,params:i,activeIndex:r}=s;let n=r;i.loop&&(n-=s.loopedSlides,s.loopDestroy(),s.slides=a.children(`.${i.slideClass}`));const l=s.slides.length;if(e<=0)return void s.prependSlide(t);if(e>=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;e<t.length;e+=1)t[e]&&a.append(t[e]);o=n>e?n+t.length:n}else a.append(t);for(let e=0;e<d.length;e+=1)a.append(d[e]);i.loop&&s.loopCreate(),i.observer||s.update(),i.loop?s.slideTo(o+s.loopedSlides,0,!1):s.slideTo(o,0,!1)}function J(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;let r=i;s.loop&&(r-=t.loopedSlides,t.loopDestroy(),t.slides=a.children(`.${s.slideClass}`));let n,l=r;if("object"==typeof e&&"length"in e){for(let s=0;s<e.length;s+=1)n=e[s],t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1);l=Math.max(l,0)}else n=e,t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1),l=Math.max(l,0);s.loop&&t.loopCreate(),s.observer||t.update(),s.loop?t.slideTo(l+t.loopedSlides,0,!1):t.slideTo(l,0,!1)}function ee(){const e=this,t=[];for(let s=0;s<e.slides.length;s+=1)t.push(s);e.removeSlide(t)}function te(e){const{effect:t,swiper:s,on:a,setTranslate:i,setTransition:r,overwriteParams:n,perspective:l,recreateShadows:o,getEffectParams:d}=e;let c;a("beforeInit",(()=>{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)})),a("transitionEnd",(()=>{if(s.params.effect===t&&o){if(!d||!d().slideShadows)return;s.slides.each((e=>{s.$(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").remove()})),o()}})),a("virtualUpdate",(()=>{s.params.effect===t&&(s.slides.length||(c=!0),requestAnimationFrame((()=>{c&&s.slides&&s.slides.length&&(i(),c=!1)})))}))}function se(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function ae(e){let{swiper:t,duration:s,transformEl:a,allSlides:i}=e;const{slides:r,activeIndex:n,$wrapperEl:l}=t;if(t.params.virtualTranslate&&0!==s){let e,s=!1;e=i?a?r.find(a):r:a?r.eq(n).find(a):r.eq(n),e.transitionEnd((()=>{if(s)return;if(!t||t.destroyed)return;s=!0,t.animating=!1;const e=["webkitTransitionEnd","transitionend"];for(let t=0;t<e.length;t+=1)l.trigger(e[t])}))}}function ie(e,t,s){const a="swiper-slide-shadow"+(s?`-${s}`:""),i=e.transformEl?t.find(e.transformEl):t;let r=i.children(`.${a}`);return r.length||(r=d(`<div class="swiper-slide-shadow${s?`-${s}`:""}"></div>`),i.append(r)),r}Object.keys(_).forEach((e=>{Object.keys(_[e]).forEach((t=>{V.prototype[t]=_[e][t]}))})),V.use([function(e){let{swiper:t,on:s,emit:a}=e;const i=r();let n=null,l=null;const o=()=>{t&&!t.destroyed&&t.initialized&&(a("beforeResize"),a("resize"))},d=()=>{t&&!t.destroyed&&t.initialized&&a("orientationchange")};s("init",(()=>{t.params.resizeObserver&&void 0!==i.ResizeObserver?t&&!t.destroyed&&t.initialized&&(n=new ResizeObserver((e=>{l=i.requestAnimationFrame((()=>{const{width:s,height:a}=t;let i=s,r=a;e.forEach((e=>{let{contentBoxSize:s,contentRect:a,target:n}=e;n&&n!==t.el||(i=a?a.width:(s[0]||s).inlineSize,r=a?a.height:(s[0]||s).blockSize)})),i===s&&r===a||o()}))})),n.observe(t.el)):(i.addEventListener("resize",o),i.addEventListener("orientationchange",d))})),s("destroy",(()=>{l&&i.cancelAnimationFrame(l),n&&n.unobserve&&t.el&&(n.unobserve(t.el),n=null),i.removeEventListener("resize",o),i.removeEventListener("orientationchange",d)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=[],l=r(),o=function(e,t){void 0===t&&(t={});const s=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(1===e.length)return void i("observerUpdate",e[0]);const t=function(){i("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(t):l.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),n.push(s)};s({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(t.params.observer){if(t.params.observeParents){const e=t.$el.parents();for(let t=0;t<e.length;t+=1)o(e[t])}o(t.$el[0],{childList:t.params.observeSlideChildren}),o(t.$wrapperEl[0],{attributes:!1})}})),a("destroy",(()=>{n.forEach((e=>{e.disconnect()})),n.splice(0,n.length)}))}]);const re=[function(e){let t,{swiper:s,extendParams:a,on:i,emit:r}=e;function n(e,t){const a=s.params.virtual;if(a.cache&&s.virtual.cache[t])return s.virtual.cache[t];const i=a.renderSlide?d(a.renderSlide.call(s,e,t)):d(`<div class="${s.params.slideClass}" data-swiper-slide-index="${t}">${e}</div>`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",t),a.cache&&(s.virtual.cache[t]=i),i}function l(e){const{slidesPerView:t,slidesPerGroup:a,centeredSlides:i}=s.params,{addSlidesBefore:l,addSlidesAfter:o}=s.params.virtual,{from:d,to:c,slides:p,slidesGrid:u,offset:h}=s.virtual;s.params.cssMode||s.updateActiveIndex();const m=s.activeIndex||0;let f,g,v;f=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",i?(g=Math.floor(t/2)+a+o,v=Math.floor(t/2)+a+l):(g=t+(a-1)+o,v=a+l);const w=Math.max((m||0)-v,0),b=Math.min((m||0)+g,p.length-1),x=(s.slidesGrid[w]||0)-(s.slidesGrid[0]||0);function y(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),s.lazy&&s.params.lazy.enabled&&s.lazy.load(),r("virtualUpdate")}if(Object.assign(s.virtual,{from:w,to:b,offset:x,slidesGrid:s.slidesGrid}),d===w&&c===b&&!e)return s.slidesGrid!==u&&x!==h&&s.slides.css(f,`${x}px`),s.updateProgress(),void r("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:x,from:w,to:b,slides:function(){const e=[];for(let t=w;t<=b;t+=1)e.push(p[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?y():r("virtualUpdate"));const E=[],T=[];if(e)s.$wrapperEl.find(`.${s.params.slideClass}`).remove();else for(let e=d;e<=c;e+=1)(e<w||e>b)&&s.$wrapperEl.find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`).remove();for(let t=0;t<p.length;t+=1)t>=w&&t<=b&&(void 0===c||e?T.push(t):(t>c&&T.push(t),t<d&&E.push(t)));T.forEach((e=>{s.$wrapperEl.append(n(p[e],e))})),E.sort(((e,t)=>t-e)).forEach((e=>{s.$wrapperEl.prepend(n(p[e],e))})),s.$wrapperEl.children(".swiper-slide").css(f,`${x}px`),y()}a({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),s.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},i("beforeInit",(()=>{s.params.virtual.enabled&&(s.virtual.slides=s.params.virtual.slides,s.classNames.push(`${s.params.containerModifierClass}virtual`),s.params.watchSlidesProgress=!0,s.originalParams.watchSlidesProgress=!0,s.params.initialSlide||l())})),i("setTranslate",(()=>{s.params.virtual.enabled&&(s.params.cssMode&&!s._immediateVirtual?(clearTimeout(t),t=setTimeout((()=>{l()}),100)):l())})),i("init update resize",(()=>{s.params.virtual.enabled&&s.params.cssMode&&v(s.wrapperEl,"--swiper-virtual-size",`${s.virtualSize}px`)})),Object.assign(s.virtual,{appendSlide:function(e){if("object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.virtual.slides.push(e[t]);else s.virtual.slides.push(e);l(!0)},prependSlide:function(e){const t=s.activeIndex;let a=t+1,i=1;if(Array.isArray(e)){for(let t=0;t<e.length;t+=1)e[t]&&s.virtual.slides.unshift(e[t]);a=t+e.length,i=e.length}else s.virtual.slides.unshift(e);if(s.params.virtual.cache){const e=s.virtual.cache,t={};Object.keys(e).forEach((s=>{const a=e[s],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),t[parseInt(s,10)+i]=a})),s.virtual.cache=t}l(!0),s.slideTo(a,0)},removeSlide:function(e){if(null==e)return;let t=s.activeIndex;if(Array.isArray(e))for(let a=e.length-1;a>=0;a-=1)s.virtual.slides.splice(e[a],1),s.params.virtual.cache&&delete s.virtual.cache[e[a]],e[a]<t&&(t-=1),t=Math.max(t,0);else s.virtual.slides.splice(e,1),s.params.virtual.cache&&delete s.virtual.cache[e],e<t&&(t-=1),t=Math.max(t,0);l(!0),s.slideTo(t,0)},removeAllSlides:function(){s.virtual.slides=[],s.params.virtual.cache&&(s.virtual.cache={}),l(!0),s.slideTo(0,0)},update:l
vendor: 13,848 bytes, line 6589
6589})},function(e){let{swiper:t,extendParams:s,on:i,emit:n}=e;const l=a(),o=r();function c(e){if(!t.enabled)return;const{rtlTranslate:s}=t;let a=e;a.originalEvent&&(a=a.originalEvent);const i=a.keyCode||a.charCode,r=t.params.keyboard.pageUpDown,d=r&&33===i,c=r&&34===i,p=37===i,u=39===i,h=38===i,m=40===i;if(!t.allowSlideNext&&(t.isHorizontal()&&u||t.isVertical()&&m||c))return!1;if(!t.allowSlidePrev&&(t.isHorizontal()&&p||t.isVertical()&&h||d))return!1;if(!(a.shiftKey||a.altKey||a.ctrlKey||a.metaKey||l.activeElement&&l.activeElement.nodeName&&("input"===l.activeElement.nodeName.toLowerCase()||"textarea"===l.activeElement.nodeName.toLowerCase()))){if(t.params.keyboard.onlyInViewport&&(d||c||p||u||h||m)){let e=!1;if(t.$el.parents(`.${t.params.slideClass}`).length>0&&0===t.$el.parents(`.${t.params.slideActiveClass}`).length)return;const a=t.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=o.innerWidth,l=o.innerHeight,d=t.$el.offset();s&&(d.left-=t.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let t=0;t<c.length;t+=1){const s=c[t];if(s[0]>=0&&s[0]<=n&&s[1]>=0&&s[1]<=l){if(0===s[0]&&0===s[1])continue;e=!0}}if(!e)return}t.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&t.slideNext(),((d||p)&&!s||(c||u)&&s)&&t.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&t.slideNext(),(d||h)&&t.slidePrev()),n("keyPress",i)}}function p(){t.keyboard.enabled||(d(l).on("keydown",c),t.keyboard.enabled=!0)}function u(){t.keyboard.enabled&&(d(l).off("keydown",c),t.keyboard.enabled=!1)}t.keyboard={enabled:!1},s({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),i("init",(()=>{t.params.keyboard.enabled&&p()})),i("destroy",(()=>{t.keyboard.enabled&&u()})),Object.assign(t.keyboard,{enable:p,disable:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();let l;s({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),t.mousewheel={enabled:!1};let o,c=u();const h=[];function m(){t.enabled&&(t.mouseEntered=!0)}function f(){t.enabled&&(t.mouseEntered=!1)}function g(e){return!(t.params.mousewheel.thresholdDelta&&e.delta<t.params.mousewheel.thresholdDelta)&&(!(t.params.mousewheel.thresholdTime&&u()-c<t.params.mousewheel.thresholdTime)&&(e.delta>=6&&u()-c<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),i("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),i("scroll",e.raw)),c=(new n.Date).getTime(),!1)))}function v(e){let s=e,a=!0;if(!t.enabled)return;const r=t.params.mousewheel;t.params.cssMode&&s.preventDefault();let n=t.$el;if("container"!==t.params.mousewheel.eventsTarget&&(n=d(t.params.mousewheel.eventsTarget)),!t.mouseEntered&&!n[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let c=0;const m=t.rtlTranslate?-1:1,f=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(t.isHorizontal()){if(!(Math.abs(f.pixelX)>Math.abs(f.pixelY)))return!0;c=-f.pixelX*m}else{if(!(Math.abs(f.pixelY)>Math.abs(f.pixelX)))return!0;c=-f.pixelY}else c=Math.abs(f.pixelX)>Math.abs(f.pixelY)?-f.pixelX*m:-f.pixelY;if(0===c)return!0;r.invert&&(c=-c);let v=t.getTranslate()+c*r.sensitivity;if(v>=t.minTranslate()&&(v=t.minTranslate()),v<=t.maxTranslate()&&(v=t.maxTranslate()),a=!!t.params.loop||!(v===t.minTranslate()||v===t.maxTranslate()),a&&t.params.nested&&s.stopPropagation(),t.params.freeMode&&t.params.freeMode.enabled){const e={time:u(),delta:Math.abs(c),direction:Math.sign(c)},a=o&&e.time<o.time+500&&e.delta<=o.delta&&e.direction===o.direction;if(!a){o=void 0,t.params.loop&&t.loopFix();let n=t.getTranslate()+c*r.sensitivity;const d=t.isBeginning,u=t.isEnd;if(n>=t.minTranslate()&&(n=t.minTranslate()),n<=t.maxTranslate()&&(n=t.maxTranslate()),t.setTransition(0),t.setTranslate(n),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses(),(!d&&t.isBeginning||!u&&t.isEnd)&&t.updateSlidesClasses(),t.params.freeMode.sticky){clearTimeout(l),l=void 0,h.length>=15&&h.shift();const s=h.length?h[h.length-1]:void 0,a=h[0];if(h.push(e),s&&(e.delta>s.delta||e.direction!==s.direction))h.splice(0);else if(h.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const s=c>0?.8:.2;o=e,h.splice(0),l=p((()=>{t.slideToClosest(t.params.speed,!0,void 0,s)}),0)}l||(l=p((()=>{o=e,h.splice(0),t.slideToClosest(t.params.speed,!0,void 0,.5)}),500))}if(a||i("scroll",s),t.params.autoplay&&t.params.autoplayDisableOnInteraction&&t.autoplay.stop(),n===t.minTranslate()||n===t.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(c),direction:Math.sign(c),raw:e};h.length>=2&&h.shift();const a=h.length?h[h.length-1]:void 0;if(h.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&g(s):g(s),function(e){const s=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&s.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function w(e){let s=t.$el;"container"!==t.params.mousewheel.eventsTarget&&(s=d(t.params.mousewheel.eventsTarget)),s[e]("mouseenter",m),s[e]("mouseleave",f),s[e]("wheel",v)}function b(){return t.params.cssMode?(t.wrapperEl.removeEventListener("wheel",v),!0):!t.mousewheel.enabled&&(w("on"),t.mousewheel.enabled=!0,!0)}function x(){return t.params.cssMode?(t.wrapperEl.addEventListener(event,v),!0):!!t.mousewheel.enabled&&(w("off"),t.mousewheel.enabled=!1,!0)}a("init",(()=>{!t.params.mousewheel.enabled&&t.params.cssMode&&x(),t.params.mousewheel.enabled&&b()})),a("destroy",(()=>{t.params.cssMode&&b(),t.mousewheel.enabled&&x()})),Object.assign(t.mousewheel,{enable:b,disable:x})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;function r(e){let s;return e&&(s=d(e),t.params.uniqueNavElements&&"string"==typeof e&&s.length>1&&1===t.$el.find(e).length&&(s=t.$el.find(e))),s}function n(e,s){const a=t.params.navigation;e&&e.length>0&&(e[s?"addClass":"removeClass"](a.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=s),t.params.watchOverflow&&t.enabled&&e[t.isLocked?"addClass":"removeClass"](a.lockClass))}function l(){if(t.params.loop)return;const{$nextEl:e,$prevEl:s}=t.navigation;n(s,t.isBeginning&&!t.params.rewind),n(e,t.isEnd&&!t.params.rewind)}function o(e){e.preventDefault(),(!t.isBeginning||t.params.loop||t.params.rewind)&&t.slidePrev()}function c(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&t.slideNext()}function p(){const e=t.params.navigation;if(t.params.navigation=F(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;const s=r(e.nextEl),a=r(e.prevEl);s&&s.length>0&&s.on("click",c),a&&a.length>0&&a.on("click",o),Object.assign(t.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),t.enabled||(s&&s.addClass(e.lockClass),a&&a.addClass(e.lockClass))}function u(){const{$nextEl:e,$prevEl:s}=t.navigation;e&&e.length&&(e.off("click",c),e.removeClass(t.params.navigation.disabledClass)),s&&s.length&&(s.off("click",o),s.removeClass(t.params.navigation.disabledClass))}s({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}}),t.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},a("init",(()=>{p(),l()})),a("toEdge fromEdge lock unlock",(()=>{l()})),a("destroy",(()=>{u()})),a("enable disable",(()=>{const{$nextEl:e,$prevEl:s}=t.navigation;e&&e[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass),s&&s[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass)})),a("click",((e,s)=>{const{$nextEl:a,$prevEl:r}=t.navigation,n=s.target;if(t.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(a)){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===n||t.pagination.el.contains(n)))return;let e;a?e=a.hasClass(t.params.navigation.hiddenClass):r&&(e=r.hasClass(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),a&&a.toggleClass(t.params.navigation.hiddenClass),r&&r.toggleClass(t.params.navigation.hiddenClass)}})),Object.assign(t.navigation,{update:l,init:p,destroy:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const r="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`}}),t.pagination={el:null,$el:null,bullets:[]};let l=0;function o(){return!t.params.pagination.el||!t.pagination.el||!t.pagination.$el||0===t.pagination.$el.length}function c(e,s){const{bulletActiveClass:a}=t.params.pagination;e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function p(){const e=t.rtl,s=t.params.pagination;if(o())return;const a=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,r=t.pagination.$el;let p;const u=t.params.loop?Math.ceil((a-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(p=Math.ceil((t.activeIndex-t.loopedSlides)/t.params.slidesPerGroup),p>a-1-2*t.loopedSlides&&(p-=a-2*t.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==t.params.paginationType&&(p=u+p)):p=void 0!==t.snapIndex?t.snapIndex:t.activeIndex||0,"bullets"===s.type&&t.pagination.bullets&&t.pagination.bullets.length>0){const a=t.pagination.bullets;let i,o,u;if(s.dynamicBullets&&(n=a.eq(0)[t.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(t.isHorizontal()?"width":"height",n*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==t.previousIndex&&(l+=p-(t.previousIndex-t.loopedSlides||0),l>s.dynamicMainBullets-1?l=s.dynamicMainBullets-1:l<0&&(l=0)),i=Math.max(p-l,0),o=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(o+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),r.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=o&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&c(t,"prev"),a===o&&c(t,"next"))}));else{const e=a.eq(p),r=e.index();if(e.addClass(s.bulletActiveClass),s.dynamicBullets){const e=a.eq(i),n=a.eq(o);for(let e=i;e<=o;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(t.params.loop)if(r>=a.length){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else c(e,"prev"),c(n,"next");else c(e,"prev"),c(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),r=(n*i-n)/2-u*n,l=e?"right":"left";a.css(t.isHorizontal()?l:"top",`${r}px`)}}if("fraction"===s.type&&(r.find(U(s.currentClass)).text(s.formatFractionCurrent(p+1)),r.find(U(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let e;e=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,n=1;"horizontal"===e?i=a:n=a,r.find(U(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`).transition(t.params.speed)}"custom"===s.type&&s.renderCustom?(r.html(s.renderCustom(t,p+1,u)),i("paginationRender",r[0])):i("paginationUpdate",r[0]),t.params.watchOverflow&&t.enabled&&r[t.isLocked?"addClass":"removeClass"](s.lockClass)}function u(){const e=t.params.pagination;if(o())return;const s=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,a=t.pagination.$el;let r="";if("bullets"===e.type){let i=t.params.loop?Math.ceil((s-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;t.params.freeMode&&t.params.freeMode.enabled&&!t.params.loop&&i>s&&(i=s);for(let s=0;s<i;s+=1)e.renderBullet?r+=e.renderBullet.call(t,s,e.bulletClass):r+=`<${e.bulletElement} class="${e.bulletClass}"></${e.bulletElement}>`;a.html(r),t.pagination.bullets=a.find(U(e.bulletClass))}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(t,e.currentClass,e.totalClass):`<span class="${e.currentClass}"></span> / <span class="${e.totalClass}"></span>`,a.html(r)),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(t,e.progressbarFillClass):`<span class="${e.progressbarFillClass}"></span>`,a.html(r)),"custom"!==e.type&&i("paginationRender",t.pagination.$el[0])}function h(){t.params.pagination=F(t,t.originalParams.pagination,t.params.pagination,{el:"swiper-pagination"});const e=t.params.pagination;if(!e.el)return;let s=d(e.el);0!==s.length&&(t.params.uniqueNavElements&&"string"==typeof e.el&&s.length>1&&(s=t.$el.find(e.el),s.length>1&&(s=s.filter((e=>d(e).parents(".swiper")[0]===t.el)))),"bullets"===e.type&&e.clickable&&s.addClass(e.clickableClass),s.addClass(e.modifierClass+e.type),s.addClass(
vendor: 744 bytes, line 6589
6589t.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(s.addClass(`${e.modifierClass}${e.type}-dynamic`),l=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&s.addClass(e.progressbarOppositeClass),e.clickable&&s.on("click",U(e.bulletClass),(function(e){e.preventDefault();let s=d(this).index()*t.params.slidesPerGroup;t.params.loop&&(s+=t.loopedSlides),t.slideTo(s)})),Object.assign(t.pagination,{$el:s,el:s[0]}),t.enabled||s.addClass(e.lockClass))}function m(){const e=t.params.pagination;if(o())return;const s=t.pagination.$el;s.removeClass(e.hiddenClass),s.removeClass(e.modifierClass+e.type),s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass
vendor: 15,227 bytes, line 6589
6589),t.pagination.bullets&&t.pagination.bullets.removeClass&&t.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&s.off("click",U(e.bulletClass))}a("init",(()=>{h(),u(),p()})),a("activeIndexChange",(()=>{(t.params.loop||void 0===t.snapIndex)&&p()})),a("snapIndexChange",(()=>{t.params.loop||p()})),a("slidesLengthChange",(()=>{t.params.loop&&(u(),p())})),a("snapGridLengthChange",(()=>{t.params.loop||(u(),p())})),a("destroy",(()=>{m()})),a("enable disable",(()=>{const{$el:e}=t.pagination;e&&e[t.enabled?"removeClass":"addClass"](t.params.pagination.lockClass)})),a("lock unlock",(()=>{p()})),a("click",((e,s)=>{const a=s.target,{$el:r}=t.pagination;if(t.params.pagination.el&&t.params.pagination.hideOnClick&&r.length>0&&!d(a).hasClass(t.params.pagination.bulletClass)){if(t.navigation&&(t.navigation.nextEl&&a===t.navigation.nextEl||t.navigation.prevEl&&a===t.navigation.prevEl))return;const e=r.hasClass(t.params.pagination.hiddenClass);i(!0===e?"paginationShow":"paginationHide"),r.toggleClass(t.params.pagination.hiddenClass)}})),Object.assign(t.pagination,{render:u,update:p,init:h,destroy:m})},function(e){let{swiper:t,extendParams:s,on:i,emit:r}=e;const n=a();let l,o,c,u,h=!1,m=null,f=null;function g(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e,rtlTranslate:s,progress:a}=t,{$dragEl:i,$el:r}=e,n=t.params.scrollbar;let l=o,d=(c-o)*a;s?(d=-d,d>0?(l=o-d,d=0):-d+o>c&&(l=c+d)):d<0?(l=o+d,d=0):d+o>c&&(l=c-d),t.isHorizontal()?(i.transform(`translate3d(${d}px, 0, 0)`),i[0].style.width=`${l}px`):(i.transform(`translate3d(0px, ${d}px, 0)`),i[0].style.height=`${l}px`),n.hide&&(clearTimeout(m),r[0].style.opacity=1,m=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function v(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e}=t,{$dragEl:s,$el:a}=e;s[0].style.width="",s[0].style.height="",c=t.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,u=t.size/(t.virtualSize+t.params.slidesOffsetBefore-(t.params.centeredSlides?t.snapGrid[0]:0)),o="auto"===t.params.scrollbar.dragSize?c*u:parseInt(t.params.scrollbar.dragSize,10),t.isHorizontal()?s[0].style.width=`${o}px`:s[0].style.height=`${o}px`,a[0].style.display=u>=1?"none":"",t.params.scrollbar.hide&&(a[0].style.opacity=0),t.params.watchOverflow&&t.enabled&&e.$el[t.isLocked?"addClass":"removeClass"](t.params.scrollbar.lockClass)}function w(e){return t.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY}function b(e){const{scrollbar:s,rtlTranslate:a}=t,{$el:i}=s;let r;r=(w(e)-i.offset()[t.isHorizontal()?"left":"top"]-(null!==l?l:o/2))/(c-o),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const n=t.minTranslate()+(t.maxTranslate()-t.minTranslate())*r;t.updateProgress(n),t.setTranslate(n),t.updateActiveIndex(),t.updateSlidesClasses()}function x(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n,$dragEl:o}=a;h=!0,l=e.target===o[0]||e.target===o?w(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),i.transition(100),o.transition(100),b(e),clearTimeout(f),n.transition(0),s.hide&&n.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),r("scrollbarDragStart",e)}function y(e){const{scrollbar:s,$wrapperEl:a}=t,{$el:i,$dragEl:n}=s;h&&(e.preventDefault?e.preventDefault():e.returnValue=!1,b(e),a.transition(0),i.transition(0),n.transition(0),r("scrollbarDragMove",e))}function E(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n}=a;h&&(h=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),i.transition("")),s.hide&&(clearTimeout(f),f=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),r("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())}function T(e){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:r,support:l}=t,o=s.$el[0],d=!(!l.passiveListener||!r.passiveListeners)&&{passive:!1,capture:!1},c=!(!l.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};if(!o)return;const p="on"===e?"addEventListener":"removeEventListener";l.touch?(o[p](a.start,x,d),o[p](a.move,y,d),o[p](a.end,E,c)):(o[p](i.start,x,d),n[p](i.move,y,d),n[p](i.end,E,c))}function C(){const{scrollbar:e,$el:s}=t;t.params.scrollbar=F(t,t.originalParams.scrollbar,t.params.scrollbar,{el:"swiper-scrollbar"});const a=t.params.scrollbar;if(!a.el)return;let i=d(a.el);t.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el));let r=i.find(`.${t.params.scrollbar.dragClass}`);0===r.length&&(r=d(`<div class="${t.params.scrollbar.dragClass}"></div>`),i.append(r)),Object.assign(e,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&t.params.scrollbar.el&&T("on"),i&&i[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)}function $(){t.params.scrollbar.el&&T("off")}s({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}}),t.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},i("init",(()=>{C(),v(),g()})),i("update resize observerUpdate lock unlock",(()=>{v()})),i("setTranslate",(()=>{g()})),i("setTransition",((e,s)=>{!function(e){t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)}(s)})),i("enable disable",(()=>{const{$el:e}=t.scrollbar;e&&e[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)})),i("destroy",(()=>{$()})),Object.assign(t.scrollbar,{updateSize:v,setTranslate:g,init:C,destroy:$})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({parallax:{enabled:!1}});const i=(e,s)=>{const{rtl:a}=t,i=d(e),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):t.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},r=()=>{const{$el:e,slides:s,progress:a,snapGrid:r}=t;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,a)})),s.each(((e,s)=>{let n=e.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(n+=Math.ceil(s/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,n)}))}))};a("beforeInit",(()=>{t.params.parallax.enabled&&(t.params.watchSlidesProgress=!0,t.originalParams.watchSlidesProgress=!0)})),a("init",(()=>{t.params.parallax.enabled&&r()})),a("setTranslate",(()=>{t.params.parallax.enabled&&r()})),a("setTransition",((e,s)=>{t.params.parallax.enabled&&function(e){void 0===e&&(e=t.params.speed);const{$el:s}=t;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t=>{const s=d(t);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),s.transition(a)}))}(s)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();s({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l,o,c,p=1,u=!1;const m={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},f={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},g={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let v=1;function w(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function b(e){const s=t.support,a=t.params.zoom;if(o=!1,c=!1,!s.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;o=!0,m.scaleStart=w(e)}m.$slideEl&&m.$slideEl.length||(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`),0===m.$slideEl.length&&(m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`),m.maxRatio=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==m.$imageWrapEl.length)?(m.$imageEl&&m.$imageEl.transition(0),u=!0):m.$imageEl=void 0}function x(e){const s=t.support,a=t.params.zoom,i=t.zoom;if(!s.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;c=!0,m.scaleMove=w(e)}m.$imageEl&&0!==m.$imageEl.length?(s.gestures?i.scale=e.scale*p:i.scale=m.scaleMove/m.scaleStart*p,i.scale>m.maxRatio&&(i.scale=m.maxRatio-1+(i.scale-m.maxRatio+1)**.5),i.scale<a.minRatio&&(i.scale=a.minRatio+1-(a.minRatio-i.scale+1)**.5),m.$imageEl.transform(`translate3d(0,0,0) scale(${i.scale})`)):"gesturechange"===e.type&&b(e)}function y(e){const s=t.device,a=t.support,i=t.params.zoom,r=t.zoom;if(!a.gestures){if(!o||!c)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!s.android)return;o=!1,c=!1}m.$imageEl&&0!==m.$imageEl.length&&(r.scale=Math.max(Math.min(r.scale,m.maxRatio),i.minRatio),m.$imageEl.transition(t.params.speed).transform(`translate3d(0,0,0) scale(${r.scale})`),p=r.scale,u=!1,1===r.scale&&(m.$slideEl=void 0))}function E(e){const s=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(t.allowClick=!1,!f.isTouched||!m.$slideEl)return;f.isMoved||(f.width=m.$imageEl[0].offsetWidth,f.height=m.$imageEl[0].offsetHeight,f.startX=h(m.$imageWrapEl[0],"x")||0,f.startY=h(m.$imageWrapEl[0],"y")||0,m.slideWidth=m.$slideEl[0].offsetWidth,m.slideHeight=m.$slideEl[0].offsetHeight,m.$imageWrapEl.transition(0));const a=f.width*s.scale,i=f.height*s.scale;if(!(a<m.slideWidth&&i<m.slideHeight)){if(f.minX=Math.min(m.slideWidth/2-a/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-i/2,0),f.maxY=-f.minY,f.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!f.isMoved&&!u){if(t.isHorizontal()&&(Math.floor(f.minX)===Math.floor(f.startX)&&f.touchesCurrent.x<f.touchesStart.x||Math.floor(f.maxX)===Math.floor(f.startX)&&f.touchesCurrent.x>f.touchesStart.x))return void(f.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(f.minY)===Math.floor(f.startY)&&f.touchesCurrent.y<f.touchesStart.y||Math.floor(f.maxY)===Math.floor(f.startY)&&f.touchesCurrent.y>f.touchesStart.y))return void(f.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),f.isMoved=!0,f.currentX=f.touchesCurrent.x-f.touchesStart.x+f.startX,f.currentY=f.touchesCurrent.y-f.touchesStart.y+f.startY,f.currentX<f.minX&&(f.currentX=f.minX+1-(f.minX-f.currentX+1)**.8),f.currentX>f.maxX&&(f.currentX=f.maxX-1+(f.currentX-f.maxX+1)**.8),f.currentY<f.minY&&(f.currentY=f.minY+1-(f.minY-f.currentY+1)**.8),f.currentY>f.maxY&&(f.currentY=f.maxY-1+(f.currentY-f.maxY+1)**.8),g.prevPositionX||(g.prevPositionX=f.touchesCurrent.x),g.prevPositionY||(g.prevPositionY=f.touchesCurrent.y),g.prevTime||(g.prevTime=Date.now()),g.x=(f.touchesCurrent.x-g.prevPositionX)/(Date.now()-g.prevTime)/2,g.y=(f.touchesCurrent.y-g.prevPositionY)/(Date.now()-g.prevTime)/2,Math.abs(f.touchesCurrent.x-g.prevPositionX)<2&&(g.x=0),Math.abs(f.touchesCurrent.y-g.prevPositionY)<2&&(g.y=0),g.prevPositionX=f.touchesCurrent.x,g.prevPositionY=f.touchesCurrent.y,g.prevTime=Date.now(),m.$imageWrapEl.transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}}function T(){const e=t.zoom;m.$slideEl&&t.previousIndex!==t.activeIndex&&(m.$imageEl&&m.$imageEl.transform("translate3d(0,0,0) scale(1)"),m.$imageWrapEl&&m.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,p=1,m.$slideEl=void 0,m.$imageEl=void 0,m.$imageWrapEl=void 0)}function C(e){const s=t.zoom,a=t.params.zoom;if(m.$slideEl||(e&&e.target&&(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`)),m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`)),!m.$imageEl||0===m.$imageEl.length||!m.$imageWrapEl||0===m.$imageWrapEl.length)return;let i,r,l,o,c,u,h,g,v,w,b,x,y,E,T,C,$,S;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),m.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===f.touchesStart.x&&e?(i="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,r="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(i=f.touchesStart.x,r=f.touchesStart.y),s.scale=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,p=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,e?($=m.$slideEl[0].offsetWidth,S=m.$slideEl[0].offsetHeight,l=m.$slideEl.offset().left+n.scrollX,o=m.$slideEl.offset().top+n.scrollY,c=l+$/2-i,u=o+S/2-r,v=m.$imageEl[0].offsetWidth,w=m.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),T=-y,C=-E,h=c*s.scale,g=u*s.scale,h<y&&(h=y),h>T&&(h=T),g<E&&(g=E),g>C&&(g=C)):(h=0,g=0),m.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${g}px,0)`),m.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function $(){const e=t.zoom,s=t.params.zoom;m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex),m.$imageEl=m.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${s.containerClass}`)),m.$imageEl&&0!==m.$imageEl.length&&m.$imageWrapEl&&0!==m.$imageWrapEl.length&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,p=1,m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),m.$slideEl.removeClass(`${s.zoomedSlideClass}`),m.$slideEl=void 0)}function S(e){const s=t.zoom;s.scale&&1!==s.scale?$():C(e)}function M(){const e=t.support;return{passiveListener:!("touchstart"!==t.touchEvents.start||!e.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!e.passiveListener||{passive:!1,capture:!0}}}function P(){return`.${t.params.slideClass}`}function k(e){const{passiveListener:s}=M(),a=P();t.$wrapperEl[e]("gesturestart",a,b,s),t.$wrapperEl[e]("gesturechange",a,x,s),t.$wrapperEl[e]("gestureend",a,y,s)}function z(){l||(l=!0,k("on"))}function O(){l&&(l=!1,k("off"))}function 
vendor: 35,942 bytes, line 6589
6589L(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const s=t.support,{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.on(t.touchEvents.start,z,a),t.$wrapperEl.on(t.touchEvents.end,O,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.on(t.touchEvents.start,r,b,a),t.$wrapperEl.on(t.touchEvents.move,r,x,i),t.$wrapperEl.on(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.on(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.on(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}function I(){const e=t.zoom;if(!e.enabled)return;const s=t.support;e.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.off(t.touchEvents.start,z,a),t.$wrapperEl.off(t.touchEvents.end,O,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.off(t.touchEvents.start,r,b,a),t.$wrapperEl.off(t.touchEvents.move,r,x,i),t.$wrapperEl.off(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.off(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.off(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}Object.defineProperty(t.zoom,"scale",{get:()=>v,set(e){if(v!==e){const t=m.$imageEl?m.$imageEl[0]:void 0,s=m.$slideEl?m.$slideEl[0]:void 0;i("zoomChange",e,t,s)}v=e}}),a("init",(()=>{t.params.zoom.enabled&&L()})),a("destroy",(()=>{I()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;m.$imageEl&&0!==m.$imageEl.length&&(f.isTouched||(s.android&&e.cancelable&&e.preventDefault(),f.isTouched=!0,f.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(!f.isTouched||!f.isMoved)return f.isTouched=!1,void(f.isMoved=!1);f.isTouched=!1,f.isMoved=!1;let s=300,a=300;const i=g.x*s,r=f.currentX+i,n=g.y*a,l=f.currentY+n;0!==g.x&&(s=Math.abs((r-f.currentX)/g.x)),0!==g.y&&(a=Math.abs((l-f.currentY)/g.y));const o=Math.max(s,a);f.currentX=r,f.currentY=l;const d=f.width*e.scale,c=f.height*e.scale;f.minX=Math.min(m.slideWidth/2-d/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-c/2,0),f.maxY=-f.minY,f.currentX=Math.max(Math.min(f.currentX,f.maxX),f.minX),f.currentY=Math.max(Math.min(f.currentY,f.maxY),f.minY),m.$imageWrapEl.transition(o).transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&S(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&T()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&T()})),Object.assign(t.zoom,{enable:L,disable:I,in:C,out:$,toggle:S})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;s({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),t.lazy={};let n=!1,l=!1;function o(e,s){void 0===s&&(s=!0);const a=t.params.lazy;if(void 0===e)return;if(0===t.slides.length)return;const r=t.virtual&&t.params.virtual.enabled?t.$wrapperEl.children(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`):t.slides.eq(e),n=r.find(`.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})`);!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||n.push(r[0]),0!==n.length&&n.each((e=>{const n=d(e);n.addClass(a.loadingClass);const l=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");t.loadImage(n[0],c||l,p,u,!1,(()=>{if(null!=t&&t&&(!t||t.params)&&!t.destroyed){if(l?(n.css("background-image",`url("${l}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(a.loadedClass).removeClass(a.loadingClass),r.find(`.${a.preloaderClass}`).remove(),t.params.loop&&s){const e=r.attr("data-swiper-slide-index");if(r.hasClass(t.params.slideDuplicateClass)){o(t.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})`).index(),!1)}else{o(t.$wrapperEl.children(`.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`).index(),!1)}}i("lazyImageReady",r[0],n[0]),t.params.autoHeight&&t.updateAutoHeight()}})),i("lazyImageLoad",r[0],n[0])}))}function c(){const{$wrapperEl:e,params:s,slides:a,activeIndex:i}=t,r=t.virtual&&s.virtual.enabled,n=s.lazy;let c=s.slidesPerView;function p(t){if(r){if(e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`).length)return!0}else if(a[t])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),l||(l=!0),t.params.watchSlidesProgress)e.children(`.${s.slideVisibleClass}`).each((e=>{o(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e<i+c;e+=1)p(e)&&o(e);else o(i);if(n.loadPrevNext)if(c>1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){const e=n.loadPrevNextAmount,t=Math.ceil(c),s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+t;e<s;e+=1)p(e)&&o(e);for(let e=r;e<i;e+=1)p(e)&&o(e)}else{const t=e.children(`.${s.slideNextClass}`);t.length>0&&o(u(t));const a=e.children(`.${s.slidePrevClass}`);a.length>0&&o(u(a))}}function p(){const e=r();if(!t||t.destroyed)return;const s=t.params.lazy.scrollingElement?d(t.params.lazy.scrollingElement):d(e),a=s[0]===e,i=a?e.innerWidth:s[0].offsetWidth,l=a?e.innerHeight:s[0].offsetHeight,o=t.$el.offset(),{rtlTranslate:u}=t;let h=!1;u&&(o.left-=t.$el[0].scrollLeft);const m=[[o.left,o.top],[o.left+t.width,o.top],[o.left,o.top+t.height],[o.left+t.width,o.top+t.height]];for(let e=0;e<m.length;e+=1){const t=m[e];if(t[0]>=0&&t[0]<=i&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==t.touchEvents.start||!t.support.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1};h?(c(),s.off("scroll",p,f)):n||(n=!0,s.on("scroll",p,f))}a("beforeInit",(()=>{t.params.lazy.enabled&&t.params.preloadImages&&(t.params.preloadImages=!1)})),a("init",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("scroll",(()=>{t.params.freeMode&&t.params.freeMode.enabled&&!t.params.freeMode.sticky&&c()})),a("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("transitionStart",(()=>{t.params.lazy.enabled&&(t.params.lazy.loadOnTransitionStart||!t.params.lazy.loadOnTransitionStart&&!l)&&(t.params.lazy.checkInView?p():c())})),a("transitionEnd",(()=>{t.params.lazy.enabled&&!t.params.lazy.loadOnTransitionStart&&(t.params.lazy.checkInView?p():c())})),a("slideChange",(()=>{const{lazy:e,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=t.params;e.enabled&&(s||a&&(i||0===r))&&c()})),a("destroy",(()=>{t.$el&&t.$el.find(`.${t.params.lazy.loadingClass}`).removeClass(t.params.lazy.loadingClass)})),Object.assign(t.lazy,{load:c,loadInSlide:o})},function(e){let{swiper:t,extendParams:s,on:a}=e;function i(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function r(){t.controller.control&&t.controller.spline&&(t.controller.spline=void 0,delete t.controller.spline)}s({controller:{control:void 0,inverse:!1,by:"slide"}}),t.controller={control:void 0},a("beforeInit",(()=>{t.controller.control=t.params.controller.control})),a("update",(()=>{r()})),a("resize",(()=>{r()})),a("observerUpdate",(()=>{r()})),a("setTranslate",((e,s,a)=>{t.controller.control&&t.controller.setTranslate(s,a)})),a("setTransition",((e,s,a)=>{t.controller.control&&t.controller.setTransition(s,a)})),Object.assign(t.controller,{setTranslate:function(e,s){const a=t.controller.control;let r,n;const l=t.constructor;function o(e){const s=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(e){t.controller.spline||(t.controller.spline=t.params.loop?new i(t.slidesGrid,e.slidesGrid):new i(t.snapGrid,e.snapGrid))}(e),n=-t.controller.spline.interpolate(-s)),n&&"container"!==t.params.controller.by||(r=(e.maxTranslate()-e.minTranslate())/(t.maxTranslate()-t.minTranslate()),n=(s-t.minTranslate())*r+e.minTranslate()),t.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,t),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(a))for(let e=0;e<a.length;e+=1)a[e]!==s&&a[e]instanceof l&&o(a[e]);else a instanceof l&&s!==a&&o(a)},setTransition:function(e,s){const a=t.constructor,i=t.controller.control;let r;function n(s){s.setTransition(e,t),0!==e&&(s.transitionStart(),s.params.autoHeight&&p((()=>{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===t.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r<i.length;r+=1)i[r]!==s&&i[r]instanceof a&&n(i[r]);else i instanceof a&&s!==i&&n(i)}})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group",id:null}});let i=null;function r(e){const t=i;0!==t.length&&(t.html(""),t.html(e))}function n(e){e.attr("tabIndex","0")}function l(e){e.attr("tabIndex","-1")}function o(e,t){e.attr("role",t)}function c(e,t){e.attr("aria-roledescription",t)}function p(e,t){e.attr("aria-label",t)}function u(e){e.attr("aria-disabled",!0)}function h(e){e.attr("aria-disabled",!1)}function m(e){if(13!==e.keyCode&&32!==e.keyCode)return;const s=t.params.a11y,a=d(e.target);t.navigation&&t.navigation.$nextEl&&a.is(t.navigation.$nextEl)&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?r(s.lastSlideMessage):r(s.nextSlideMessage)),t.navigation&&t.navigation.$prevEl&&a.is(t.navigation.$prevEl)&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?r(s.firstSlideMessage):r(s.prevSlideMessage)),t.pagination&&a.is(U(t.params.pagination.bulletClass))&&a[0].click()}function f(){return t.pagination&&t.pagination.bullets&&t.pagination.bullets.length}function g(){return f()&&t.params.pagination.clickable}const v=(e,t,s)=>{n(e),"BUTTON"!==e[0].tagName&&(o(e,"button"),e.on("keydown",m)),p(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)},w=e=>{const s=e.target.closest(`.${t.params.slideClass}`);if(!s||!t.slides.includes(s))return;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||t.slideTo(t.slides.indexOf(s),0)},b=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&c(d(t.slides),e.itemRoleDescriptionMessage),o(d(t.slides),e.slideRole);const s=t.params.loop?t.slides.filter((e=>!e.classList.contains(t.params.slideDuplicateClass))).length:t.slides.length;t.slides.each(((a,i)=>{const r=d(a),n=t.params.loop?parseInt(r.attr("data-swiper-slide-index"),10):i;p(r,e.slideLabelMessage.replace(/\{\{index\}\}/,n+1).replace(/\{\{slidesLength\}\}/,s))}))},x=()=>{const e=t.params.a11y;t.$el.append(i);const s=t.$el;e.containerRoleDescriptionMessage&&c(s,e.containerRoleDescriptionMessage),e.containerMessage&&p(s,e.containerMessage);const a=t.$wrapperEl,r=e.id||a.attr("id")||`swiper-wrapper-${n=16,void 0===n&&(n=16),"x".repeat(n).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}`;var n;const l=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var o;let d,u;o=r,a.attr("id",o),function(e,t){e.attr("aria-live",t)}(a,l),b(),t.navigation&&t.navigation.$nextEl&&(d=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(u=t.navigation.$prevEl),d&&d.length&&v(d,r,e.nextSlideMessage),u&&u.length&&v(u,r,e.prevSlideMessage),g()&&t.pagination.$el.on("keydown",U(t.params.pagination.bulletClass),m),t.$el.on("focus",w,!0)};a("beforeInit",(()=>{i=d(`<span class="${t.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`)})),a("afterInit",(()=>{t.params.a11y.enabled&&x()})),a("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&b()})),a("fromEdge toEdge afterInit lock unlock",(()=>{t.params.a11y.enabled&&function(){if(t.params.loop||t.params.rewind||!t.navigation)return;const{$nextEl:e,$prevEl:s}=t.navigation;s&&s.length>0&&(t.isBeginning?(u(s),l(s)):(h(s),n(s))),e&&e.length>0&&(t.isEnd?(u(e),l(e)):(h(e),n(e)))}()})),a("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;f()&&t.pagination.bullets.each((s=>{const a=d(s);t.params.pagination.clickable&&(n(a),t.params.pagination.renderBullet||(o(a,"button"),p(a,e.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))),a.is(`.${t.params.pagination.bulletActiveClass}`)?a.attr("aria-current","true"):a.removeAttr("aria-current")}))}()})),a("destroy",(()=>{t.params.a11y.enabled&&function(){let e,s;i&&i.length>0&&i.remove(),t.navigation&&t.navigation.$nextEl&&(e=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(s=t.navigation.$prevEl),e&&e.off("keydown",m),s&&s.off("keydown",m),g()&&t.pagination.$el.off("keydown",U(t.params.pagination.bulletClass),m),t.$el.off("focus",w,!0)}()}))},function(e){let{swiper:t,extendParams:s,on:a}=e;s({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let i=!1,n={};const l=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},d=(e,s)=>{const a=r();if(!i||!t.params.history.enabled)return;let n;n=t.params.url?new URL(t.params.url):a.location;const o=t.slides.eq(s);let d=l(o.attr("data-history"));if(t.params.history.root.length>0){let s=t.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${e}/${d}`}else n.pathname.includes(e)||(d=`${e}/${d}`);t.params.history.keepQuery&&(d+=n.search);const c=a.history.state;c&&c.value===d||(t.params.history.replaceState?a.history.replaceState({value:d},null,d):a.history.pushState({value:d},null,d))},c=(e,s,a)=>{if(s)for(let i=0,r=t.slides.length;i<r;i+=1){const r=t.slides.eq(i);if(l(r.attr("data-history"))===s&&!r.hasClass(t.params.slideDuplicateClass)){const s=r.index();t.slideTo(s,e,a)}}else t.slideTo(0,e,a)},p=()=>{n=o(t.params.url),c(t.params.speed,n.value,!1)};a("init",(()=>{t.params.history.enabled&&(()=>{const e=r();if(t.params.history){if(!e.history||!e.history.pushState)return t.params.history.enabled=!1,void(t.params.hashNavigation.enabled=!0);i=!0,n=o(t.params.url),(n.key||n.value)&&(c(0,n.value,t.params.runCallbacksOnInit),t.params.history.replaceState||e.addEventListener("popstate",p))}})()})),a("destroy",(()=>{t.params.history.enabled&&(()=>{const e=r();t.params.history.replaceState||e.removeEventListener("popstate",p)})()})),a("transitionEnd _freeModeNoMomentumRelease",(()=>{i&&d(t.params.history.key,t.activeIndex)})),a("slideChange",(()=>{i&&t.params.cssMode&&d(t.params.history.key,t.activeIndex)}))},function(e){let{swiper:t,extendParams:s,emit:i,on:n}=e,l=!1;const o=a(),c=r();s({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const p=()=>{i("hashChange");const e=o.location.hash.replace("#","");if(e!==t.slides.eq(t.activeIndex).attr("data-hash")){const s=t.$wrapperEl.children(`.${t.params.slideClass}[data-hash="${e}"]`).index();if(void 0===s)return;t.slideTo(s)}},u=()=>{if(l&&t.params.hashNavigation.enabled)if(t.params.hashNavigation.replaceState&&c.history&&c.history.replaceState)c.history.replaceState(null,null,`#${t.slides.eq(t.activeIndex).attr("data-hash")}`||""),i("hashSet");else{const e=t.slides.eq(t.activeIndex),s=e.attr("data-hash")||e.attr("data-history");o.location.hash=s||"",i("hashSet")}};n("init",(()=>{t.params.hashNavigation.enabled&&(()=>{if(!t.params.hashNavigation.enabled||t.params.history&&t.params.history.enabled)return;l=!0;const e=o.location.hash.replace("#","");if(e){const s=0;for(let a=0,i=t.slides.length;a<i;a+=1){const i=t.slides.eq(a);if((i.attr("data-hash")||i.attr("data-history"))===e&&!i.hasClass(t.params.slideDuplicateClass)){const e=i.index();t.slideTo(e,s,t.params.runCallbacksOnInit,!0)}}}t.params.hashNavigation.watchState&&d(c).on("hashchange",p)})()})),n("destroy",(()=>{t.params.hashNavigation.enabled&&t.params.hashNavigation.watchState&&d(c).off("hashchange",p)})),n("transitionEnd _freeModeNoMomentumRelease",(()=>{l&&u()})),n("slideChange",(()=>{l&&t.params.cssMode&&u()}))},function(e){let t,{swiper:s,extendParams:i,on:r,emit:n}=e;function l(){const e=s.slides.eq(s.activeIndex);let a=s.params.autoplay.delay;e.attr("data-swiper-autoplay")&&(a=e.attr("data-swiper-autoplay")||s.params.autoplay.delay);const i=()=>{let e;s.params.autoplay.reverseDirection?s.params.loop?(s.loopFix(),e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.isBeginning?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(s.slides.length-1,s.params.speed,!0,!0),n("autoplay")):(e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.params.loop?(s.loopFix(),e=s.slideNext(s.params.speed,!0,!0),n("autoplay")):s.isEnd?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(0,s.params.speed,!0,!0),n("autoplay")):(e=s.slideNext(s.params.speed,!0,!0),n("autoplay")),(s.params.cssMode&&s.autoplay.running||!1===e)&&l()};clearTimeout(t),0!==a?t=p((()=>{i()}),a):i()}function o(){return void 0===t&&(!s.autoplay.running&&(s.autoplay.running=!0,n("autoplayStart"),l(),!0))}function d(){return!!s.autoplay.running&&(void 0!==t&&(t&&(clearTimeout(t),t=void 0),s.autoplay.running=!1,n("autoplayStop"),!0))}function c(e){s.autoplay.running&&(s.autoplay.paused||(t&&clearTimeout(t),s.autoplay.paused=!0,0!==e&&s.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].addEventListener(e,h)})):(s.autoplay.paused=!1,l())))}function u(){const e=a();"hidden"===e.visibilityState&&s.autoplay.running&&c(),"visible"===e.visibilityState&&s.autoplay.paused&&(l(),s.autoplay.paused=!1)}function h(e){s&&!s.destroyed&&s.$wrapperEl&&e.target===s.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)})),s.autoplay.paused=!1,s.autoplay.running?l():d())}function m(){s.params.autoplay.disableOnInteraction?d():(n("autoplayPause"),c()),["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)}))}function f(){s.params.autoplay.disableOnInteraction||(s.autoplay.paused=!1,n("autoplayResume"),l())}s.autoplay={running:!1,paused:!1},i({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),r("init",(()=>{if(s.params.autoplay.enabled){o();a().addEventListener("visibilitychange",u),s.params.autoplay.pauseOnMouseEnter&&(s.$el.on("mouseenter",m),s.$el.on("mouseleave",f))}})),r("beforeTransitionStart",((e,t,a)=>{s.autoplay.running&&(a||!s.params.autoplay.disableOnInteraction?s.autoplay.pause(t):d())})),r("sliderFirstMove",(()=>{s.autoplay.running&&(s.params.autoplay.disableOnInteraction?d():c())})),r("touchEnd",(()=>{s.params.cssMode&&s.autoplay.paused&&!s.params.autoplay.disableOnInteraction&&l()})),r("destroy",(()=>{s.$el.off("mouseenter",m),s.$el.off("mouseleave",f),s.autoplay.running&&d();a().removeEventListener("visibilitychange",u)})),Object.assign(s.autoplay,{pause:c,run:l,start:o,stop:d})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let i=!1,r=!1;function n(){const e=t.thumbs.swiper;if(!e||e.destroyed)return;const s=e.clickedIndex,a=e.clickedSlide;if(a&&d(a).hasClass(t.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=e.params.loop?parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10):s,t.params.loop){let e=t.activeIndex;t.slides.eq(e).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,e=t.activeIndex);const s=t.slides.eq(e).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=t.slides.eq(e).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-e<e-s?a:s}t.slideTo(i)}function l(){const{thumbs:e}=t.params;if(i)return!1;i=!0;const s=t.constructor;if(e.swiper instanceof s)t.thumbs.swiper=e.swiper,Object.assign(t.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(t.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1});else if(m(e.swiper)){const a=Object.assign({},e.swiper);Object.assign(a,{watchSlidesProgress:!0,slideToClickedSlide:!1}),t.thumbs.swiper=new s(a),r=!0}return t.thumbs.swiper.$el.addClass(t.params.thumbs.thumbsContainerClass),t.thumbs.swiper.on("tap",n),!0}function o(e){const s=t.thumbs.swiper;if(!s||s.destroyed)return;const a="auto"===s.params.slidesPerView?s.slidesPerViewDynamic():s.params.slidesPerView,i=t.params.thumbs.autoScrollOffset,r=i&&!s.params.loop;if(t.realIndex!==s.realIndex||r){let n,l,o=s.activeIndex;if(s.params.loop){s.slides.eq(o).hasClass(s.params.slideDuplicateClass)&&(s.loopFix(),s._clientLeft=s.$wrapperEl[0].clientLeft,o=s.activeIndex);const e=s.slides.eq(o).prevAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index(),a=s.slides.eq(o).nextAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index();n=void 0===e?a:void 0===a?e:a-o==o-e?s.params.slidesPerGroup>1?a:o:a-o<o-e?a:e,l=t.activeIndex>t.previousIndex?"next":"prev"}else n=t.realIndex,l=n>t.previousIndex?"next":"prev";r&&(n+="next"===l?i:-1*i),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(n)<0&&(s.params.centeredSlides?n=n>o?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>o&&s.params.slidesPerGroup,s.slideTo(n,e?0:void 0))}let n=1;const l=t.params.thumbs.slideThumbActiveClass;if(t.params.slidesPerView>1&&!t.params.centeredSlides&&(n=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(n=1),n=Math.floor(n),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e<n;e+=1)s.$wrapperEl.children(`[data-swiper-slide-index="${t.realIndex+e}"]`).addClass(l);else for(let e=0;e<n;e+=1)s.slides.eq(t.realIndex+e).addClass(l)}t.thumbs={swiper:null},a("beforeInit",(()=>{const{thumbs:e}=t.params;e&&e.swiper&&(l(),o(!0))})),a("slideChange update resize observerUpdate",(()=>{o()})),a("setTransition",((e,s)=>{const a=t.thumbs.swiper;a&&!a.destroyed&&a.setTransition(s)})),a("beforeDestroy",(()=>{const e=t.thumbs.swiper;e&&!e.destroyed&&r&&e.destroy()})),Object.assign(t.thumbs,{init:l,update:o})},function(e){let{swiper:t,extendParams:s,emit:a,once:i}=e;s({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(t,{freeMode:{onTouchStart:function(){const e=t.getTranslate();t.setTranslate(e),t.setTransition(0),t.touchEventsData.velocities.length=0,t.freeMode.onTouchEnd({currentPos:t.rtl?t.translate:-t.translate})},onTouchMove:function(){const{touchEventsData:e,touches:s}=t;0===e.velocities.length&&e.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:e.touchStartTime}),e.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function(e){let{currentPos:s}=e;const{params:r,$wrapperEl:n,rtlTranslate:l,snapGrid:o,touchEventsData:d}=t,c=u()-d.touchStartTime;if(s<-t.minTranslate())t.slideTo(t.activeIndex);else if(s>-t.maxTranslate())t.slides.length<o.length?t.slideTo(o.length-1):t.slideTo(t.slides.length-1);else{if(r.freeMode.momentum){if(d.velocities.length>1){const e=d.velocities.pop(),s=d.velocities.pop(),a=e.position-s.position,i=e.time-s.time;t.velocity=a/i,t.velocity/=2,Math.abs(t.velocity)<r.freeMode.minimumVelocity&&(t.velocity=0),(i>150||u()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=r.freeMode.momentumVelocityRatio,d.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;const s=t.velocity*e;let c=t.translate+s;l&&(c=-c);let p,h=!1;const m=20*Math.abs(t.velocity)*r.freeMode.momentumBounceRatio;let f;if(c<t.maxTranslate())r.freeMode.momentumBounce?(c+t.maxTranslate()<-m&&(c=t.maxTranslate()-m),p=t.maxTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.maxTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(c>t.minTranslate())r.freeMode.momentumBounce?(c-t.minTranslate()>m&&(c=t.minTranslate()+m),p=t.minTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.minTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(r.freeMode.sticky){let e;for(let t=0;t<o.length;t+=1)if(o[t]>-c){e=t;break}c=Math.abs(o[e]-c)<Math.abs(o[e-1]-c)||"next"===t.swipeDirection?o[e]:o[e-1],c=-c}if(f&&i("transitionEnd",(()=>{t.loopFix()})),0!==t.velocity){if(e=l?Math.abs((-c-t.translate)/t.velocity):Math.abs((c-t.translate)/t.velocity),r.freeMode.sticky){const s=Math.abs((l?-c:c)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s<a?r.speed:s<2*a?1.5*r.speed:2.5*r.speed}}else if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode.momentumBounce&&h?(t.updateProgress(p),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&d.allowMomentumBounce&&(a("momentumBounce"),t.setTransition(r.speed),setTimeout((()=>{t.setTranslate(p),n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(a("_freeModeNoMomentumRelease"),t.updateProgress(c),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(c),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode&&a("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||c>=r.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}}}})},function(e){let t,s,a,{swiper:i,extendParams:r}=e;r({grid:{rows:1,fill:"column"}}),i.grid={initSlides:e=>{const{slidesPerView:r}=i.params,{rows:n,fill:l}=i.params.grid;s=t/n,a=Math.floor(e/n),t=Math.floor(e/n)===e/n?e:Math.ceil(e/n)*n,"auto"!==r&&"row"===l&&(t=Math.max(t,r*n))},updateSlide:(e,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=i.params,{rows:c,fill:p}=i.params.grid;let u,h,m;if("row"===p&&o>1){const s=Math.floor(e/(o*c)),a=e-c*o*s,i=0===s?o:Math.min(Math.ceil((n-s*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+s*o,u=h+m*t/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(e/c),m=e-h*c,(h>a||h===a&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(e/s),h=e-m*s);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(e,s,a)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=i.params,{rows:o}=i.params.grid;if(i.virtualSize=(e+r)*t,i.virtualSize=Math.ceil(i.virtualSize/o)-r,i.$wrapperEl.css({[a("width")]:`${i.virtualSize+r}px`}),n){s.splice(0,s.length);const e=[];for(let t=0;t<s.length;t+=1){let a=s[t];l&&(a=Math.floor(a)),s[t]<i.virtualSize+s[0]&&e.push(a)}s.push(...e)}}}},function(e){let{swiper:t}=e;Object.assign(t,{appendSlide:K.bind(t),prependSlide:Z.bind(t),addSlide:Q.bind(t),removeSlide:J.bind(t),removeAllSlides:ee.bind(t)})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({fadeEffect:{crossFade:!1,transformEl:null}}),te({effect:"fade",swiper:t,on:a,setTranslate:()=>{const{slides:e}=t,s=t.params.fadeEffect;for(let a=0;a<e.length;a+=1){const e=t.slides.eq(a);let i=-e[0].swiperSlideOffset;t.params.virtualTranslate||(i-=t.translate);let r=0;t.isHorizontal()||(r=i,i=0);const n=t.params.fadeEffect.crossFade?Math.max(1-Math.abs(e[0].progress),0):1+Math.min(Math.max(e[0].progress,-1),0);se(s,e).css({opacity:n}).transform(`translate3d(${i}px, ${r}px, 0px)`)}},setTransition:e=>{const{transformEl:s}=t.params.fadeEffect;(s?t.slides.find(s):t.slides).transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}});const i=(e,t,s)=>{let a=s?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),i=s?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===a.length&&(a=d(`<div class="swiper-slide-shadow-${s?"left":"top"}"></div>`),e.append(a)),0===i.length&&(i=d(`<div class="swiper-slide-shadow-${s?"right":"bottom"}"></div>`),e.append(i)),a.length&&(a[0].style.opacity=Math.max(-t,0)),i.length&&(i[0].style.opacity=Math.max(t,0))};te({effect:"cube",swiper:t,on:a,setTranslate:()=>{const{$el:e,$wrapperEl:s,slides:a,width:r,height:n,rtlTranslate:l,size:o,browser:c}=t,p=t.params.cubeEffect,u=t.isHorizontal(),h=t.virtual&&t.params.virtual.enabled;let m,f=0;p.shadow&&(u?(m=s.find(".swiper-cube-shadow"),0===m.length&&(m=d('<div class="swiper-cube-shadow"></div>'),s.append(m)),m.css({height:`${r}px`})):(m=e.find(".swiper-cube-shadow"),0===m.length&&(m=d('<div class="swiper-cube-shadow"></div>'),e.append(m))));for(let e=0;e<a.length;e+=1){const t=a.eq(e);let s=e;h&&(s=parseInt(t.attr("data-swiper-slide-index"),10));let r=90*s,n=Math.floor(r/360);l&&(r=-r,n=Math.floor(-r/360));const d=Math.max(Math.min(t[0].progress,1),-1);let c=0,m=0,g=0;s%4==0?(c=4*-n*o,g=0):(s-1)%4==0?(c=0,g=4*-n*o):(s-2)%4==0?(c=o+4*n*o,g=o):(s-3)%4==0&&(c=-o,g=3*o+4*o*n),l&&(c=-c),u||(m=c,c=0);const v=`rotateX(${u?0:-r}deg) rotateY(${u?r:0}deg) translate3d(${c}px, ${m}px, ${g}px)`;d<=1&&d>-1&&(f=90*s+90*d,l&&(f=90*-s-90*d)),t.transform(v),p.slideShadows&&i(t,d,u)}if(s.css({"-webkit-transform-origin":`50% 50% -${o/2}px`,"transform-origin":`50% 50% -${o/2}px`}),p.shadow)if(u)m.transform(`translate3d(0px, ${r/2+p.shadowOffset}px, ${-r/2}px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})`);else{const e=Math.abs(f)-90*Math.floor(Math.abs(f)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=p.shadowScale,a=p.shadowScale/t,i=p.shadowOffset;m.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-90deg)`)}const g=c.isSafari||c.isWebView?-o/2:0;s.transform(`translate3d(0px,0,${g}px) rotateX(${t.isHorizontal()?0:f}deg) rotateY(${t.isHorizontal()?-f:0}deg)`),s[0].style.setProperty("--swiper-cube-translate-z",`${g}px`)},setTransition:e=>{const{$el:s,slides:a}=t;a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.cubeEffect.shadow&&!t.isHorizontal()&&s.find(".swiper-cube-shadow").transition(e)},recreateShadows:()=>{const e=t.isHorizontal();t.slides.each((t=>{const s=Math.max(Math.min(t.progress,1),-1);i(d(t),s,e)}))},getEffectParams:()=>t.params.cubeEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}});const i=(e,s,a)=>{let i=t.isHorizontal()?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),r=t.isHorizontal()?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===i.length&&(i=ie(a,e,t.isHorizontal()?"left":"top")),0===r.length&&(r=ie(a,e,t.isHorizontal()?"right":"bottom")),i.length&&(i[0].style.opacity=Math.max(-s,0)),r.length&&(r[0].style.opacity=Math.max(s,0))};te({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect;for(let r=0;r<e.length;r+=1){const n=e.eq(r);let l=n[0].progress;t.params.flipEffect.limitRotation&&(l=Math.max(Math.min(n[0].progress,1),-1));const o=n[0].swiperSlideOffset;let d=-180*l,c=0,p=t.params.cssMode?-o-t.translate:-o,u=0;t.isHorizontal()?s&&(d=-d):(u=p,p=0,c=-d,d=0),n[0].style.zIndex=-Math.abs(Math.round(l))+e.length,a.slideShadows&&i(n,l,a);const h=`translate3d(${p}px, ${u}px, 0px) rotateX(${c}deg) rotateY(${d}deg)`;se(a,n).transform(h)}},setTransition:e=>{const{transformEl:s}=t.params.flipEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),ae({swiper:t,duration:e,transformEl:s})},recreateShadows:()=>{const e=t.params.flipEffect;t.slides.each((s=>{const a=d(s);let r=a[0].progress;t.params.flipEffect.limitRotation&&(r=Math.max(Math.min(s.progress,1),-1)),i(a,r,e)}))},getEffectParams:()=>t.params.flipEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),te({effect:"coverflow",swiper:t,on:a,setTranslate:()=>{const{width:e,height:s,slides:a,slidesSizesGrid:i}=t,r=t.params.coverflowEffect,n=t.isHorizontal(),l=t.translate,o=n?e/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e<t;e+=1){const t=a.eq(e),s=i[e],l=(o-t[0].swiperSlideOffset-s/2)/s,p="function"==typeof r.modifier?r.modifier(l):l*r.modifier;let u=n?d*p:0,h=n?0:d*p,m=-c*Math.abs(p),f=r.stretch;"string"==typeof f&&-1!==f.indexOf("%")&&(f=parseFloat(r.stretch)/100*s);let g=n?0:f*p,v=n?f*p:0,w=1-(1-r.scale)*Math.abs(p);Math.abs(v)<.001&&(v=0),Math.abs(g)<.001&&(g=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(h)<.001&&(h=0),Math.abs(w)<.001&&(w=0);const b=`translate3d(${v}px,${g}px,${m}px)  rotateX(${h}deg) rotateY(${u}deg) scale(${w})`;if(se(r,t).transform(b),t[0].style.zIndex=1-Math.abs(Math.round(p)),r.slideShadows){let e=n?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=n?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=ie(r,t,n?"left":"top")),0===s.length&&(s=ie(r,t,n?"right":"bottom")),e.length&&(e[0].style.opacity=p>0?p:0),s.length&&(s[0].style.opacity=-p>0?-p:0)}}},setTransition:e=>{const{transformEl:s}=t.params.coverflowEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const i=e=>"string"==typeof e?e:`${e}px`;te({effect:"creative",swiper:t,on:a,setTranslate:()=>{const{slides:e,$wrapperEl:s,slidesSizesGrid:a}=t,r=t.params.creativeEffect,{progressMultiplier:n}=r,l=t.params.centeredSlides;if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${e}px))`)}for(let s=0;s<e.length;s+=1){const a=e.eq(s),o=a[0].progress,d=Math.min(Math.max(a[0].progress,-r.limitProgress),r.limitProgress);let c=d;l||(c=Math.min(Math.max(a[0].originalProgress,-r.limitProgress),r.limitProgress));const p=a[0].swiperSlideOffset,u=[t.params.cssMode?-p-t.translate:-p,0,0],h=[0,0,0];let m=!1;t.isHorizontal()||(u[1]=u[0],u[0]=0);
6589let f={translate:[0,0,0],rotate:[0,0,0],scale:1,opacity:1};d<0?(f=r.next,m=!0):d>0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),a[0].style.zIndex=-Math.abs(Math.round(o))+e.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=a.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=ie(r,a)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=se(r,a);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:e=>{const{transformEl:s}=t.params.creativeEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},perspective:()=>t.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cardsEffect:{slideShadows:!0,transformEl:null,rotate:!0}}),te({effect:"cards",swiper:t,on:a,setTranslate:()=>{const{slides:e,activeIndex:s}=t,a=t.params.cardsEffect,{startTranslate:i,isTouched:r}=t.touchEventsData,n=t.translate;for(let l=0;l<e.length;l+=1){const o=e.eq(l),d=o[0].progress,c=Math.min(Math.max(d,-4),4);let p=o[0].swiperSlideOffset;t.params.centeredSlides&&!t.params.cssMode&&t.$wrapperEl.transform(`translateX(${t.minTranslate()}px)`),t.params.centeredSlides&&t.params.cssMode&&(p-=e[0].swiperSlideOffset);let u=t.params.cssMode?-p-t.translate:-p,h=0;const m=-100*Math.abs(c);let f=1,g=-2*c,v=8-.75*Math.abs(c);const w=t.virtual&&t.params.virtual.enabled?t.virtual.from+l:l,b=(w===s||w===s-1)&&c>0&&c<1&&(r||t.params.cssMode)&&n<i,x=(w===s||w===s+1)&&c<0&&c>-1&&(r||t.params.cssMode)&&n>i;if(b||x){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!t.isHorizontal()){const e=h;h=u,u=e}const y=c<0?""+(1+(1-f)*c):""+(1-(1-f)*c),E=`\n        translate3d(${u}, ${h}, ${m}px)\n        rotateZ(${a.rotate?g:0}deg)\n        scale(${y})\n      `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=ie(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+e.length;se(a,o).transform(E)}},setTransition:e=>{const{transformEl:s}=t.params.cardsEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})}];return V.use(re),V}));
6590;
6591(function (global, factory) {
6592  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
6593  typeof define === 'function' && define.amd ? define(['exports'], factory) :
6594  (global = global || self, factory(global.window = global.window || {}));
6595}(this, (function (exports) { 'use strict';
6596
6597  function _inheritsLoose(subClass, superClass) {
6598    subClass.prototype = Object.create(superClass.prototype);
6599    subClass.prototype.constructor = subClass;
6600    subClass.__proto__ = superClass;
6601  }
6602
6603  function _assertThisInitialized(self) {
6604    if (self === void 0) {
6605      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
6606    }
6607
6608    return self;
6609  }
6610
6611  /*!
6612   * GSAP 3.1.1
6613   * https://greensock.com
6614   *
6615   * @license Copyright 2008-2020, GreenSock. All rights reserved.
6616   * Subject to the terms at https://greensock.com/standard-license or for
6617   * Club GreenSock members, the agreement issued with that membership.
6618   * @author: Jack Doyle, [email protected]
6619  */
6620  var _config = {
6621    autoSleep: 120,
6622    force3D: "auto",
6623    nullTargetWarn: 1,
6624    units: {
6625      lineHeight: ""
6626    }
6627  },
6628      _defaults = {
6629    duration: .5,
6630    overwrite: false,
6631    delay: 0
6632  },
6633      _bigNum = 1e8,
6634      _tinyNum = 1 / _bigNum,
6635      _2PI = Math.PI * 2,
6636      _HALF_PI = _2PI / 4,
6637      _gsID = 0,
6638      _sqrt = Math.sqrt,
6639      _cos = Math.cos,
6640      _sin = Math.sin,
6641      _isString = function _isString(value) {
6642    return typeof value === "string";
6643  },
6644      _isFunction = function _isFunction(value) {
6645    return typeof value === "function";
6646  },
6647      _isNumber = function _isNumber(value) {
6648    return typeof value === "number";
6649  },
6650      _isUndefined = function _isUndefined(value) {
6651    return typeof value === "undefined";
6652  },
6653      _isObject = function _isObject(value) {
6654    return typeof value === "object";
6655  },
6656      _isNotFalse = function _isNotFalse(value) {
6657    return value !== false;
6658  },
6659      _windowExists = function _windowExists() {
6660    return typeof window !== "undefined";
6661  },
6662      _isFuncOrString = function _isFuncOrString(value) {
6663    return _isFunction(value) || _isString(value);
6664  },
6665      _isArray = Array.isArray,
6666      _strictNumExp = /(?:-?\.?\d|\.)+/gi,
6667      _numExp = /[-+=\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/g,
6668      _complexStringNumExp = /[-+=\.]*\d+(?:\.|e-|e)*\d*/gi,
vendor: 8,463 bytes, lines 6669-6982
6669      _parenthesesExp = /\(([^()]+)\)/i,
6670      _relExp = /[\+-]=-?[\.\d]+/,
6671      _delimitedValueExp = /[#\-+\.]*\b[a-z\d-=+%.]+/gi,
6672      _globalTimeline,
6673      _win,
6674      _coreInitted,
6675      _doc,
6676      _globals = {},
6677      _installScope = {},
6678      _coreReady,
6679      _install = function _install(scope) {
6680    return (_installScope = _merge(scope, _globals)) && gsap;
6681  },
6682      _missingPlugin = function _missingPlugin(property, value) {
6683    return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()");
6684  },
6685      _warn = function _warn(message, suppress) {
6686    return !suppress && console.warn(message);
6687  },
6688      _addGlobal = function _addGlobal(name, obj) {
6689    return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;
6690  },
6691      _emptyFunc = function _emptyFunc() {
6692    return 0;
6693  },
6694      _reservedProps = {},
6695      _lazyTweens = [],
6696      _lazyLookup = {},
6697      _lastRenderedFrame,
6698      _plugins = {},
6699      _effects = {},
6700      _nextGCFrame = 30,
6701      _harnessPlugins = [],
6702      _callbackNames = "onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt",
6703      _harness = function _harness(targets) {
6704    var target = targets[0],
6705        harnessPlugin,
6706        i;
6707
6708    if (!_isObject(target) && !_isFunction(target)) {
6709      targets = [targets];
6710    }
6711
6712    if (!(harnessPlugin = (target._gsap || {}).harness)) {
6713      i = _harnessPlugins.length;
6714
6715      while (i-- && !_harnessPlugins[i].targetTest(target)) {}
6716
6717      harnessPlugin = _harnessPlugins[i];
6718    }
6719
6720    i = targets.length;
6721
6722    while (i--) {
6723      targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);
6724    }
6725
6726    return targets;
6727  },
6728      _getCache = function _getCache(target) {
6729    return target._gsap || _harness(toArray(target))[0]._gsap;
6730  },
6731      _getProperty = function _getProperty(target, property) {
6732    var currentValue = target[property];
6733    return _isFunction(currentValue) ? target[property]() : _isUndefined(currentValue) && target.getAttribute(property) || currentValue;
6734  },
6735      _forEachName = function _forEachName(names, func) {
6736    return (names = names.split(",")).forEach(func) || names;
6737  },
6738      _round = function _round(value) {
6739    return Math.round(value * 10000) / 10000;
6740  },
6741      _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {
6742    var l = toFind.length,
6743        i = 0;
6744
6745    for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}
6746
6747    return i < l;
6748  },
6749      _parseVars = function _parseVars(params, type, parent) {
6750    var isLegacy = _isNumber(params[1]),
6751        varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),
6752        vars = params[varsIndex],
6753        irVars;
6754
6755    if (isLegacy) {
6756      vars.duration = params[1];
6757    }
6758
6759    vars.parent = parent;
6760
6761    if (type) {
6762      irVars = vars;
6763
6764      while (parent && !("immediateRender" in irVars)) {
6765        irVars = parent.vars.defaults || {};
6766        parent = _isNotFalse(parent.vars.inherit) && parent.parent;
6767      }
6768
6769      vars.immediateRender = _isNotFalse(irVars.immediateRender);
6770
6771      if (type < 2) {
6772        vars.runBackwards = 1;
6773      } else {
6774        vars.startAt = params[varsIndex - 1];
6775      }
6776    }
6777
6778    return vars;
6779  },
6780      _lazyRender = function _lazyRender() {
6781    var l = _lazyTweens.length,
6782        a = _lazyTweens.slice(0),
6783        i,
6784        tween;
6785
6786    _lazyLookup = {};
6787    _lazyTweens.length = 0;
6788
6789    for (i = 0; i < l; i++) {
6790      tween = a[i];
6791
6792      if (tween && tween._lazy) {
6793        tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0;
6794      }
6795    }
6796  },
6797      _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {
6798    if (_lazyTweens.length) {
6799      _lazyRender();
6800    }
6801
6802    animation.render(time, suppressEvents, force);
6803
6804    if (_lazyTweens.length) {
6805      _lazyRender();
6806    }
6807  },
6808      _numericIfPossible = function _numericIfPossible(value) {
6809    var n = parseFloat(value);
6810    return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : value;
6811  },
6812      _passThrough = function _passThrough(p) {
6813    return p;
6814  },
6815      _setDefaults = function _setDefaults(obj, defaults) {
6816    for (var p in defaults) {
6817      if (!(p in obj)) {
6818        obj[p] = defaults[p];
6819      }
6820    }
6821
6822    return obj;
6823  },
6824      _setKeyframeDefaults = function _setKeyframeDefaults(obj, defaults) {
6825    for (var p in defaults) {
6826      if (!(p in obj) && p !== "duration" && p !== "ease") {
6827        obj[p] = defaults[p];
6828      }
6829    }
6830  },
6831      _merge = function _merge(base, toMerge) {
6832    for (var p in toMerge) {
6833      base[p] = toMerge[p];
6834    }
6835
6836    return base;
6837  },
6838      _mergeDeep = function _mergeDeep(base, toMerge) {
6839    for (var p in toMerge) {
6840      base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p];
6841    }
6842
6843    return base;
6844  },
6845      _copyExcluding = function _copyExcluding(obj, excluding) {
6846    var copy = {},
6847        p;
6848
6849    for (p in obj) {
6850      if (!(p in excluding)) {
6851        copy[p] = obj[p];
6852      }
6853    }
6854
6855    return copy;
6856  },
6857      _inheritDefaults = function _inheritDefaults(vars) {
6858    var parent = vars.parent || _globalTimeline,
6859        func = vars.keyframes ? _setKeyframeDefaults : _setDefaults;
6860
6861    if (_isNotFalse(vars.inherit)) {
6862      while (parent) {
6863        func(vars, parent.vars.defaults);
6864        parent = parent.parent;
6865      }
6866    }
6867
6868    return vars;
6869  },
6870      _arraysMatch = function _arraysMatch(a1, a2) {
6871    var i = a1.length,
6872        match = i === a2.length;
6873
6874    while (match && i-- && a1[i] === a2[i]) {}
6875
6876    return i < 0;
6877  },
6878      _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {
6879    if (firstProp === void 0) {
6880      firstProp = "_first";
6881    }
6882
6883    if (lastProp === void 0) {
6884      lastProp = "_last";
6885    }
6886
6887    var prev = parent[lastProp],
6888        t;
6889
6890    if (sortBy) {
6891      t = child[sortBy];
6892
6893      while (prev && prev[sortBy] > t) {
6894        prev = prev._prev;
6895      }
6896    }
6897
6898    if (prev) {
6899      child._next = prev._next;
6900      prev._next = child;
6901    } else {
6902      child._next = parent[firstProp];
6903      parent[firstProp] = child;
6904    }
6905
6906    if (child._next) {
6907      child._next._prev = child;
6908    } else {
6909      parent[lastProp] = child;
6910    }
6911
6912    child._prev = prev;
6913    child.parent = parent;
6914    return child;
6915  },
6916      _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {
6917    if (firstProp === void 0) {
6918      firstProp = "_first";
6919    }
6920
6921    if (lastProp === void 0) {
6922      lastProp = "_last";
6923    }
6924
6925    var prev = child._prev,
6926        next = child._next;
6927
6928    if (prev) {
6929      prev._next = next;
6930    } else if (parent[firstProp] === child) {
6931      parent[firstProp] = next;
6932    }
6933
6934    if (next) {
6935      next._prev = prev;
6936    } else if (parent[lastProp] === child) {
6937      parent[lastProp] = prev;
6938    }
6939
6940    child._dp = parent;
6941    child._next = child._prev = child.parent = null;
6942  },
6943      _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {
6944    if (child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren)) {
6945      child.parent.remove(child);
6946    }
6947
6948    child._act = 0;
6949  },
6950      _uncache = function _uncache(animation) {
6951    var a = animation;
6952
6953    while (a) {
6954      a._dirty = 1;
6955      a = a.parent;
6956    }
6957
6958    return animation;
6959  },
6960      _recacheAncestors = function _recacheAncestors(animation) {
6961    var parent = animation.parent;
6962
6963    while (parent && parent.parent) {
6964      parent._dirty = 1;
6965      parent.totalDuration();
6966      parent = parent.parent;
6967    }
6968
6969    return animation;
6970  },
6971      _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {
6972    return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);
6973  },
6974      _elapsedCycleDuration = function _elapsedCycleDuration(animation) {
6975    return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;
6976  },
6977      _animationCycle = function _animationCycle(tTime, cycleDuration) {
6978    return (tTime /= cycleDuration) && ~~tTime === tTime ? ~~tTime - 1 : ~~tTime;
6979  },
6980      _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {
6981    return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);
6982  },
6983      _addToTimeline = function _addToTimeline(timeline, child, position) {
6984    child.parent && _removeFromParent(child);
6985    child._start = position + child._delay;
6986    child._end = child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0);
6987
6988    _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0);
6989
6990    timeline._recent = child;
6991
6992    if (child._time || !child._dur && child._initted) {
6993      var curTime = (timeline.rawTime() - child._start) * child._ts;
6994
6995      if (!child._dur || _clamp(0, child.totalDuration(), curTime) - child._tTime > _tinyNum) {
6996        child.render(curTime, true);
6997      }
6998    }
6999
7000    _uncache(timeline);
7001
7002    if (timeline._dp && timeline._time >= timeline._dur && timeline._ts && timeline._dur < timeline.duration()) {
7003      var tl = timeline;
7004
7005      while (tl._dp) {
7006        tl.totalTime(tl._tTime, true);
7007        tl = tl._dp;
7008      }
7009    }
7010
7011    return timeline;
7012  },
7013      _attemptInitTween = function _attemptInitTween(tween, totalTime, force, suppressEvents) {
7014    _initTween(tween, totalTime);
7015
7016    if (!tween._initted) {
7017      return 1;
7018    }
7019
7020    if (!force && tween._pt && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {
7021      _lazyTweens.push(tween);
7022
7023      tween._lazy = [totalTime, suppressEvents];
7024      return 1;
7025    }
7026  },
7027      _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {
7028    var prevRatio = tween._zTime < 0 ? 0 : 1,
7029        ratio = totalTime < 0 ? 0 : 1,
7030        repeatDelay = tween._rDelay,
7031        tTime = 0,
7032        pt,
7033        iteration,
7034        prevIteration;
7035
7036    if (repeatDelay && tween._repeat) {
7037      tTime = _clamp(0, tween._tDur, totalTime);
7038      iteration = _animationCycle(tTime, repeatDelay);
7039      prevIteration = _animationCycle(tween._tTime, repeatDelay);
7040
7041      if (iteration !== prevIteration) {
7042        prevRatio = 1 - ratio;
7043
7044        if (tween.vars.repeatRefresh && tween._initted) {
7045          tween.invalidate();
7046        }
7047      }
7048    }
7049
7050    if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents)) {
7051      return;
7052    }
7053
7054    if (ratio !== prevRatio || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {
7055      tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0);
7056      tween.ratio = ratio;
7057
7058      if (tween._from) {
7059        ratio = 1 - ratio;
7060      }
7061
7062      tween._time = 0;
7063      tween._tTime = tTime;
7064
7065      if (!suppressEvents) {
7066        _callback(tween, "onStart");
7067      }
7068
7069      pt = tween._pt;
7070
7071      while (pt) {
7072        pt.r(ratio, pt.d);
7073        pt = pt._next;
7074      }
7075
7076      if (!ratio && tween._startAt && !tween._onUpdate && tween._start) {
7077        tween._startAt.render(totalTime, true, force);
7078      }
7079
7080      if (tween._onUpdate && !suppressEvents) {
7081        _callback(tween, "onUpdate");
7082      }
7083
7084      if (tTime && tween._repeat && !suppressEvents && tween.parent) {
7085        _callback(tween, "onRepeat");
7086      }
7087
7088      if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {
7089        tween.ratio && _removeFromParent(tween, 1);
7090
7091        if (!suppressEvents) {
7092          _callback(tween, tween.ratio ? "onComplete" : "onReverseComplete", true);
7093
7094          tween._prom && tween._prom();
7095        }
7096      }
7097    }
7098  },
7099      _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {
7100    var child;
7101
7102    if (time > prevTime) {
7103      child = animation._first;
7104
7105      while (child && child._start <= time) {
7106        if (!child._dur && child.data === "isPause" && child._start > prevTime) {
7107          return child;
7108        }
7109
7110        child = child._next;
7111      }
7112    } else {
7113      child = animation._last;
7114
7115      while (child && child._start >= time) {
7116        if (!child._dur && child.data === "isPause" && child._start < prevTime) {
7117          return child;
7118        }
7119
7120        child = child._prev;
7121      }
7122    }
7123  },
7124      _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {
7125    if (animation instanceof Timeline) {
7126      return _uncache(animation);
7127    }
7128
7129    var repeat = animation._repeat;
7130    animation._tDur = !repeat ? animation._dur : repeat < 0 ? 1e12 : _round(animation._dur * (repeat + 1) + animation._rDelay * repeat);
7131
7132    _uncache(animation.parent);
7133
7134    return animation;
7135  },
7136      _zeroPosition = {
7137    _start: 0,
7138    endTime: _emptyFunc
7139  },
7140      _parsePosition = function _parsePosition(animation, position, useBuildFrom) {
7141    var labels = animation.labels,
7142        recent = animation._recent || _zeroPosition,
7143        clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,
7144        i,
7145        offset;
7146
7147    if (_isString(position) && (isNaN(position) || position in labels)) {
7148      i = position.charAt(0);
7149
7150      if (i === "<" || i === ">") {
7151        return (i === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0);
7152      }
7153
7154      i = position.indexOf("=");
7155
7156      if (i < 0) {
7157        if (!(position in labels)) {
7158          labels[position] = clippedDuration;
7159        }
7160
7161        return labels[position];
7162      }
7163
7164      offset = +(position.charAt(i - 1) + position.substr(i + 1));
7165      return i > 1 ? _parsePosition(animation, position.substr(0, i - 1)) + offset : clippedDuration + offset;
7166    }
7167
7168    return position == null ? clippedDuration : +position;
7169  },
7170      _conditionalReturn = function _conditionalReturn(value, func) {
7171    return value || value === 0 ? func(value) : func;
7172  },
7173      _clamp = function _clamp(min, max, value) {
7174    return value < min ? min : value > max ? max : value;
7175  },
7176      getUnit = function getUnit(value) {
7177    return (value + "").substr((parseFloat(value) + "").length);
7178  },
7179      clamp = function clamp(min, max, value) {
7180    return _conditionalReturn(value, function (v) {
7181      return _clamp(min, max, v);
7182    });
7183  },
7184      _slice = [].slice,
7185      _isArrayLike = function _isArrayLike(value, nonEmpty) {
7186    return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;
7187  },
7188      _flatten = function _flatten(ar, leaveStrings, accumulator) {
7189    if (accumulator === void 0) {
7190      accumulator = [];
7191    }
7192
7193    return ar.forEach(function (value) {
7194      var _accumulator;
7195
7196      return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);
7197    }) || accumulator;
7198  },
7199      toArray = function toArray(value, leaveStrings) {
7200    return _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call(_doc.querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];
7201  },
7202      shuffle = function shuffle(a) {
7203    return a.sort(function () {
7204      return .5 - Math.random();
7205    });
7206  },
7207      distribute = function distribute(v) {
7208    if (_isFunction(v)) {
7209      return v;
7210    }
7211
7212    var vars = _isObject(v) ? v : {
7213      each: v
7214    },
7215        ease = _parseEase(vars.ease),
7216        from = vars.from || 0,
7217        base = parseFloat(vars.base) || 0,
7218        cache = {},
7219        isDecimal = from > 0 && from < 1,
7220        ratios = isNaN(from) || isDecimal,
7221        axis = vars.axis,
7222        ratioX = from,
7223        ratioY = from;
7224
7225    if (_isString(from)) {
7226      ratioX = ratioY = {
7227        center: .5,
7228        edges: .5,
7229        end: 1
7230      }[from] || 0;
7231    } else if (!isDecimal && ratios) {
7232      ratioX = from[0];
7233      ratioY = from[1];
7234    }
7235
7236    return function (i, target, a) {
7237      var l = (a || vars).length,
7238          distances = cache[l],
7239          originX,
7240          originY,
7241          x,
7242          y,
7243          d,
7244          j,
7245          max,
7246          min,
7247          wrapAt;
7248
7249      if (!distances) {
7250        wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1];
7251
7252        if (!wrapAt) {
7253          max = -_bigNum;
7254
7255          while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}
7256
7257          wrapAt--;
7258        }
7259
7260        distances = cache[l] = [];
7261        originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;
7262        originY = ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;
7263        max = 0;
7264        min = _bigNum;
7265
7266        for (j = 0; j < l; j++) {
7267          x = j % wrapAt - originX;
7268          y = originY - (j / wrapAt | 0);
7269          distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x);
7270
7271          if (d > max) {
7272            max = d;
7273          }
7274
7275          if (d < min) {
7276            min = d;
7277          }
7278        }
7279
7280        from === "random" && shuffle(distances);
7281        distances.max = max - min;
7282        distances.min = min;
7283        distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1);
7284        distances.b = l < 0 ? base - l : base;
7285        distances.u = getUnit(vars.amount || vars.each) || 0;
7286        ease = ease && l < 0 ? _invertEase(ease) : ease;
7287      }
7288
7289      l = (distances[i] - distances.min) / distances.max || 0;
7290      return _round(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u;
7291    };
7292  },
7293      _roundModifier = function _roundModifier(v) {
7294    var p = v < 1 ? Math.pow(10, (v + "").length - 2) : 1;
7295    return function (raw) {
7296      return ~~(Math.round(parseFloat(raw) / v) * v * p) / p + (_isNumber(raw) ? 0 : getUnit(raw));
7297    };
7298  },
7299      snap = function snap(snapTo, value) {
7300    var isArray = _isArray(snapTo),
7301        radius,
7302        is2D;
7303
7304    if (!isArray && _isObject(snapTo)) {
7305      radius = isArray = snapTo.radius || _bigNum;
7306
7307      if (snapTo.values) {
7308        snapTo = toArray(snapTo.values);
7309
7310        if (is2D = !_isNumber(snapTo[0])) {
7311          radius *= radius;
7312        }
7313      } else {
7314        snapTo = _roundModifier(snapTo.increment);
7315      }
7316    }
7317
7318    return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {
7319      is2D = snapTo(raw);
7320      return Math.abs(is2D - raw) <= radius ? is2D : raw;
7321    } : function (raw) {
7322      var x = parseFloat(is2D ? raw.x : raw),
7323          y = parseFloat(is2D ? raw.y : 0),
7324          min = _bigNum,
7325          closest = 0,
7326          i = snapTo.length,
7327          dx,
7328          dy;
7329
7330      while (i--) {
7331        if (is2D) {
7332          dx = snapTo[i].x - x;
7333          dy = snapTo[i].y - y;
7334          dx = dx * dx + dy * dy;
7335        } else {
7336          dx = Math.abs(snapTo[i] - x);
7337        }
7338
7339        if (dx < min) {
7340          min = dx;
7341          closest = i;
7342        }
7343      }
7344
7345      closest = !radius || min <= radius ? snapTo[closest] : raw;
7346      return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);
7347    });
7348  },
7349      random = function random(min, max, roundingIncrement, returnFunction) {
7350    return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {
7351      return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e
vendor: 4,657 bytes, lines 7351-7511
7351-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && ~~(Math.round((min + Math.random() * (max - min)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;
7352    });
7353  },
7354      pipe = function pipe() {
7355    for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {
7356      functions[_key] = arguments[_key];
7357    }
7358
7359    return function (value) {
7360      return functions.reduce(function (v, f) {
7361        return f(v);
7362      }, value);
7363    };
7364  },
7365      unitize = function unitize(func, unit) {
7366    return function (value) {
7367      return func(parseFloat(value)) + (unit || getUnit(value));
7368    };
7369  },
7370      normalize = function normalize(min, max, value) {
7371    return mapRange(min, max, 0, 1, value);
7372  },
7373      _wrapArray = function _wrapArray(a, wrapper, value) {
7374    return _conditionalReturn(value, function (index) {
7375      return a[~~wrapper(index)];
7376    });
7377  },
7378      wrap = function wrap(min, max, value) {
7379    var range = max - min;
7380    return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {
7381      return (range + (value - min) % range) % range + min;
7382    });
7383  },
7384      wrapYoyo = function wrapYoyo(min, max, value) {
7385    var range = max - min,
7386        total = range * 2;
7387    return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {
7388      value = (total + (value - min) % total) % total;
7389      return min + (value > range ? total - value : value);
7390    });
7391  },
7392      _replaceRandom = function _replaceRandom(value) {
7393    var prev = 0,
7394        s = "",
7395        i,
7396        nums,
7397        end,
7398        isArray;
7399
7400    while (~(i = value.indexOf("random(", prev))) {
7401      end = value.indexOf(")", i);
7402      isArray = value.charAt(i + 7) === "[";
7403      nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);
7404      s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], +nums[1], +nums[2] || 1e-5);
7405      prev = end + 1;
7406    }
7407
7408    return s + value.substr(prev, value.length - prev);
7409  },
7410      mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {
7411    var inRange = inMax - inMin,
7412        outRange = outMax - outMin;
7413    return _conditionalReturn(value, function (value) {
7414      return outMin + (value - inMin) / inRange * outRange;
7415    });
7416  },
7417      interpolate = function interpolate(start, end, progress, mutate) {
7418    var func = isNaN(start + end) ? 0 : function (p) {
7419      return (1 - p) * start + p * end;
7420    };
7421
7422    if (!func) {
7423      var isString = _isString(start),
7424          master = {},
7425          p,
7426          i,
7427          interpolators,
7428          l,
7429          il;
7430
7431      progress === true && (mutate = 1) && (progress = null);
7432
7433      if (isString) {
7434        start = {
7435          p: start
7436        };
7437        end = {
7438          p: end
7439        };
7440      } else if (_isArray(start) && !_isArray(end)) {
7441        interpolators = [];
7442        l = start.length;
7443        il = l - 2;
7444
7445        for (i = 1; i < l; i++) {
7446          interpolators.push(interpolate(start[i - 1], start[i]));
7447        }
7448
7449        l--;
7450
7451        func = function func(p) {
7452          p *= l;
7453          var i = Math.min(il, ~~p);
7454          return interpolators[i](p - i);
7455        };
7456
7457        progress = end;
7458      } else if (!mutate) {
7459        start = _merge(_isArray(start) ? [] : {}, start);
7460      }
7461
7462      if (!interpolators) {
7463        for (p in end) {
7464          _addPropTween.call(master, start, p, "get", end[p]);
7465        }
7466
7467        func = function func(p) {
7468          return _renderPropTweens(p, master) || (isString ? start.p : start);
7469        };
7470      }
7471    }
7472
7473    return _conditionalReturn(progress, func);
7474  },
7475      _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {
7476    var labels = timeline.labels,
7477        min = _bigNum,
7478        p,
7479        distance,
7480        label;
7481
7482    for (p in labels) {
7483      distance = labels[p] - fromTime;
7484
7485      if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {
7486        label = p;
7487        min = distance;
7488      }
7489    }
7490
7491    return label;
7492  },
7493      _callback = function _callback(animation, type, executeLazyFirst) {
7494    var v = animation.vars,
7495        callback = v[type],
7496        params,
7497        scope;
7498
7499    if (!callback) {
7500      return;
7501    }
7502
7503    params = v[type + "Params"];
7504    scope = v.callbackScope || animation;
7505
7506    if (executeLazyFirst && _lazyTweens.length) {
7507      _lazyRender();
7508    }
7509
7510    return params ? callback.apply(scope, params) : callback.call(scope);
7511  },
7512      _interrupt = function _interrupt(animation) {
7513    _removeFromParent(animation);
7514
7515    if (animation.progress() < 1) {
7516      _callback(animation, "onInterrupt");
7517    }
7518
7519    return animation;
7520  },
7521      _quickTween,
7522      _createPlugin = function _createPlugin(config) {
7523    config = !config.name && config["default"] || config;
7524
7525    var name = config.name,
7526        isFunc = _isFunction(config),
7527        Plugin = name && !isFunc && config.init ? function () {
7528      this._props = [];
7529    } : config,
7530        instanceDefaults = {
7531      init: _emptyFunc,
7532      render: _renderPropTweens,
7533      add: _addPropTween,
7534      kill: _killPropTweensOf,
7535      modifier: _addPluginModifier,
7536      rawVars: 0
7537    },
7538        statics = {
7539      targetTest: 0,
7540      get: 0,
7541      getSetter: _getSetter,
7542      aliases: {},
7543      register: 0
7544    };
7545
7546    _wake();
7547
7548    if (config !== Plugin) {
7549      if (_plugins[name]) {
7550        return;
7551      }
7552
7553      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics));
7554
7555      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics)));
7556
7557      _plugins[Plugin.prop = name] = Plugin;
7558
7559      if (config.targetTest) {
7560        _harnessPlugins.push(Plugin);
7561
7562        _reservedProps[name] = 1;
7563      }
7564
7565      name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin";
7566    }
7567
7568    _addGlobal(name, Plugin);
7569
7570    if (config.register) {
7571      config.register(gsap, Plugin, PropTween);
7572    }
7573  },
7574      _255 = 255,
7575      _colorLookup = {
7576    aqua: [0, _255, _255],
7577    lime: [0, _255, 0],
7578    silver: [192, 192, 192],
7579    black: [0, 0, 0],
7580    maroon: [128, 0, 0],
7581    teal: [0, 128, 128],
7582    blue: [0, 0, _255],
7583    navy: [0, 0, 128],
7584    white: [_255, _255, _255],
7585    olive: [128, 128, 0],
7586    yellow: [_255, _255, 0],
7587    orange: [_255, 165, 0],
7588    gray: [128, 128, 128],
7589    purple: [128, 0, 128],
7590    green: [0, 128, 0],
7591    red: [_255, 0, 0],
7592    pink: [_255, 192, 203],
7593    cyan: [0, _255, _255],
7594    transparent: [_255, _255, _255, 0]
7595  },
7596      _hue = function _hue(h, m1, m2) {
7597    h = h < 0 ? h + 1 : h > 1 ? h - 1 : h;
7598    return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;
7599  },
7600      splitColor = function splitColor(v, toHSL) {
7601    var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,
7602        r,
7603        g,
7604        b,
7605        h,
7606        s,
7607        l,
7608        max,
7609        min,
7610        d,
7611        wasHSL;
7612
7613    if (!a) {
7614      if (v.substr(-1) === ",") {
7615        v = v.substr(0, v.length - 1);
7616      }
7617
7618      if (_colorLookup[v]) {
7619        a = _colorLookup[v];
7620      } else if (v.charAt(0) === "#") {
7621        if (v.length === 4) {
7622          r = v.charAt(1);
7623          g = v.charAt(2);
7624          b = v.charAt(3);
7625          v = "#" + r + r + g + g + b + b;
7626        }
7627
7628        v = parseInt(v.substr(1), 16);
7629        a = [v >> 16, v >> 8 & _255, v & _255];
7630      } else if (v.substr(0, 3) === "hsl") {
7631        a = wasHSL = v.match(_strictNumExp);
7632
7633        if (!toHSL) {
7634          h = +a[0] % 360 / 360;
7635          s = +a[1] / 100;
7636          l = +a[2] / 100;
7637          g = l <= .5 ? l * (s + 1) : l + s - l * s;
7638          r = l * 2 - g;
7639
7640          if (a.length > 3) {
7641            a[3] *= 1;
7642          }
7643
7644          a[0] = _hue(h + 1 / 3, r, g);
7645          a[1] = _hue(h, r, g);
7646          a[2] = _hue(h - 1 / 3, r, g);
7647        } else if (~v.indexOf("=")) {
7648          return v.match(_numExp);
7649        }
7650      } else {
7651        a = v.match(_strictNumExp) || _colorLookup.transparent;
7652      }
7653
7654      a = a.map(Number);
7655    }
7656
7657    if (toHSL && !wasHSL) {
7658      r = a[0] / _255;
7659      g = a[1] / _255;
7660      b = a[2] / _255;
7661      max = Math.max(r, g, b);
7662      min = Math.min(r, g, b);
7663      l = (max + min) / 2;
7664
7665      if (max === min) {
7666        h = s = 0;
7667      } else {
7668        d = max - min;
7669        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
7670        h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
7671        h *= 60;
7672      }
7673
7674      a[0] = h + .5 | 0;
7675      a[1] = s * 100 + .5 | 0;
7676      a[2] = l * 100 + .5 | 0;
7677    }
7678
7679    return a;
7680  },
7681      _formatColors = function _formatColors(s, toHSL) {
7682    var colors = (s + "").match(_colorExp),
7683        charIndex = 0,
7684        parsed = "",
7685        i,
7686        color,
7687        temp;
7688
7689    if (!colors) {
7690      return s;
7691    }
7692
7693    for (i = 0; i < colors.length; i++) {
7694      color = colors[i];
7695      temp = s.substr(charIndex, s.indexOf(color, charIndex) - charIndex);
7696      charIndex += temp.length + color.length;
7697      color = splitColor(color, toHSL);
7698
7699      if (color.length === 3) {
7700        color.push(1);
7701      }
7702
7703      parsed += temp + (toHSL ? "hsla(" + color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : "rgba(" + color.
7703join(",")) + ")";
7704    }
7705
7706    return parsed + s.substr(charIndex);
7707  },
7708      _colorExp = function () {
7709    var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3}){1,2}\\b",
7710        p;
7711
7712    for (p in _colorLookup) {
7713      s += "|" + p + "\\b";
7714    }
7715
7716    return new RegExp(s + ")", "gi");
7717  }(),
7718      _hslExp = /hsl[a]?\(/,
7719      _colorStringFilter = function _colorStringFilter(a) {
7720    var combined = a.join(" "),
7721        toHSL;
7722    _colorExp.lastIndex = 0;
7723
7724    if (_colorExp.test(combined)) {
7725      toHSL = _hslExp.test(combined);
7726      a[0] = _formatColors(a[0], toHSL);
7727      a[1] = _formatColors(a[1], toHSL);
7728    }
7729  },
7730      _tickerActive,
7731      _ticker = function () {
7732    var _getTime = Date.now,
7733        _lagThreshold = 500,
7734        _adjustedLag = 33,
7735        _startTime = _getTime(),
7736        _lastUpdate = _startTime,
7737        _gap = 1 / 60,
7738        _nextTime = _gap,
7739        _listeners = [],
7740        _id,
7741        _req,
7742        _raf,
7743        _self,
7744        _tick = function _tick(v) {
7745      var elapsed = _getTime() - _lastUpdate,
7746          manual = v === true,
7747          overlap,
7748          dispatch;
7749
7750      if (elapsed > _lagThreshold) {
7751        _startTime += elapsed - _adjustedLag;
7752      }
7753
7754      _lastUpdate += elapsed;
7755      _self.time = (_lastUpdate - _startTime) / 1000;
7756      overlap = _self.time - _nextTime;
7757
7758      if (overlap > 0 || manual) {
7759        _self.frame++;
7760        _nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);
7761        dispatch = 1;
7762      }
7763
7764      if (!manual) {
7765        _id = _req(_tick);
7766      }
7767
7768      if (dispatch) {
7769        _listeners.forEach(function (l) {
7770          return l(_self.time, elapsed, _self.frame, v);
7771        });
7772      }
7773    };
7774
7775    _self = {
7776      time: 0,
7777      frame: 0,
7778      tick: function tick() {
7779        _tick(true);
7780      },
7781      wake: function wake() {
7782        if (_coreReady) {
7783          if (!_coreInitted && _windowExists()) {
7784            _win = _coreInitted = window;
7785            _doc = _win.document || {};
7786            _globals.gsap = gsap;
7787            (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);
7788
7789            _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});
7790
7791            _raf = _win.requestAnimationFrame;
7792          }
7793
7794          _id && _self.sleep();
7795
7796          _req = _raf || function (f) {
7797            return setTimeout(f, (_nextTime - _self.time) * 1000 + 1 | 0);
7798          };
7799
7800          _tickerActive = 1;
7801
7802          _tick(2);
7803        }
7804      },
7805      sleep: function sleep() {
7806        (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id);
7807        _tickerActive = 0;
7808        _req = _emptyFunc;
7809      },
7810      lagSmoothing: function lagSmoothing(threshold, adjustedLag) {
7811        _lagThreshold = threshold || 1 / _tinyNum;
7812        _adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);
7813      },
7814      fps: function fps(_fps) {
7815        _gap = 1 / (_fps || 60);
7816        _nextTime = _self.time + _gap;
7817      },
7818      add: function add(callback) {
7819        _listeners.indexOf(callback) < 0 && _listeners.push(callback);
7820
7821        _wake();
7822      },
7823      remove: function remove(callback) {
7824        var i;
7825        ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1);
7826      },
7827      _listeners: _listeners
7828    };
7829    return _self;
7830  }(),
7831      _wake = function _wake() {
7832    return !_tickerActive && _ticker.wake();
7833  },
7834      _easeMap = {},
7835      _customEaseExp = /^[\d.\-M][\d.\-,\s]/,
7836      _quotesExp = /["']/g,
7837      _parseObjectInString = function _parseObjectInString(value) {
7838    var obj = {},
7839        split = value.substr(1, value.length - 3).split(":"),
7840        key = split[0],
7841        i = 1,
7842        l = split.length,
7843        index,
7844        val,
7845        parsedVal;
7846
7847    for (; i < l; i++) {
7848      val = split[i];
7849      index = i !== l - 1 ? val.lastIndexOf(",") : val.length;
7850      parsedVal = val.substr(0, index);
7851      obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal;
7852      key = val.substr(index + 1).trim();
7853    }
7854
7855    return obj;
7856  },
7857      _configEaseFromString = function _configEaseFromString(name) {
7858    var split = (name + "").split("("),
7859        ease = _easeMap[split[0]];
7860    return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _parenthesesExp.exec(name)[1].split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease;
7861  },
7862      _invertEase = function _invertEase(ease) {
7863    return function (p) {
7864      return 1 - ease(1 - p);
7865    };
7866  },
7867      _parseEase = function _parseEase(ease, defaultEase) {
7868    return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;
7869  },
7870      _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {
7871    if (easeOut === void 0) {
7872      easeOut = function easeOut(p) {
7873        return 1 - easeIn(1 - p);
7874      };
7875    }
7876
7877    if (easeInOut === void 0) {
7878      easeInOut = function easeInOut(p) {
7879        return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;
7880      };
7881    }
7882
7883    var ease = {
7884      easeIn: easeIn,
7885      easeOut: easeOut,
7886      easeInOut: easeInOut
7887    },
7888        lowercaseName;
7889
vendor: 2,304 bytes, lines 7890-7961
7890    _forEachName(names, function (name) {
7891      _easeMap[name] = _globals[name] = ease;
7892      _easeMap[lowercaseName = name.toLowerCase()] = easeOut;
7893
7894      for (var p in ease) {
7895        _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p];
7896      }
7897    });
7898
7899    return ease;
7900  },
7901      _easeInOutFromOut = function _easeInOutFromOut(easeOut) {
7902    return function (p) {
7903      return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;
7904    };
7905  },
7906      _configElastic = function _configElastic(type, amplitude, period) {
7907    var p1 = amplitude >= 1 ? amplitude : 1,
7908        p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),
7909        p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),
7910        easeOut = function easeOut(p) {
7911      return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;
7912    },
7913        ease = type === "out" ? easeOut : type === "in" ? function (p) {
7914      return 1 - easeOut(1 - p);
7915    } : _easeInOutFromOut(easeOut);
7916
7917    p2 = _2PI / p2;
7918
7919    ease.config = function (amplitude, period) {
7920      return _configElastic(type, amplitude, period);
7921    };
7922
7923    return ease;
7924  },
7925      _configBack = function _configBack(type, overshoot) {
7926    if (overshoot === void 0) {
7927      overshoot = 1.70158;
7928    }
7929
7930    var easeOut = function easeOut(p) {
7931      return --p * p * ((overshoot + 1) * p + overshoot) + 1;
7932    },
7933        ease = type === "out" ? easeOut : type === "in" ? function (p) {
7934      return 1 - easeOut(1 - p);
7935    } : _easeInOutFromOut(easeOut);
7936
7937    ease.config = function (overshoot) {
7938      return _configBack(type, overshoot);
7939    };
7940
7941    return ease;
7942  };
7943
7944  _forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) {
7945    var power = i < 5 ? i + 1 : i;
7946
7947    _insertEase(name + ",Power" + (power - 1), i ? function (p) {
7948      return Math.pow(p, power);
7949    } : function (p) {
7950      return p;
7951    }, function (p) {
7952      return 1 - Math.pow(1 - p, power);
7953    }, function (p) {
7954      return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;
7955    });
7956  });
7957
7958  _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;
7959
7960  _insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic());
7961
7962  (function (n, c) {
7963    var n1 = 1 / c,
7964        n2 = 2 * n1,
7965        n3 = 2.5 * n1,
7966        easeOut = function easeOut(p) {
7967      return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;
7968    };
7969
7970    _insertEase("Bounce", function (p) {
7971      return 1 - easeOut(1 - p);
7972    }, easeOut);
7973  })(7.5625, 2.75);
7974
7975  _insertEase("Expo", function (p) {
7976    return p ? Math.pow(2, 10 * (p - 1)) : 0;
7977  });
7978
7979  _insertEase("Circ", function (p) {
7980    return -(_sqrt(1 - p * p) - 1);
7981  });
7982
7983  _insertEase("Sine", function (p) {
7984    return -_cos(p * _HALF_PI) + 1;
7985  });
7986
7987  _insertEase("Back", _configBack("in"), _configBack("out"), _configBack());
7988
7989  _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {
7990    config: function config(steps, immediateStart) {
7991      if (steps === void 0) {
7992        steps = 1;
7993      }
7994
7995      var p1 = 1 / steps,
7996          p2 = steps + (immediateStart ? 0 : 1),
7997          p3 = immediateStart ? 1 : 0,
7998          max = 1 - _tinyNum;
7999      return function (p) {
8000        return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;
8001      };
8002    }
8003  };
8004  _defaults.ease = _easeMap["quad.out"];
8005  var GSCache = function GSCache(target, harness) {
8006    this.id = _gsID++;
8007    target._gsap = this;
8008    this.target = target;
8009    this.harness = harness;
8010    this.get = harness ? harness.get : _getProperty;
8011    this.set = harness ? harness.getSetter : _getSetter;
8012  };
8013  var Animation = function () {
8014    function Animation(vars, time) {
8015      var parent = vars.parent || _globalTimeline;
8016      this.vars = vars;
8017      this._dur = this._tDur = +vars.duration || 0;
8018      this._delay = +vars.delay || 0;
8019
8020      if (this._repeat = vars.repeat || 0) {
8021        this._rDelay = vars.repeatDelay || 0;
8022        this._yoyo = !!vars.yoyo || !!vars.yoyoEase;
8023
8024        _onUpdateTotalDuration(this);
8025      }
8026
8027      this._ts = 1;
8028      this.data = vars.data;
8029
8030      if (!_tickerActive) {
8031        _ticker.wake();
8032      }
8033
8034      if (parent) {
8035        _addToTimeline(parent, this, time || time === 0 ? time : parent._time);
8036      }
8037
8038      if (vars.reversed) {
8039        this.reversed(true);
8040      }
8041
8042      if (vars.paused) {
8043        this.paused(true);
8044      }
8045    }
8046
8047    var _proto = Animation.prototype;
8048
8049    _proto.delay = function delay(value) {
8050      if (value || value === 0) {
8051        this._delay = value;
8052        return this;
8053      }
8054
8055      return this._delay;
8056    };
8057
8058    _proto.duration = function duration(value) {
8059      var isSetter = arguments.length,
8060          repeat = this._repeat,
8061          repeatCycles = repeat > 0 ? repeat * ((isSetter ? value : this._dur) + this._rDelay) : 0;
8062      return isSetter ? this.totalDuration(repeat < 0 ? value : value + repeatCycles) : this.totalDuration() && this._dur;
8063    };
8064
8065    _proto.totalDuration = function totalDuration(value) {
8066      if (!arguments.length) {
8067        return this._tDur;
8068      }
8069
8070      var repeat = this._repeat,
8071          isInfinite = (value || this._rDelay) && repeat < 0;
8072      this._tDur = isInfinite ? 1e12 : value;
8073      this._dur = isInfinite ? value : (value - repeat * this._rDelay) / (repeat + 1);
8074      this._dirty = 0;
8075
8076      _uncache(this.parent);
8077
8078      return this;
8079    };
8080
8081    _proto.totalTime = function totalTime(_totalTime, suppressEvents) {
8082      _wake();
8083
8084      if (!arguments.length) {
8085        return this._tTime;
8086      }
8087
8088      var parent = this.parent || this._dp,
8089          start;
8090
8091      if (parent && parent.smoothChildTiming && this._ts) {
8092        start = this._start;
8093        this._start = parent._time - (this._ts > 0 ? _totalTime / this._ts : ((this._dirty ? this.totalDuration() : this._tDur) - _totalTime) / -this._ts);
8094        this._end += this._start - start;
8095
8096        if (!parent._dirty) {
8097          _uncache(parent);
8098        }
8099
8100        while (parent.parent) {
8101          if (parent.parent._time !== parent._start + (parent._ts > 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {
8102            parent.totalTime(parent._tTime, true);
8103          }
8104
8105          parent = parent.parent;
8106        }
8107
8108        if (!this.parent && parent.autoRemoveChildren) {
8109          _addToTimeline(parent, this, this._start - this._delay);
8110        }
8111      }
8112
8113      if (this._tTime !== _totalTime || !this._dur && !suppressEvents) {
8114        this._ts || (this._pTime = _totalTime);
8115
8116        _lazySafeRender(this, _totalTime, suppressEvents);
8117      }
8118
8119      return this;
8120    };
8121
8122    _proto.time = function time(value, suppressEvents) {
8123      return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % this._dur || (value ? this._dur : 0), suppressEvents) : this._time;
8124    };
8125
8126    _proto.totalProgress = function totalProgress(value, suppressEvents) {
8127      return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this._tTime / this.totalDuration();
8128    };
8129
8130    _proto.progress = function progress(value, suppressEvents) {
8131      return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? this._time / this._dur : this.ratio;
8132    };
8133
8134    _proto.iteration = function iteration(value, suppressEvents) {
8135      var cycleDuration = this.duration() + this._rDelay;
8136
8137      return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;
8138    };
8139
8140    _proto.timeScale = function timeScale(value) {
8141      if (!arguments.length) {
8142        return this._ts || this._pauseTS || 0;
8143      }
8144
8145      if (this._pauseTS !== null) {
8146        this._pauseTS = value;
8147        return this;
8148      }
8149
8150      var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime;
8151      this._ts = value;
8152      return _recacheAncestors(this.totalTime(tTime, true));
8153    };
8154
8155    _proto.paused = function paused(value) {
8156      var isPaused = !this._ts;
8157
8158      if (!arguments.length) {
8159        return isPaused;
8160      }
8161
8162      if (isPaused !== value) {
8163        if (value) {
8164          this._pauseTS = this._ts;
8165          this._pTime = this._tTime || Math.max(-this._delay, this.rawTime());
8166          this._ts = this._act = 0;
8167        } else {
8168          this._ts = this._pauseTS || 1;
8169          this._pauseTS = null;
8170          value = this._tTime || this._pTime;
8171
8172          if (this.progress() === 1) {
8173            this._tTime -= _tinyNum;
8174          }
8175
8176          this.totalTime(value, true);
8177        }
8178      }
8179
8180      return this;
8181    };
8182
8183    _proto.startTime = function startTime(value) {
8184      if (arguments.length) {
8185        if (this.parent && this.parent._sort) {
8186          _addToTimeline(this.parent, this, value - this._delay);
8187        }
8188
8189        return this;
8190      }
8191
8192      return this._start;
8193    };
8194
8195    _proto.endTime = function endTime(includeRepeats) {
8196      return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts);
8197    };
8198
8199    _proto.rawTime = function rawTime(wrapRepeats) {
8200      var parent = this.parent || this._dp;
8201      return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);
8202    };
8203
8204    _proto.repeat = function repeat(value) {
8205      if (arguments.length) {
8206        this._repeat = value;
8207        return _onUpdateTotalDuration(this);
8208      }
8209
8210      return this._repeat;
8211    };
8212
8213    _proto.repeatDelay = function repeatDelay(value) {
8214      if (arguments.length) {
8215        this._rDelay = value;
8216        return _onUpdateTotalDuration(this);
8217      }
8218
8219      return this._rDelay;
8220    };
8221
8222    _proto.yoyo = function yoyo(value) {
8223      if (arguments.length) {
8224        this._yoyo = value;
8225        return this;
8226      }
8227
8228      return this._yoyo;
8229    };
8230
8231    _proto.seek = function seek(position, suppressEvents) {
8232      return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));
8233    };
8234
8235    _proto.restart = function restart(includeDelay, suppressEvents) {
8236      return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));
8237    };
8238
8239    _proto.play = function play(from, suppressEvents) {
8240      if (from != null) {
8241        this.seek(from, suppressEvents);
8242      }
8243
8244      return this.reversed(false).paused(false);
8245    };
8246
8247    _proto.reverse = function reverse(from, suppressEvents) {
8248      if (from != null) {
8249        this.seek(from || this.totalDuration(), suppressEvents);
8250      }
8251
8252      return this.reversed(true).paused(false);
8253    };
8254
8255    _proto.pause = function pause(atTime, suppressEvents) {
8256      if (atTime != null) {
8257        this.seek(atTime, suppressEvents);
8258      }
8259
8260      return this.paused(true);
8261    };
8262
8263    _proto.resume = function resume() {
8264      return this.paused(false);
8265    };
8266
8267    _proto.reversed = function reversed(value) {
8268      var ts = this._ts || this._pauseTS || 0;
8269
8270      if (arguments.length) {
8271        if (value !== this.reversed()) {
8272          this[this._pauseTS === null ? "_ts" : "_pauseTS"] = Math.abs(ts) * (value ? -1 : 1);
8273          this.totalTime(this._tTime, true);
8274        }
8275
8276        return this;
8277      }
8278
8279      return ts < 0;
8280    };
8281
8282    _proto.invalidate = function invalidate() {
8283      this._initted = 0;
8284      return this;
8285    };
8286
8287    _proto.isActive = function isActive(hasStarted) {
8288      var parent = this.parent || this._dp,
8289          start = this._start,
8290          rawTime;
8291      return !!(!parent || this._ts && (this._initted || !hasStarted) && parent.isActive(hasStarted) && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);
8292    };
8293
8294    _proto.eventCallback = function eventCallback(type, callback, params) {
8295      var vars = this.vars;
8296
8297      if (arguments.length > 1) {
8298        if (!callback) {
8299          delete vars[type];
8300        } else {
8301          vars[type] = callback;
8302
8303          if (params) {
8304            vars[type + "Params"] = params;
8305          }
8306
8307          if (type === "onUpdate") {
8308            this._onUpdate = callback;
8309          }
8310        }
8311
8312        return this;
8313      }
8314
8315      return vars[type];
8316    };
8317
8318    _proto.then = function then(onFulfilled) {
8319      var self = this;
8320      return new Promise(function (resolve) {
8321        var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,
8322            _resolve = function _resolve() {
8323          var _then = self.then;
8324          self.then = null;
8325          f = f(self);
8326
8327          if (f) {
8328            if (f.then || f === self) {
8329              self.then = _then;
8330            } else if (!_isFunction(f)) {
8331              f = _passThrough;
8332            }
8333          }
8334
8335          resolve(f);
8336          self.then = _then;
8337        };
8338
8339        if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {
8340          _resolve();
8341        } else {
8342          self._prom = _resolve;
8343        }
8344      });
8345    };
8346
8347    _proto.kill = function kill() {
8348      _interrupt(this);
8349    };
8350
8351    return Animation;
8352  }();
8353
8354  _setDefaults(Animation.prototype, {
8355    _time: 0,
8356    _start: 0,
8357    _end: 0,
8358    _tTime: 0,
8359    _tDur: 0,
8360    _dirty: 0,
8361    _repeat: 0,
8362    _yoyo: false,
8363    parent: 0,
8364    _initted: false,
8365    _rDelay: 0,
8366    _ts: 1,
8367    _dp: 0,
8368    ratio: 0,
8369    _zTime: -_tinyNum,
8370    _prom: 0,
8371    _pauseTS: null
8372  });
8373
8374  var Timeline = function (_Animation) {
8375    _inheritsLoose(Timeline, _Animation);
8376
8377    function Timeline(vars, time) {
8378      var _this;
8379
8380      if (vars === void 0) {
8381        vars = {};
8382      }
8383
8384      _this = _Animation.call(this, vars, time) || this;
8385      _this.labels = {};
8386      _this.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);
8387      _this.autoRemoveChildren = !!vars.autoRemoveChildren;
8388      _this._sort = _isNotFalse(vars.sortChildren);
8389      return _this;
8390    }
8391
8392    var _proto2 = Timeline.prototype;
8393
8394    _proto2.to = function to(targets, vars, position) {
8395      new Tween(targets, _parseVars(arguments, 0, this), _parsePosition(this, _isNumber(vars) ? arguments[3] : position));
8396      return this;
8397    };
8398
8399    _proto2.from = function from(targets, vars, position) {
8400      new Tween(targets, _parseVars(arguments, 1, this), _parsePosition(this, _isNumber(vars) ? arguments[3] : position));
8401      return this;
8402    };
8403
8404    _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {
8405      new Tween(targets, _parseVars(arguments, 2, this), _parsePosition(this, _isNumber(fromVars) ? arguments[4] : position));
8406      return this;
8407    };
8408
8409    _proto2.set = function set(targets, vars, position) {
8410      vars.duration = 0;
8411      vars.parent = this;
8412
8413      if (!vars.repeatDelay) {
8414        vars.repeat = 0;
8415      }
8416
8417      vars.immediateRender = !!vars.immediateRender;
8418      new Tween(targets, vars, _parsePosition(this, position));
8419      return this;
8420    };
8421
8422    _proto2.call = function call(callback, params, position) {
8423      return _addToTimeline(this, Tween.delayedCall(0, callback, params), _parsePosition(this, position));
8424    };
8425
8426    _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
8427      vars.duration = duration;
8428      vars.stagger = vars.stagger || stagger;
8429      vars.onComplete = onCompleteAll;
8430      vars.onCompleteParams = onCompleteAllParams;
8431      vars.parent = this;
8432      new Tween(targets, vars, _parsePosition(this, position));
8433      return this;
8434    };
8435
8436    _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
8437      vars.runBackwards = 1;
8438      vars.immediateRender = _isNotFalse(vars.immediateRender);
8439      return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);
8440    };
8441
8442    _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {
8443      toVars.startAt = fromVars;
8444      toVars.immediateRender = _isNotFalse(toVars.immediateRender);
8445      return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);
8446    };
8447
8448    _proto2.render = function render(totalTime, suppressEvents, force) {
8449      var prevTime = this._time,
8450          tDur = this._dirty ? this.totalDuration() : this._tDur,
8451          dur = this._dur,
8452          tTime = totalTime > tDur - _tinyNum && totalTime >= 0 && this !== _globalTimeline ? tDur : totalTime < _tinyNum ? 0 : totalTime,
8453          crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),
8454          time,
8455          child,
8456          next,
8457          iteration,
8458          cycleDuration,
8459          prevPaused,
8460          pauseTween,
8461          timeScale,
8462          prevStart,
8463          prevIteration,
8464          yoyo,
8465          isYoyo;
8466
8467      if (tTime !== this._tTime || force || crossingStart) {
8468        if (crossingStart) {
8469          if (!dur) {
8470            prevTime = this._zTime;
8471          }
8472
8473          if (totalTime || !suppressEvents) {
8474            this._zTime = totalTime;
8475          }
8476        }
8477
8478        time = tTime;
8479        prevStart = this._start;
8480        timeScale = this._ts;
8481        prevPaused = timeScale === 0;
8482
8483        if (prevTime !== this._time && dur) {
8484          time += this._time - prevTime;
8485        }
8486
8487        if (this._repeat) {
8488          yoyo = this._yoyo;
8489          cycleDuration = dur + this._rDelay;
8490          time = _round(tTime % cycleDuration);
8491
8492          if (time > dur || tDur === tTime) {
8493            time = dur;
8494          }
8495
8496          iteration = ~~(tTime / cycleDuration);
8497
8498          if (iteration && iteration === tTime / cycleDuration) {
8499            time = dur;
8500            iteration--;
8501          }
8502
8503          prevIteration = _animationCycle(this._tTime, cycleDuration);
8504
8505          if (yoyo && iteration & 1) {
8506            time = dur - time;
8507            isYoyo = 1;
8508          }
8509
8510          if (iteration !== prevIteration && !this._lock) {
8511            var rewinding = yoyo && prevIteration & 1,
8512                doesWrap = rewinding === (yoyo && iteration & 1);
8513
8514            if (iteration < prevIteration) {
8515              rewinding = !rewinding;
8516            }
8517
8518            prevTime = rewinding ? 0 : dur;
8519            this._lock = 1;
8520            this.render(prevTime, suppressEvents, !dur)._lock = 0;
8521
8522            if (!suppressEvents && this.parent) {
8523              _callback(this, "onRepeat");
8524            }
8525
8526            this.vars.repeatRefresh && !isYoyo && this.getChildren().forEac
8526h(function (child) {
8527              return child.invalidate();
8528            });
8529
8530            if (prevTime !== this._time || prevPaused !== !this._ts) {
8531              return this;
8532            }
8533
8534            if (doesWrap) {
8535              this._lock = 2;
8536              prevTime = rewinding ? dur + 0.0001 : -0.0001;
8537              this.render(prevTime, true);
8538            }
8539
8540            this._lock = 0;
8541
8542            if (!this._ts && !prevPaused) {
8543              return this;
8544            }
8545          }
8546        }
8547
8548        if (this._hasPause && !this._forcing && this._lock < 2) {
8549          pauseTween = _findNextPauseTween(this, _round(prevTime), _round(time));
8550
8551          if (pauseTween) {
8552            tTime -= time - (time = pauseTween._start);
8553          }
8554        }
8555
8556        this._tTime = tTime;
8557        this._time = time;
8558        this._act = !timeScale;
8559
8560        if (!this._initted) {
8561          this._onUpdate = this.vars.onUpdate;
8562          this._initted = 1;
8563        }
8564
8565        if (!prevTime && time && !suppressEvents) {
8566          _callback(this, "onStart");
8567        }
8568
8569        if (time >= prevTime && totalTime >= 0) {
8570          child = this._first;
8571
8572          while (child) {
8573            next = child._next;
8574
8575            if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {
8576              if (child.parent !== this) {
8577                return this.render(totalTime, suppressEvents, force);
8578              }
8579
8580              child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);
8581
8582              if (time !== this._time || !this._ts && !prevPaused) {
8583                pauseTween = 0;
8584                break;
8585              }
8586            }
8587
8588            child = next;
8589          }
8590        } else {
8591          child = this._last;
8592          var adjustedTime = totalTime < 0 ? totalTime : time;
8593
8594          while (child) {
8595            next = child._prev;
8596
8597            if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {
8598              if (child.parent !== this) {
8599                return this.render(totalTime, suppressEvents, force);
8600              }
8601
8602              child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force);
8603
8604              if (time !== this._time || !this._ts && !prevPaused) {
8605                pauseTween = 0;
8606                break;
8607              }
8608            }
8609
8610            child = next;
8611          }
8612        }
8613
8614        if (pauseTween && !suppressEvents) {
8615          this.pause();
8616          pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;
8617
8618          if (this._ts) {
8619            this._start = prevStart;
8620            return this.render(totalTime, suppressEvents, force);
8621          }
8622        }
8623
8624        if (this._onUpdate && !suppressEvents) {
8625          _callback(this, "onUpdate", true);
8626        }
8627
8628        if (tTime === tDur && tDur >= this.totalDuration() || !tTime && this._ts < 0) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) {
8629          (totalTime || !dur) && (totalTime && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
8630
8631          if (!suppressEvents && !(totalTime < 0 && !prevTime)) {
8632            _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);
8633
8634            this._prom && this._prom();
8635          }
8636        }
8637      }
8638
8639      return this;
8640    };
8641
8642    _proto2.add = function add(child, position) {
8643      var _this2 = this;
8644
8645      if (!_isNumber(position)) {
8646        position = _parsePosition(this, position);
8647      }
8648
8649      if (!(child instanceof Animation)) {
8650        if (_isArray(child)) {
8651          child.forEach(function (obj) {
8652            return _this2.add(obj, position);
8653          });
8654          return _uncache(this);
8655        }
8656
8657        if (_isString(child)) {
8658          return this.addLabel(child, position);
8659        }
8660
8661        if (_isFunction(child)) {
8662          child = Tween.delayedCall(0, child);
8663        } else {
8664          return this;
8665        }
8666      }
8667
8668      return this !== child ? _addToTimeline(this, child, position) : this;
8669    };
8670
8671    _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {
8672      if (nested === void 0) {
8673        nested = true;
8674      }
8675
8676      if (tweens === void 0) {
8677        tweens = true;
8678      }
8679
8680      if (timelines === void 0) {
8681        timelines = true;
8682      }
8683
8684      if (ignoreBeforeTime === void 0) {
8685        ignoreBeforeTime = -_bigNum;
8686      }
8687
8688      var a = [],
8689          child = this._first;
8690
8691      while (child) {
8692        if (child._start >= ignoreBeforeTime) {
8693          if (child instanceof Tween) {
8694            if (tweens) {
8695              a.push(child);
8696            }
8697          } else {
8698            if (timelines) {
8699              a.push(child);
8700            }
8701
8702            if (nested) {
8703              a.push.apply(a, child.getChildren(true, tweens, timelines));
8704            }
8705          }
8706        }
8707
8708        child = child._next;
8709      }
8710
8711      return a;
8712    };
8713
8714    _proto2.getById = function getById(id) {
8715      var animations = this.getChildren(1, 1, 1),
8716          i = animations.length;
8717
8718      while (i--) {
8719        if (animations[i].vars.id === id) {
8720          return animations[i];
8721        }
8722      }
8723    };
8724
8725    _proto2.remove = function remove(child) {
8726      if (_isString(child)) {
8727        return this.removeLabel(child);
8728      }
8729
8730      if (_isFunction(child)) {
8731        return this.killTweensOf(child);
8732      }
8733
8734      _removeLinkedListItem(this, child);
8735
8736      if (child === this._recent) {
8737        this._recent = this._last;
8738      }
8739
8740      return _uncache(this);
8741    };
8742
8743    _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {
8744      if (!arguments.length) {
8745        return this._tTime;
8746      }
8747
8748      this._forcing = 1;
8749
8750      if (!this.parent && !this._dp && this._ts) {
8751        this._start = _ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts);
8752      }
8753
8754      _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);
8755
8756      this._forcing = 0;
8757      return this;
8758    };
8759
8760    _proto2.addLabel = function addLabel(label, position) {
8761      this.labels[label] = _parsePosition(this, position);
8762      return this;
8763    };
8764
8765    _proto2.removeLabel = function removeLabel(label) {
8766      delete this.labels[label];
8767      return this;
8768    };
8769
8770    _proto2.addPause = function addPause(position, callback, params) {
8771      var t = Tween.delayedCall(0, callback || _emptyFunc, params);
8772      t.data = "isPause";
8773      this._hasPause = 1;
8774      return _addToTimeline(this, t, _parsePosition(this, position));
8775    };
8776
8777    _proto2.removePause = function removePause(position) {
8778      var child = this._first;
8779      position = _parsePosition(this, position);
8780
8781      while (child) {
8782        if (child._start === position && child.data === "isPause") {
8783          _removeFromParent(child);
8784        }
8785
8786        child = child._next;
8787      }
8788    };
8789
8790    _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
8791      var tweens = this.getTweensOf(targets, onlyActive),
8792          i = tweens.length;
8793
8794      while (i--) {
8795        _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);
8796      }
8797
8798      return this;
8799    };
8800
8801    _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {
8802      var a = [],
8803          parsedTargets = toArray(targets),
8804          child = this._first,
8805          children;
8806
8807      while (child) {
8808        if (child instanceof Tween) {
8809          if (_arrayContainsAny(child._targets, parsedTargets) && (!onlyActive || child.isActive(onlyActive === "started"))) {
8810            a.push(child);
8811          }
8812        } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {
8813          a.push.apply(a, children);
8814        }
8815
8816        child = child._next;
8817      }
8818
8819      return a;
8820    };
8821
8822    _proto2.tweenTo = function tweenTo(position, vars) {
8823      var tl = this,
8824          endTime = _parsePosition(tl, position),
8825          startAt = vars && vars.startAt,
8826          tween = Tween.to(tl, _setDefaults({
8827        ease: "none",
8828        lazy: false,
8829        time: endTime,
8830        duration: Math.abs(endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale() || _tinyNum,
8831        onStart: function onStart() {
8832          tl.pause();
8833          var duration = Math.abs(endTime - tl._time) / tl.timeScale();
8834
8835          if (tween._dur !== duration) {
8836            tween._dur = duration;
8837            tween.render(tween._time, true, true);
8838          }
8839
8840          if (vars && vars.onStart) {
8841            vars.onStart.apply(tween, vars.onStartParams || []);
8842          }
8843        }
8844      }, vars));
8845
8846      return tween;
8847    };
8848
8849    _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {
8850      return this.tweenTo(toPosition, _setDefaults({
8851        startAt: {
8852          time: _parsePosition(this, fromPosition)
8853        }
8854      }, vars));
8855    };
8856
8857    _proto2.recent = function recent() {
8858      return this._recent;
8859    };
8860
8861    _proto2.nextLabel = function nextLabel(afterTime) {
8862      if (afterTime === void 0) {
8863        afterTime = this._time;
8864      }
8865
8866      return _getLabelInDirection(this, _parsePosition(this, afterTime));
8867    };
8868
8869    _proto2.previousLabel = function previousLabel(beforeTime) {
8870      if (beforeTime === void 0) {
8871        beforeTime = this._time;
8872      }
8873
8874      return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);
8875    };
8876
8877    _proto2.currentLabel = function currentLabel(value) {
8878      return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);
8879    };
8880
8881    _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {
8882      if (ignoreBeforeTime === void 0) {
8883        ignoreBeforeTime = 0;
8884      }
8885
8886      var child = this._first,
8887          labels = this.labels,
8888          p;
8889
8890      while (child) {
8891        if (child._start >= ignoreBeforeTime) {
8892          child._start += amount;
8893        }
8894
8895        child = child._next;
8896      }
8897
8898      if (adjustLabels) {
8899        for (p in labels) {
8900          if (labels[p] >= ignoreBeforeTime) {
8901            labels[p] += amount;
8902          }
8903        }
8904      }
8905
8906      return _uncache(this);
8907    };
8908
8909    _proto2.invalidate = function invalidate() {
8910      var child = this._first;
8911      this._lock = 0;
8912
8913      while (child) {
8914        child.invalidate();
8915        child = child._next;
8916      }
8917
8918      return _Animation.prototype.invalidate.call(this);
8919    };
8920
8921    _proto2.clear = function clear(includeLabels) {
8922      if (includeLabels === void 0) {
8923        includeLabels = true;
8924      }
8925
8926      var child = this._first,
8927          next;
8928
8929      while (child) {
8930        next = child._next;
8931        this.remove(child);
8932        child = next;
8933      }
8934
8935      this._time = this._tTime = 0;
8936
8937      if (includeLabels) {
8938        this.labels = {};
8939      }
8940
8941      return _uncache(this);
8942    };
8943
8944    _proto2.totalDuration = function totalDuration(value) {
8945      var max = 0,
8946          self = this,
8947          child = self._last,
8948          prevStart = _bigNum,
8949          repeat = self._repeat,
8950          repeatCycles = repeat * self._rDelay || 0,
8951          isInfinite = repeat < 0,
8952          prev,
8953          end;
8954
8955      if (!arguments.length) {
8956        if (self._dirty) {
8957          while (child) {
8958            prev = child._prev;
8959
8960            if (child._dirty) {
8961              child.totalDuration();
8962            }
8963
8964            if (child._start > prevStart && self._sort && child._ts && !self._lock) {
8965              self._lock = 1;
8966
8967              _addToTimeline(self, child, child._start - child._delay);
8968
8969              self._lock = 0;
8970            } else {
8971              prevStart = child._start;
8972            }
8973
8974            if (child._start < 0 && child._ts) {
8975              max -= child._start;
8976
8977              if (!self.parent && !self._dp || self.parent && self.parent.smoothChildTiming) {
8978                self._start += child._start / self._ts;
8979                self._time -= child._start;
8980                self._tTime -= child._start;
8981              }
8982
8983              self.shiftChildren(-child._start, false, -1e20);
8984              prevStart = 0;
8985            }
8986
8987            end = child._end = child._start + child._tDur / Math.abs(child._ts || child._pauseTS || _tinyNum);
8988
8989            if (end > max && child._ts) {
8990              max = _round(end);
8991            }
8992
8993            child = prev;
8994          }
8995
8996          self._dur = self === _globalTimeline && self._time > max ? self._time : Math.min(_bigNum, max);
8997          self._tDur = isInfinite && (self._dur || repeatCycles) ? 1e12 : Math.min(_bigNum, max * (repeat + 1) + repeatCycles);
8998          self._end = self._start + (self._tDur / Math.abs(self._ts || self._pauseTS || _tinyNum) || 0);
8999          self._dirty = 0;
9000        }
9001
9002        return self._tDur;
9003      }
9004
9005      return isInfinite ? self : self.timeScale(self.totalDuration() / value);
9006    };
9007
9008    Timeline.updateRoot = function updateRoot(time) {
9009      if (_globalTimeline._ts) {
9010        _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));
9011
9012        _lastRenderedFrame = _ticker.frame;
9013      }
9014
9015      if (_ticker.frame >= _nextGCFrame) {
9016        _nextGCFrame += _config.autoSleep || 120;
9017        var child = _globalTimeline._first;
9018        if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {
9019          while (child && !child._ts) {
9020            child = child._next;
9021          }
9022
9023          if (!child) {
9024            _ticker.sleep();
9025          }
9026        }
9027      }
9028    };
9029
9030    return Timeline;
9031  }(Animation);
9032
9033  _setDefaults(Timeline.prototype, {
9034    _lock: 0,
9035    _hasPause: 0,
9036    _forcing: 0
9037  });
9038
9039  var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {
9040    var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),
9041        index = 0,
9042        matchIndex = 0,
9043        result,
9044        startNums,
9045        color,
9046        endNum,
9047        chunk,
9048        startNum,
9049        hasRandom,
9050        a;
9051    pt.b = start;
9052    pt.e = end;
9053    start += "";
9054    end += "";
9055
9056    if (hasRandom = ~end.indexOf("random(")) {
9057      end = _replaceRandom(end);
9058    }
9059
9060    if (stringFilter) {
9061      a = [start, end];
9062      stringFilter(a, target, prop);
9063      start = a[0];
9064      end = a[1];
9065    }
9066
9067    startNums = start.match(_complexStringNumExp) || [];
9068
9069    while (result = _complexStringNumExp.exec(end)) {
9070      endNum = result[0];
9071      chunk = end.substring(index, result.index);
9072
9073      if (color) {
9074        color = (color + 1) % 5;
9075      } else if (chunk.substr(-5) === "rgba(") {
9076        color = 1;
9077      }
9078
9079      if (endNum !== startNums[matchIndex++]) {
9080        startNum = parseFloat(startNums[matchIndex - 1]) || 0;
9081        pt._pt = {
9082          _next: pt._pt,
9083          p: chunk || matchIndex === 1 ? chunk : ",",
9084          s: startNum,
9085          c: endNum.charAt(1) === "=" ? parseFloat(endNum.substr(2)) * (endNum.charAt(0) === "-" ? -1 : 1) : parseFloat(endNum) - startNum,
9086          m: color && color < 4 ? Math.round : 0
9087        };
9088        index = _complexStringNumExp.lastIndex;
9089      }
9090    }
9091
9092    pt.c = index < end.length ? end.substring(index, end.length) : "";
9093    pt.fp = funcParam;
9094
9095    if (_relExp.test(end) || hasRandom) {
9096      pt.e = 0;
9097    }
9098
9099    this._pt = pt;
9100    return pt;
9101  },
9102      _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam) {
9103    if (_isFunction(end)) {
9104      end = end(index || 0, target, targets);
9105    }
9106
9107    var currentValue = target[prop],
9108        parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](),
9109        setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,
9110        pt;
9111
9112    if (_isString(end)) {
9113      if (~end.indexOf("random(")) {
9114        end = _replaceRandom(end);
9115      }
9116
9117      if (end.charAt(1) === "=") {
9118        end = parseFloat(parsedStart) + parseFloat(end.substr(2)) * (end.charAt(0) === "-" ? -1 : 1) + (getUnit(parsedStart) || 0);
9119      }
9120    }
9121
9122    if (parsedStart !== end) {
9123      if (!isNaN(parsedStart + end)) {
9124        pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter);
9125
9126        if (funcParam) {
9127          pt.fp = funcParam;
9128        }
9129
9130        if (modifier) {
9131          pt.modifier(modifier, this, target);
9132        }
9133
9134        return this._pt = pt;
9135      }
9136
9137      !currentValue && !(prop in target) && _missingPlugin(prop, end);
9138      return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);
9139    }
9140  },
9141      _processVars = function _processVars(vars, index, target, targets, tween) {
9142    if (_isFunction(vars)) {
9143      vars = _parseFuncOrString(vars, tween, index, target, targets);
9144    }
9145
9146    if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars)) {
9147      return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;
9148    }
9149
9150    var copy = {},
9151        p;
9152
9153    for (p in vars) {
9154      copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);
9155    }
9156
9157    return copy;
9158  },
9159      _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {
9160    var plugin, pt, ptLookup, i;
9161
9162    if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {
9163      tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);
9164
9165      if (tween !== _quickTween) {
9166        ptLookup = tween._ptLookup[tween._targets.indexOf(target)];
9167        i = plugin._props.length;
9168
9169        while (i--) {
9170          ptLookup[plugin._props[i]] = pt;
9171        }
9172      }
9173    }
9174
9175    return plugin;
9176  },
9177      _overwritingTween,
9178      _initTween = function _initTween(tween, time) {
9179    var vars = tween.vars,
9180        ease = vars.ease,
9181        startAt = vars.startAt,
9182        immediateRender = vars.immediateRender,
9183        lazy = vars.lazy,
9184        onUpdate = vars.onUpdate,
9185        onUpdateParams = vars.onUpdateParams,
9186        callbackScope = vars.callbackScope,
9187        runBackwards = vars.runBackwards,
9188        yoyoEase = vars.yoyoEase,
9189        keyframes = vars.keyframes,
9190        autoRevert = vars.autoRevert,
9191        dur = tween._dur,
9192        prevStartAt = tween._startAt,
9193        targets = tween._targets,
9194        parent = tween.parent,
9195        fullTargets = parent && parent.data === "nested" ? parent.parent._targets : targets,
9196        autoOverwrite = tween._overwrite === "auto",
9197        tl = tween.timeline,
9198        cleanVars,
9199        i,
9200        p,
9201        pt,
9202        target,
9203        hasPriority,
9204        gsData,
9205        harness,
9206        plugin,
9207        ptLookup,
9208        index,
9209        harnessVars;
9210
9211    if (tl && (!keyframes || !ease)) {
9212      ease = "none";
9213    }
9214
9215    tween._ease = _parseEase(ease, _defaults.ease);
9216    tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;
9217
9218    if (yoyoEase && tween._yoyo && !tween._repeat) {
9219      yoyoEase = tween._yEase;
9220      tween._yEase = tween._ease;
9221      tween._ease = yoyoEase;
9222    }
9223
9224    if (!tl) {
9225      if (prevStartAt) {
9226        prevStartAt.render(-1, true).kill();
9227      }
9228
9229      if (startAt) {
9230        _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({
9231          data: "isStart",
9232          overwrite: false,
9233          parent: parent,
9234          immediateRender: true,
9235          lazy: _isNotFalse(lazy),
9236          startAt: null,
9237          delay: 0,
9238          onUpdate: onUpdate,
9239          onUpdateParams: onUpdateParams,
9240          callbackScope: callbackScope,
9241          stagger: 0
9242        }, startAt)));
9243
9244        if (immediateRender) {
9245          if (time > 0) {
9246            !autoRevert && (tween._startAt = 0);
9247          } else if (dur) {
9248            return;
9249          }
9250        }
9251      } else if (runBackwards && dur) {
9252        if (prevStartAt) {
9253          !autoRevert && (tween._startAt = 0);
9254        } else {
9255          if (time) {
9256            immediateRender = false;
9257          }
9258
9259          _removeFromParent(tween._startAt = Tween.set(targets, _merge(_copyExcluding(vars, _reservedProps), {
9260            overwrite: false,
9261            data: "isFromStart",
9262            lazy: immediateRender && _isNotFalse(lazy),
9263            immediateRender: immediateRender,
9264            stagger: 0,
9265            parent: parent
9266          })));
9267
9268          if (!immediateRender) {
9269            _initTween(tween._startAt, _tinyNum);
9270          } else if (!time) {
9271            return;
9272          }
9273        }
9274      }
9275
9276      cleanVars = _copyExcluding(vars, _reservedProps);
9277      tween._pt = 0;
9278      harness = targets[0] ? _getCache(targets[0]).harness : 0;
9279      harnessVars = harness && vars[harness.prop];
9280      lazy = dur && _isNotFalse(lazy) || lazy && !dur;
9281
9282      for (i = 0; i < targets.length; i++) {
9283        target = targets[i];
9284        gsData = target._gsap || _harness(targets)[i]._gsap;
9285        tween._ptLookup[i] = ptLookup = {};
9286
9287        if (_lazyLookup[gsData.id]) {
9288          _lazyRender();
9289        }
9290
9291        index = fullTargets === targets ? i : fullTargets.indexOf(target);
9292
9293        if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {
9294          tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);
9295
9296          plugin._props.forEach(function (name) {
9297            ptLookup[name] = pt;
9298          });
9299
9300          if (plugin.priority) {
9301            hasPriority = 1;
9302          }
9303        }
9304
9305        if (!harness || harnessVars) {
9306          for (p in cleanVars) {
9307            if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {
9308              if (plugin.priority) {
9309                hasPriority = 1;
9310              }
9311            } else {
9312              ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter);
9313            }
9314          }
9315        }
9316
9317        if (tween._op && tween._op[i]) {
9318          tween.kill(target, tween._op[i]);
9319        }
9320
9321        if (autoOverwrite && tween._pt) {
9322          _overwritingTween = tween;
9323
9324          _globalTimeline.killTweensOf(target, ptLookup, "started");
9325
9326          _overwritingTween = 0;
9327        }
9328
9329        if (tween._pt && lazy) {
9330          _lazyLookup[gsData.id] = 1;
9331        }
9332      }
9333
9334      if (hasPriority) {
9335        _sortPropTweensByPriority(tween);
9336      }
9337
9338      if (tween._onInit) {
9339        tween._onInit(tween);
9340      }
9341    }
9342
9343    tween._from = !tl && !!vars.runBackwards;
9344    tween._onUpdate = onUpdate;
9345    tween._initted = 1;
9346  },
9347      _addAliasesToVars = function _addAliasesToVars(targets, vars) {
9348    var harness = targets[0] ? _getCache(targets[0]).harness : 0,
9349        propertyAliases = harness && harness.aliases,
9350        copy,
9351        p,
9352        i,
9353        aliases;
9354
9355    if (!propertyAliases) {
9356      return vars;
9357    }
9358
9359    copy = _merge({}, vars);
9360
9361    for (p in propertyAliases) {
9362      if (p in copy) {
9363        aliases = propertyAliases[p].split(",");
9364        i = aliases.length;
9365
9366        while (i--) {
9367          copy[aliases[i]] = copy[p];
9368        }
9369      }
9370    }
9371
9372    return copy;
9373  },
9374      _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {
9375    return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value;
9376  },
9377      _staggerTweenProps = _callbackNames + ",repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase",
9378      _staggerPropsToSkip = (_staggerTweenProps + ",id,stagger,delay,duration,paused").split(",");
9379
9380  var Tween = function (_Animation2) {
9381    _inheritsLoose(Tween, _Animation2);
9382
9383    function Tween(targets, vars, time) {
9384      var _this3;
9385
9386      if (typeof vars === "number") {
9387        time.duration = vars;
9388        vars = time;
9389        time = null;
9390      }
9391
9392      _this3 = _Animation2.call(this, _inheritDefaults(vars), time) || this;
9393      var _this3$vars = _this3.vars,
9394          duration = _this3$vars.duration,
9395          delay = _this3$vars.delay,
9396          immediateRender = _this3$vars.immediateRender,
9397          stagger = _this3$vars.stagger,
9398          overwrite = _this3$vars.overwrite,
9399          keyframes = _this3$vars.keyframes,
9400          defaults = _this3$vars.defaults,
9401          parsedTargets = _isArray(targets) && _isNumber(targets[0]) ? [targets] : toArray(targets),
9402          tl,
9403          i,
9404          copy,
9405          l,
9406          p,
9407          curTarget,
9408          staggerFunc,
9409          staggerVarsToMerge;
9410      _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://greensock.com", !_config.nullTargetWarn) || [];
9411      _this3._ptLookup = [];
9412      _this3._overwrite = overwrite;
9413
9414      if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
9415        vars = _this3.vars;
9416        tl = _this3.timeline = new Timeline({
9417          data: "nested",
9418          defaults: defaults || {}
9419        });
9420        tl.kill();
9421        tl.parent = _assertThisInitialized(_this3);
9422
9423        if (keyframes) {
9424          _setDefaults(tl.vars.defaults, {
9425            ease: "none"
9426          });
9427
9428          keyframes.forEach(function (frame) {
9429            return tl.to(parsedTargets, frame, ">");
9430          });
9431        } else {
9432          l = parsedTargets.length;
9433          staggerFunc = stagger ? distribute(stagger) : _emptyFunc;
9434
9435          if (_isObject(stagger)) {
9436            for (p in stagger) {
9437              if (~_staggerTweenProps.indexOf(p)) {
9438                if (!staggerVarsToMerge) {
9439                  staggerVarsToMerge = {};
9440                }
9441
9442                staggerVarsToMerge[p] = stagger[p];
9443              }
9444            }
9445          }
9446
9447          for (i = 0; i < l; i++) {
9448            copy = {};
9449
9450            for (p in vars) {
9451              if (_staggerPropsToSkip.indexOf(p) < 0) {
9452                copy[p] = vars[p];
9453              }
9454            }
9455
9456            copy.stagger = 0;
9457
9458            if (staggerVarsToMerge) {
9459              _merge(copy, staggerVarsToMerge);
9460            }
9461
9462            if (vars.yoyoEase && !vars.repeat) {
9463              copy.yoyoEase = vars.yoyoEase;
9464            }
9465
9466            curTarget = parsedTargets[i];
9467            copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);
9468            copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;
9469
9470            if (!stagger && l === 1 && copy.delay) {
9471              _this3._delay = delay = copy.delay;
9472              _this3._start += delay;
9473              copy.delay = 0;
9474            }
9475
9476            tl.to(curTarget, copy, staggerFunc(i, curTarget, parsedTargets));
9477          }
9478
9479          duration = delay = 0;
9480        }
9481
9482        duration || _this3.duration(duration = tl.duration());
9483      } else {
9484        _this3.timeline = 0;
9485      }
9486
9487      if (overwrite === true) {
9488        _overwritingTween = _assertThisInitialized(_this3);
9489
9490        _globalTimeline.killTweensOf(parsedTargets);
9491
9492        _overwritingTween = 0;
9493      }
9494
9495      if (immediateRender || !duration && !keyframes && _this3._start === _this3.parent._time && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && _this3.parent.data !== "nested") {
9496        _this3._tTime = -_tinyNum;
9497
9498        _this3.render(Math.max(0, -delay));
9499      }
9500
9501      return _this3;
9502    }
9503
9504    var _proto3 = Tween.prototype;
9505
9506    _proto3.render = function render(totalTime, suppressEvents, force) {
9507      var prevTime = this._time,
9508          tDur = this._tDur,
9509          dur = this._dur,
9510          tTime = totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime,
9511          time,
9512          pt,
9513          iteration,
9514          cycleDuration,
9515          prevIteration,
9516          isYoyo,
9517          ratio,
9518          timeline,
9519          yoyoEase;
9520
9521      if (!dur) {
9522        _renderZeroDurationTween(this, totalTime, suppressEvents, force);
9523      } else if (tTime !== this._tTime || !totalTime || force || this._startAt && this._zTime < 0 !== totalTime < 0) {
9524        time = tTime;
9525        timeline = this.timeline;
9526
9527        if (this._repeat) {
9528          cycleDuration = dur + this._rDelay;
9529          time = _round(tTime % cycleDuration);
9530
9531          if (time > dur) {
9532            time = dur;
9533          }
9534
9535          iteration = ~~(tTime / cycleDuration);
9536
9537          if (iteration && iteration === tTime / cycleDuration) {
9538            time = dur;
9539            iteration--;
9540          }
9541
9542          isYoyo = this._yoyo && iteration & 1;
9543
9544          if (isYoyo) {
9545            yoyoEase = this._yEase;
9546            time = dur - time;
9547          }
9548
9549          prevIteration = _animationCycle(this._tTime, cycleDuration);
9550
9551          if (time === prevTime && !force && this._initted) {
9552            return this;
9553          }
9554
9555          if (iteration !== prevIteration) {
9556            if (this.vars.repeatRefresh && !isYoyo && !this._lock) {
9557              this._lock = force = 1;
9558              this.render(cycleDuration * iteration, true).invalidate()._lock = 0;
9559            }
9560          }
9561        }
9562
9563        if (!this._initted && _attemptInitTween(this, time, force, suppressEvents)) {
9564          this._tTime = 0;
9565          return this;
9566        }
9567
9568        this._tTime = tTime;
9569        this._time = time;
9570
9571        if (!this._act && this._ts) {
9572          this._act = 1;
9573          this._lazy = 0;
9574        }
9575
9576        this.ratio = ratio = (yoyoEase || this._ease)(time / dur);
9577
9578        if (this._from) {
9579          this.ratio = ratio = 1 - ratio;
9580        }
9581
9582        if (!prevTime && time && !suppressEvents) {
9583          _callback(this, "onStart");
9584        }
9585
9586        pt = this._pt;
9587
9588        while (pt) {
9589          pt.r(ratio, pt.d);
9590          pt = pt._next;
9591        }
9592
9593        timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * ratio, suppressEvents, force) || this._startAt && (this._zTime = totalTime);
9594
9595        if (this._onUpdate && !suppressEvents) {
9596          if (totalTime < 0 && this._startAt) {
9597            this._startAt.render(totalTime, true, force);
9598          }
9599
9600          _callback(this, "onUpdate");
9601        }
9602
9603        if (this._repeat) if (iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent) {
9604          _callback(this, "onRepeat");
9605        }
9606
9607        if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {
9608          if (totalTime < 0 && this._startAt && !this._onUpdate) {
9609            this._startAt.render(totalTime, true, force);
9610          }
9611
9612          (totalTime || !dur) && (totalTime && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
9613
9614          if (!suppressEvents && !(totalTime < 0 && !prevTime)) {
9615            _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);
9616
9617            this._prom && this._prom();
9618          }
9619        }
9620      }
9621
9622      return this;
9623    };
9624
9625    _proto3.targets = function targets() {
9626      return this._targets;
9627    };
9628
9629    _proto3.invalidate = function invalidate() {
9630      this._pt = this._op = this._startAt = this._onUpdate = this._act = this._lazy = 0;
9631      this._ptLookup = [];
9632
9633      if (this.timeline) {
9634        this.timeline.invalidate();
9635      }
9636
9637      return _Animation2.prototype.invalidate.call(this);
9638    };
9639
9640    _proto3.kill = function kill(targets, vars) {
9641      if (vars === void 0) {
9642        vars = "all";
9643      }
9644
9645      if (!targets && (!vars || vars === "all")) {
9646        this._lazy = 0;
9647
9648        if (this.parent) {
9649          return _interrupt(this);
9650        }
9651      }
9652
9653      if (this.timeline) {
9654        this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true);
9655        return this;
9656      }
9657
9658      var parsedTargets = this._targets,
9659          killingTargets = targets ? toArray(targets) : parsedTargets,
9660          propTweenLookup = this._ptLookup,
9661          firstPT = this._pt,
9662          overwrittenProps,
9663          curLookup,
9664          curOverwriteProps,
9665          props,
9666          p,
9667          pt,
9668          i;
9669
9670      if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) {
9671        return _interrupt(this);
9672      }
9673
9674      overwrittenProps = this._op = this._op || [];
9675
9676      if (vars !== "all") {
9677        if (_isString(vars)) {
9678          p = {};
9679
9680          _forEachName(vars, function (name) {
9681            return p[name] = 1;
9682          });
9683
9684          vars = p;
9685        }
9686
9687        vars = _addAliasesToVars(parsedTargets, vars);
9688      }
9689
9690      i = parsedTargets.length;
9691
9692      while (i--) {
9693        if (~killingTargets.indexOf(parsedTargets[i])) {
9694          curLookup = propTweenLookup[i];
9695
9696          if (vars === "all") {
9697            overwrittenProps[i] = vars;
9698            props = curLookup;
9699            curOverwriteProps = {};
9700          } else {
9701            curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};
9702            props = vars;
9703          }
9704
9705          for (p in props) {
9706            pt = curLookup && curLookup[p];
9707
9708            if (pt) {
9709              if (!("kill" in pt.d) || pt.d.kill(p) === true) {
9710                _removeLinkedListItem(this, pt, "_pt");
9711              }
9712
9713              delete curLookup[p];
9714            }
9715
9716            if (curOverwriteProps !== "all") {
9717              curOverwriteProps[p] = 1;
9718            }
9719          }
9720        }
9721      }
9722
9723      if (this._initted && !this._pt && firstPT) {
9724        _interrupt(this);
9725      }
9726
9727      return this;
9728    };
9729
9730    Tween.to = function to(targets, vars) {
9731      return new Tween(targets, vars, arguments[2]);
9732    };
9733
9734    Tween.from = function from(targets, vars) {
9735      return new Tween(targets, _parseVars(arguments, 1));
9736    };
9737
9738    Tween.delayedCall = function delayedCall(delay, callback, params, scope) {
9739      return new Tween(callback, 0, {
9740        immediateRender: false,
9741        lazy: false,
9742        overwrite: false,
9743        delay: delay,
9744        onComplete: callback,
9745        onReverseComplete: callback,
9746        onCompleteParams: params,
9747        onReverseCompleteParams: params,
9748        callbackScope: scope
9749      });
9750    };
9751
9752    Tween.fromTo = function fromTo(targets, fromVars, toVars) {
9753      return new Tween(targets, _parseVars(arguments, 2));
9754    };
9755
9756    Tween.set = function set(targets, vars) {
9757      vars.duration = 0;
9758
9759      if (!vars.repeatDelay) {
9760        vars.repeat = 0;
9761      }
9762
9763      return new Tween(targets, vars);
9764    };
9765
9766    Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {
9767      return _globalTimeline.killTweensOf(targets, props, onlyActive);
9768    };
9769
9770    return Tween;
9771  }(Animation);
9772
9773  _setDefaults(Tween.prototype, {
9774    _targets: [],
9775    _lazy: 0,
9776    _startAt: 0,
9777    _op: 0,
9778    _onInit: 0
9779  });
9780
9781  _forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) {
9782    Tween[name] = function () {
9783      var tl = new Timeline(),
9784          params = _slice.call(arguments, 0);
9785
9786      params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0);
9787      return tl[name].apply(tl, params);
9788    };
9789  });
9790
9791  var _setterPlain = function _setterPlain(target, property, value) {
9792    return target[property] = value;
9793  },
vendor: 8,755 bytes, lines 9794-10084
9794      _setterFunc = function _setterFunc(target, property, value) {
9795    return target[property](value);
9796  },
9797      _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {
9798    return target[property](data.fp, value);
9799  },
9800      _setterAttribute = function _setterAttribute(target, property, value) {
9801    return target.setAttribute(property, value);
9802  },
9803      _getSetter = function _getSetter(target, property) {
9804    return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;
9805  },
9806      _renderPlain = function _renderPlain(ratio, data) {
9807    return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000, data);
9808  },
9809      _renderBoolean = function _renderBoolean(ratio, data) {
9810    return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);
9811  },
9812      _renderComplexString = function _renderComplexString(ratio, data) {
9813    var pt = data._pt,
9814        s = "";
9815
9816    if (!ratio && data.b) {
9817      s = data.b;
9818    } else if (ratio === 1 && data.e) {
9819      s = data.e;
9820    } else {
9821      while (pt) {
9822        s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s;
9823        pt = pt._next;
9824      }
9825
9826      s += data.c;
9827    }
9828
9829    data.set(data.t, data.p, s, data);
9830  },
9831      _renderPropTweens = function _renderPropTweens(ratio, data) {
9832    var pt = data._pt;
9833
9834    while (pt) {
9835      pt.r(ratio, pt.d);
9836      pt = pt._next;
9837    }
9838  },
9839      _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {
9840    var pt = this._pt,
9841        next;
9842
9843    while (pt) {
9844      next = pt._next;
9845
9846      if (pt.p === property) {
9847        pt.modifier(modifier, tween, target);
9848      }
9849
9850      pt = next;
9851    }
9852  },
9853      _killPropTweensOf = function _killPropTweensOf(property) {
9854    var pt = this._pt,
9855        hasNonDependentRemaining,
9856        next;
9857
9858    while (pt) {
9859      next = pt._next;
9860
9861      if (pt.p === property && !pt.op || pt.op === property) {
9862        _removeLinkedListItem(this, pt, "_pt");
9863      } else if (!pt.dep) {
9864        hasNonDependentRemaining = 1;
9865      }
9866
9867      pt = next;
9868    }
9869
9870    return !hasNonDependentRemaining;
9871  },
9872      _setterWithModifier = function _setterWithModifier(target, property, value, data) {
9873    data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);
9874  },
9875      _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {
9876    var pt = parent._pt,
9877        next,
9878        pt2,
9879        first,
9880        last;
9881
9882    while (pt) {
9883      next = pt._next;
9884      pt2 = first;
9885
9886      while (pt2 && pt2.pr > pt.pr) {
9887        pt2 = pt2._next;
9888      }
9889
9890      if (pt._prev = pt2 ? pt2._prev : last) {
9891        pt._prev._next = pt;
9892      } else {
9893        first = pt;
9894      }
9895
9896      if (pt._next = pt2) {
9897        pt2._prev = pt;
9898      } else {
9899        last = pt;
9900      }
9901
9902      pt = next;
9903    }
9904
9905    parent._pt = first;
9906  };
9907
9908  var PropTween = function () {
9909    function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {
9910      this.t = target;
9911      this.s = start;
9912      this.c = change;
9913      this.p = prop;
9914      this.r = renderer || _renderPlain;
9915      this.d = data || this;
9916      this.set = setter || _setterPlain;
9917      this.pr = priority || 0;
9918      this._next = next;
9919
9920      if (next) {
9921        next._prev = this;
9922      }
9923    }
9924
9925    var _proto4 = PropTween.prototype;
9926
9927    _proto4.modifier = function modifier(func, tween, target) {
9928      this.mSet = this.mSet || this.set;
9929      this.set = _setterWithModifier;
9930      this.m = func;
9931      this.mt = target;
9932      this.tween = tween;
9933    };
9934
9935    return PropTween;
9936  }();
9937
9938  _forEachName(_callbackNames + ",parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert", function (name) {
9939    _reservedProps[name] = 1;
9940    if (name.substr(0, 2) === "on") _reservedProps[name + "Params"] = 1;
9941  });
9942
9943  _globals.TweenMax = _globals.TweenLite = Tween;
9944  _globals.TimelineLite = _globals.TimelineMax = Timeline;
9945  _globalTimeline = new Timeline({
9946    sortChildren: false,
9947    defaults: _defaults,
9948    autoRemoveChildren: true,
9949    id: "root"
9950  });
9951  _config.stringFilter = _colorStringFilter;
9952  var _gsap = {
9953    registerPlugin: function registerPlugin() {
9954      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9955        args[_key2] = arguments[_key2];
9956      }
9957
9958      args.forEach(function (config) {
9959        return _createPlugin(config);
9960      });
9961    },
9962    timeline: function timeline(vars) {
9963      return new Timeline(vars);
9964    },
9965    getTweensOf: function getTweensOf(targets, onlyActive) {
9966      return _globalTimeline.getTweensOf(targets, onlyActive);
9967    },
9968    getProperty: function getProperty(target, property, unit, uncache) {
9969      if (_isString(target)) {
9970        target = toArray(target)[0];
9971      }
9972
9973      var getter = _getCache(target || {}).get,
9974          format = unit ? _passThrough : _numericIfPossible;
9975
9976      if (unit === "native") {
9977        unit = "";
9978      }
9979
9980      return !target ? target : !property ? function (property, unit, uncache) {
9981        return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
9982      } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
9983    },
9984    quickSetter: function quickSetter(target, property, unit) {
9985      target = toArray(target);
9986
9987      if (target.length > 1) {
9988        var setters = target.map(function (t) {
9989          return gsap.quickSetter(t, property, unit);
9990        }),
9991            l = setters.length;
9992        return function (value) {
9993          var i = l;
9994
9995          while (i--) {
9996            setters[i](value);
9997          }
9998        };
9999      }
10000
10001      target = target[0] || {};
10002
10003      var Plugin = _plugins[property],
10004          cache = _getCache(target),
10005          setter = Plugin ? function (value) {
10006        var p = new Plugin();
10007        _quickTween._pt = 0;
10008        p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);
10009        p.render(1, p);
10010        _quickTween._pt && _renderPropTweens(1, _quickTween);
10011      } : cache.set(target, property);
10012
10013      return Plugin ? setter : function (value) {
10014        return setter(target, property, unit ? value + unit : value, cache, 1);
10015      };
10016    },
10017    isTweening: function isTweening(targets) {
10018      return _globalTimeline.getTweensOf(targets, true).length > 0;
10019    },
10020    defaults: function defaults(value) {
10021      if (value && value.ease) {
10022        value.ease = _parseEase(value.ease, _defaults.ease);
10023      }
10024
10025      return _mergeDeep(_defaults, value || {});
10026    },
10027    config: function config(value) {
10028      return _mergeDeep(_config, value || {});
10029    },
10030    registerEffect: function registerEffect(_ref) {
10031      var name = _ref.name,
10032          effect = _ref.effect,
10033          plugins = _ref.plugins,
10034          defaults = _ref.defaults,
10035          extendTimeline = _ref.extendTimeline;
10036      (plugins || "").split(",").forEach(function (pluginName) {
10037        return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin.");
10038      });
10039
10040      _effects[name] = function (targets, vars) {
10041        return effect(toArray(targets), _setDefaults(vars || {}, defaults));
10042      };
10043
10044      if (extendTimeline) {
10045        Timeline.prototype[name] = function (targets, vars, position) {
10046          return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}), position);
10047        };
10048      }
10049    },
10050    registerEase: function registerEase(name, ease) {
10051      _easeMap[name] = _parseEase(ease);
10052    },
10053    parseEase: function parseEase(ease, defaultEase) {
10054      return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;
10055    },
10056    getById: function getById(id) {
10057      return _globalTimeline.getById(id);
10058    },
10059    exportRoot: function exportRoot(vars, includeDelayedCalls) {
10060      if (vars === void 0) {
10061        vars = {};
10062      }
10063
10064      var tl = new Timeline(vars),
10065          child,
10066          next;
10067      tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);
10068
10069      _globalTimeline.remove(tl);
10070
10071      tl._dp = 0;
10072      tl._time = tl._tTime = _globalTimeline._time;
10073      child = _globalTimeline._first;
10074
10075      while (child) {
10076        next = child._next;
10077
10078        if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {
10079          _addToTimeline(tl, child, child._start - child._delay);
10080        }
10081
10082        child = next;
10083      }
10084
10085      _addToTimeline(_globalTimeline, tl, 0);
10086
10087      return tl;
10088    },
10089    utils: {
10090      wrap: wrap,
10091      wrapYoyo: wrapYoyo,
10092      distribute: distribute,
10093      random: random,
10094      snap: snap,
10095      normalize: normalize,
10096      getUnit: getUnit,
10097      clamp: clamp,
10098      splitColor: splitColor,
10099      toArray: toArray,
10100      mapRange: mapRange,
10101      pipe: pipe,
10102      unitize: unitize,
10103      interpolate: interpolate,
10104      shuffle: shuffle
10105    },
10106    install: _install,
10107    effects: _effects,
10108    ticker: _ticker,
10109    updateRoot: Timeline.updateRoot,
10110    plugins: _plugins,
10111    globalTimeline: _globalTimeline,
10112    core: {
10113      PropTween: PropTween,
10114      globals: _addGlobal,
10115      Tween: Tween,
10116      Timeline: Timeline,
10117      Animation: Animation,
10118      getCache: _getCache
10119    }
10120  };
10121
10122  _forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) {
10123    return _gsap[name] = Tween[name];
10124  });
10125
10126  _ticker.add(Timeline.updateRoot);
10127
10128  _quickTween = _gsap.to({}, {
10129    duration: 0
10130  });
10131
10132  var _getPluginPropTween = function _getPluginPropTween(plugin, prop
vendor: 7,621 bytes, lines 10132-10362
10132) {
10133    var pt = plugin._pt;
10134
10135    while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {
10136      pt = pt._next;
10137    }
10138
10139    return pt;
10140  },
10141      _addModifiers = function _addModifiers(tween, modifiers) {
10142    var targets = tween._targets,
10143        p,
10144        i,
10145        pt;
10146
10147    for (p in modifiers) {
10148      i = targets.length;
10149
10150      while (i--) {
10151        pt = tween._ptLookup[i][p];
10152
10153        if (pt && (pt = pt.d)) {
10154          if (pt._pt) {
10155            pt = _getPluginPropTween(pt, p);
10156          }
10157
10158          pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);
10159        }
10160      }
10161    }
10162  },
10163      _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {
10164    return {
10165      name: name,
10166      rawVars: 1,
10167      init: function init(target, vars, tween) {
10168        tween._onInit = function (tween) {
10169          var temp, p;
10170
10171          if (_isString(vars)) {
10172            temp = {};
10173
10174            _forEachName(vars, function (name) {
10175              return temp[name] = 1;
10176            });
10177
10178            vars = temp;
10179          }
10180
10181          if (modifier) {
10182            temp = {};
10183
10184            for (p in vars) {
10185              temp[p] = modifier(vars[p]);
10186            }
10187
10188            vars = temp;
10189          }
10190
10191          _addModifiers(tween, vars);
10192        };
10193      }
10194    };
10195  };
10196
10197  var gsap = _gsap.registerPlugin({
10198    name: "attr",
10199    init: function init(target, vars, tween, index, targets) {
10200      for (var p in vars) {
10201        this.add(target, "setAttribute", (target.getAttribute(p) || 0) + "", vars[p], index, targets, 0, 0, p);
10202
10203        this._props.push(p);
10204      }
10205    }
10206  }, {
10207    name: "endArray",
10208    init: function init(target, value) {
10209      var i = value.length;
10210
10211      while (i--) {
10212        this.add(target, i, target[i] || 0, value[i]);
10213      }
10214    }
10215  }, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap;
10216  Tween.version = Timeline.version = gsap.version = "3.1.1";
10217  _coreReady = 1;
10218
10219  if (_windowExists()) {
10220    _wake();
10221  }
10222
10223  var Power0 = _easeMap.Power0,
10224      Power1 = _easeMap.Power1,
10225      Power2 = _easeMap.Power2,
10226      Power3 = _easeMap.Power3,
10227      Power4 = _easeMap.Power4,
10228      Linear = _easeMap.Linear,
10229      Quad = _easeMap.Quad,
10230      Cubic = _easeMap.Cubic,
10231      Quart = _easeMap.Quart,
10232      Quint = _easeMap.Quint,
10233      Strong = _easeMap.Strong,
10234      Elastic = _easeMap.Elastic,
10235      Back = _easeMap.Back,
10236      SteppedEase = _easeMap.SteppedEase,
10237      Bounce = _easeMap.Bounce,
10238      Sine = _easeMap.Sine,
10239      Expo = _easeMap.Expo,
10240      Circ = _easeMap.Circ;
10241
10242  var _win$1,
10243      _doc$1,
10244      _docElement,
10245      _pluginInitted,
10246      _tempDiv,
10247      _tempDivStyler,
10248      _recentSetterPlugin,
10249      _windowExists$1 = function _windowExists() {
10250    return typeof window !== "undefined";
10251  },
10252      _transformProps = {},
10253      _RAD2DEG = 180 / Math.PI,
10254      _DEG2RAD = Math.PI / 180,
10255      _atan2 = Math.atan2,
10256      _bigNum$1 = 1e8,
10257      _capsExp = /([A-Z])/g,
10258      _numWithUnitExp = /[-+=\.]*\d+[\.e-]*\d*[a-z%]*/g,
10259      _horizontalExp = /(?:left|right|width|margin|padding|x)/i,
10260      _complexExp = /[\s,\(]\S/,
10261      _propertyAliases = {
10262    autoAlpha: "opacity,visibility",
10263    scale: "scaleX,scaleY",
10264    alpha: "opacity"
10265  },
10266      _renderCSSProp = function _renderCSSProp(ratio, data) {
10267    return data.set(data.t, data.p, ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u, data);
10268  },
10269      _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {
10270    return data.set(data.t, data.p, ratio === 1 ? data.e : ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u, data);
10271  },
10272      _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {
10273    return data.set(data.t, data.p, ratio ? ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u : data.b, data);
10274  },
10275      _renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {
10276    var value = data.s + data.c * ratio;
10277    data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);
10278  },
10279      _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {
10280    return data.set(data.t, data.p, ratio ? data.e : data.b, data);
10281  },
10282      _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {
10283    return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);
10284  },
10285      _setterCSSStyle = function _setterCSSStyle(target, property, value) {
10286    return target.style[property] = value;
10287  },
10288      _setterCSSProp = function _setterCSSProp(target, property, value) {
10289    return target.style.setProperty(property, value);
10290  },
10291      _setterTransform = function _setterTransform(target, property, value) {
10292    return target._gsap[property] = value;
10293  },
10294      _setterScale = function _setterScale(target, property, value) {
10295    return target._gsap.scaleX = target._gsap.scaleY = value;
10296  },
10297      _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {
10298    var cache = target._gsap;
10299    cache.scaleX = cache.scaleY = value;
10300    cache.renderTransform(ratio, cache);
10301  },
10302      _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {
10303    var cache = target._gsap;
10304    cache[property] = value;
10305    cache.renderTransform(ratio, cache);
10306  },
10307      _transformProp = "transform",
10308      _transformOriginProp = _transformProp + "Origin",
10309      _supports3D,
10310      _createElement = function _createElement(type, ns) {
10311    var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$1.createElement(type);
10312    return e.style ? e : _doc$1.createElement(type);
10313  },
10314      _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {
10315    var cs = getComputedStyle(target);
10316    return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || "";
10317  },
10318      _prefixes = "O,Moz,ms,Ms,Webkit".split(","),
10319      _checkPropPrefix = function _checkPropPrefix(property, element) {
10320    var e = element || _tempDiv,
10321        s = e.style,
10322        i = 5;
10323
10324    if (property in s) {
10325      return property;
10326    }
10327
10328    property = property.charAt(0).toUpperCase() + property.substr(1);
10329
10330    while (i-- && !(_prefixes[i] + property in s)) {}
10331
10332    return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property;
10333  },
10334      _initCore = function _initCore() {
10335    if (_windowExists$1()) {
10336      _win$1 = window;
10337      _doc$1 = _win$1.document;
10338      _docElement = _doc$1.documentElement;
10339      _tempDiv = _createElement("div") || {
10340        style: {}
10341      };
10342      _tempDivStyler = _createElement("div");
10343      _transformProp = _checkPropPrefix(_transformProp);
10344      _transformOriginProp = _checkPropPrefix(_transformOriginProp);
10345      _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0";
10346      _supports3D = !!_checkPropPrefix("perspective");
10347      _pluginInitted = 1;
10348    }
10349  },
10350      _getBBoxHack = function _getBBoxHack(swapIfPossible) {
10351    var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"),
10352        oldParent = this.parentNode,
10353        oldSibling = this.nextSibling,
10354        oldCSS = this.style.cssText,
10355        bbox;
10356
10357    _docElement.appendChild(svg);
10358
10359    svg.appendChild(this);
10360    this.style.display = "block";
10361
10362    if (swapIfPossible) {
10363      try {
10364        bbox = this.getBBox();
10365        this._gsapBBox = this.getBBox;
10366        this.getBBox = _getBBoxHack;
10367      } catch (e) {}
10368    } else if (this._gsapBBox) {
10369      bbox = this._gsapBBox();
10370    }
10371
10372    if (oldSibling) {
10373      oldParent.insertBefore(this, oldSibling);
10374    } else {
10375      oldParent.appendChild(this);
10376    }
10377
10378    _docElement.removeChild(svg);
10379
10380    this.style.cssText = oldCSS;
10381    return bbox;
10382  },
10383      _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {
10384    var i = attributesArray.length;
10385
10386    while (i--) {
10387      if (target.hasAttribute(attributesArray[i])) {
10388        return target.getAttribute(attributesArray[i]);
10389      }
10390    }
10391  },
10392      _getBBox = function _getBBox(target) {
10393    var bounds;
10394
10395    try {
10396      bounds = target.getBBox();
10397    } catch (error) {
10398      bounds = _getBBoxHack.call(target, true);
10399    }
10400
10401    return bounds && !bounds.width && !bounds.x && !bounds.y ? {
10402      x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0,
10403      y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0,
10404      width: 0,
10405      height: 0
10406    } : bounds;
10407  },
10408      _isSVG = function _isSVG(e) {
10409    return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));
10410  },
10411      _removeProperty = function _removeProperty(target, property) {
10412    if (property) {
10413      var style = target.style;
10414
10415      if (property in _transformProps) {
10416        property = _transformProp;
10417      }
10418
10419      if (style.removeProperty) {
10420        if (property.substr(0, 2) === "ms" || property.substr(0, 6) === "webkit") {
10421          property = "-" + property;
10422        }
10423
10424        style.removeProperty(property.replace(_capsExp, "-$1").toLowerCase());
10425      } else {
10426        style.removeAttribute(property);
10427      }
10428    }
10429  },
10430      _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {
10431    var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);
10432    plugin._pt = pt;
10433    pt.b = beginning;
10434    pt.e = end;
10435
10436    plugin._props.push(property);
10437
10438    return pt;
10439  },
10440      _nonConvertibleUnits = {
10441    deg: 1,
10442    rad: 1,
10443    turn: 1
10444  },
10445      _convertToUnit = function _convertToUnit(target, property, value, unit) {
10446    var curValue = parseFloat(value) || 0,
10447        curUnit = (value + "").trim().substr((curValue + "").length) || "px",
10448        style = _tempDiv.style,
10449        horizontal = _horizontalExp.test(property),
10450        isRootSVG = target.tagName.toLowerCase() === "svg",
10451        measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"),
10452        amount = 100,
10453        toPixels = unit === "px",
10454        px,
10455        parent,
10456        cache,
10457        isSVG;
10458
10459    if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {
10460      return curValue;
10461    }
10462
10463    isSVG = target.getCTM && _isSVG(target);
10464
10465    if (unit === "%" && (_transformProps[property] || ~property.indexOf("adius"))) {
10466      return _round(curValue / (isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty]) * amount);
10467    }
10468
10469    style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit);
10470    parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode;
10471
10472    if (isSVG) {
10473      parent = (target.ownerSVGElement || {}).parentNode;
10474    }
10475
10476    if (!parent || parent === _doc$1 || !parent.appendChild) {
10477      parent = _doc$1.body;
10478    }
10479
10480    cache = parent._gsap;
10481
10482    if (cache && unit === "%" && cache.width && horizontal && cache.time === _ticker.time) {
10483      return _round(curValue / cache.width * amount);
10484    } else {
10485      parent === target && (style.position = "static");
10486      parent.appendChild(_tempDiv);
10487      px = _tempDiv[measureProperty];
10488      parent.removeChild(_tempDiv);
10489      style.position = "absolute";
10490
10491      if (horizontal && unit === "%") {
10492        cache = _getCache(parent);
10493        cache.time = _ticker.time;
10494        cache.width = parent[measureProperty];
10495      }
10496    }
10497
10498    return _round(toPixels ? px * curValue / amount : amount / px * curValue);
10499  },
10500      _get = function _get(target, property, unit, uncache) {
10501    var value;
10502
10503    if (!_pluginInitted) {
10504      _initCore();
10505    }
10506
10507    if (property in _propertyAliases && property !== "transform") {
10508      property = _propertyAliases[property];
10509
10510      if (~property.indexOf(",")) {
10511        property = property.split(",")[0];
10512      }
10513    }
10514
10515    if (_transformProps[property] && property !== "transform") {
10516      value = _parseTransform(target, uncache);
10517      value = property !== "transformOrigin" ? value[property] : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + value.zOrigin + "px";
10518    } else {
10519      value = target.style[property];
10520
10521      if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) {
10522        value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0);
10523      }
10524    }
10525
10526    return unit && !~(value + "").indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value;
10527  },
10528      _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {
10529    var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),
10530        index = 0,
10531        matchIndex = 0,
10532        a,
10533        result,
10534        startValues,
10535        startNum,
10536        color,
10537        startValue,
10538        endValue,
10539        endNum,
10540        chunk,
10541        endUnit,
10542        startUnit,
10543        relative,
10544        endValues;
10545    pt.b = start;
10546    pt.e = end;
10547    start += "";
10548    end += "";
10549
10550    if (end === "auto") {
10551      target.style[prop] = end;
10552      end = _getComputedProperty(target, prop) || end;
10553      target.style[prop] = start;
10554    }
10555
10556    a = [start, end];
10557
10558    _colorStringFilter(a);
10559
10560    start = a[0];
10561    end = a[1];
10562    startValue = start.indexOf("rgba(");
10563    endValue = end.indexOf("rgba(");
10564
10565    if (!!startValue !== !!endValue) {
10566      if (startValue) {
10567        start = start.substr(startValue) + " " + start.substr(0, startValue - 1);
10568      } else {
10569        end = end.substr(endValue) + " " + end.substr(0, endValue - 1);
10570      }
10571    }
10572
10573    startValues = start.match(_numWithUnitExp) || [];
10574    endValues = end.match(_numWithUnitExp) || [];
10575
10576    if (endValues.length) {
10577      while (result = _numWithUnitExp.exec(end)) {
10578        endValue = result[0];
10579        chunk = end.substring(index, result.index);
10580
10581        if (color) {
10582          color = (color + 1) % 5;
10583        } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") {
10584          color = 1;
10585        }
10586
10587        if (endValue !== (startValue = startValues[matchIndex++] || "")) {
10588          startNum = parseFloat(startValue) || 0;
10589          startUnit = startValue.substr((startNum + "").length);
10590          relative = endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0;
10591
10592          if (relative) {
10593            endValue = endValue.substr(2);
10594          }
10595
10596          endNum = parseFloat(endValue);
10597          endUnit = endValue.substr((endNum + "").length);
10598          index = _numWithUnitExp.lastIndex - endUnit.length;
10599
10600          if (!endUnit) {
10601            endUnit = endUnit || _config.units[prop] || startUnit;
10602
10603            if (index === end.length) {
10604              end += endUnit;
10605              pt.e += endUnit;
10606            }
10607          }
10608
10609          if (startUnit !== endUnit) {
10610            startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;
10611          }
10612
10613          pt._pt = {
10614            _next: pt._pt,
10615            p: chunk || matchIndex === 1 ? chunk : ",",
10616            s: startNum,
10617            c: relative ? relative * endNum : endNum - startNum,
10618            m: color && color < 4 ? Math.round : 0
10619          };
10620        }
10621      }
10622
10623      pt.c = index < end.length ? end.substring(index, end.length) : "";
10624    } else {
10625      pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;
10626    }
10627
10628    if (_relExp.test(end)) {
10629      pt.e = 0;
10630    }
10631
10632    this._pt = pt;
10633    return pt;
10634  },
10635      _keywordToPercent = {
10636    top: "0%",
10637    bottom: "100%",
10638    left: "0%",
10639    right: "100%",
10640    center: "50%"
10641  },
10642      _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {
10643    var split = value.split(" "),
10644        x = split[0],
10645        y = split[1] || "50%";
10646
10647    if (x === "top" || x === "bottom" || y === "left" || y === "right") {
10648      value = x;
10649      x = y;
10650      y = value;
10651    }
10652
10653    split[0] = _keywordToPercent[x] || x;
10654    split[1] = _keywordToPercent[y] || y;
10655    return split.join(" ");
10656  },
10657      _renderClearProps = function _renderClearProps(ratio, data) {
10658    if (data.tween && data.tween._time === data.tween._dur) {
10659      var target = data.t,
10660          style = target.style,
10661          props = data.u,
10662          prop,
10663          clearTransforms,
10664          i;
10665
10666      if (props === "all" || props === true) {
10667        style.cssText = "";
10668        clearTransforms = 1;
10669      } else {
10670        props = props.split(",");
10671        i = props.length;
10672
10673        while (--i > -1) {
10674          prop = props[i];
10675
10676          if (_transformProps[prop]) {
10677            clearTransforms = 1;
10678            prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp;
10679          }
10680
10681          _removeProperty(target, prop);
10682        }
10683      }
10684
10685      if (clearTransforms) {
10686        _removeProperty(target, _transformProp);
10687
10688        clearTransforms = target._gsap;
10689
10690        if (clearTransforms) {
10691          if (clearTransforms.svg) {
10692            target.removeAttribute("transform");
10693          }
10694
10695          _parseTransform(target, 1);
10696        }
10697      }
10698    }
10699  },
10700      _specialProps = {
10701    clearProps: function clearProps(plugin, target, property, endValue, tween) {
vendor: 8,404 bytes, lines 10702-10970
10702      if (tween.data !== "isFromStart") {
10703        var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);
10704        pt.u = endValue;
10705        pt.pr = -10;
10706        pt.tween = tween;
10707
10708        plugin._props.push(property);
10709
10710        return 1;
10711      }
10712    }
10713  },
10714      _identity2DMatrix = [1, 0, 0, 1, 0, 0],
10715      _rotationalProperties = {},
10716      _isNullTransform = function _isNullTransform(value) {
10717    return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value;
10718  },
10719      _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {
10720    var matrixString = _getComputedProperty(target, _transformProp);
10721
10722    return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);
10723  },
10724      _getMatrix = function _getMatrix(target, force2D) {
10725    var cache = target._gsap,
10726        style = target.style,
10727        matrix = _getComputedTransformMatrixAsArray(target),
10728        parent,
10729        nextSibling,
10730        temp,
10731        addedToDOM;
10732
10733    if (cache.svg && target.getAttribute("transform")) {
10734      temp = target.transform.baseVal.consolidate().matrix;
10735      matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];
10736      return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix;
10737    } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {
10738      temp = style.display;
10739      style.display = "block";
10740      parent = target.parentNode;
10741
10742      if (!parent || !target.offsetParent) {
10743        addedToDOM = 1;
10744        nextSibling = target.nextSibling;
10745
10746        _docElement.appendChild(target);
10747      }
10748
10749      matrix = _getComputedTransformMatrixAsArray(target);
10750
10751      if (temp) {
10752        style.display = temp;
10753      } else {
10754        _removeProperty(target, "display");
10755      }
10756
10757      if (addedToDOM) {
10758        if (nextSibling) {
10759          parent.insertBefore(target, nextSibling);
10760        } else if (parent) {
10761          parent.appendChild(target);
10762        } else {
10763          _docElement.removeChild(target);
10764        }
10765      }
10766    }
10767
10768    return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;
10769  },
10770      _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {
10771    var cache = target._gsap,
10772        matrix = matrixArray || _getMatrix(target, true),
10773        xOriginOld = cache.xOrigin || 0,
10774        yOriginOld = cache.yOrigin || 0,
10775        xOffsetOld = cache.xOffset || 0,
10776        yOffsetOld = cache.yOffset || 0,
10777        a = matrix[0],
10778        b = matrix[1],
10779        c = matrix[2],
10780        d = matrix[3],
10781        tx = matrix[4],
10782        ty = matrix[5],
10783        originSplit = origin.split(" "),
10784        xOrigin = parseFloat(originSplit[0]) || 0,
10785        yOrigin = parseFloat(originSplit[1]) || 0,
10786        bounds,
10787        determinant,
10788        x,
10789        y;
10790
10791    if (!originIsAbsolute) {
10792      bounds = _getBBox(target);
10793      xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin);
10794      yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin);
10795    } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {
10796      x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;
10797      y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;
10798      xOrigin = x;
10799      yOrigin = y;
10800    }
10801
10802    if (smooth || smooth !== false && cache.smooth) {
10803      tx = xOrigin - xOriginOld;
10804      ty = yOrigin - yOriginOld;
10805      cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;
10806      cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;
10807    } else {
10808      cache.xOffset = cache.yOffset = 0;
10809    }
10810
10811    cache.xOrigin = xOrigin;
10812    cache.yOrigin = yOrigin;
10813    cache.smooth = !!smooth;
10814    cache.origin = origin;
10815    cache.originIsAbsolute = !!originIsAbsolute;
10816    target.style[_transformOriginProp] = "0px 0px";
10817
10818    if (pluginToAddPropTweensTo) {
10819      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin);
10820
10821      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin);
10822
10823      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset);
10824
10825      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset);
10826    }
10827  },
10828      _parseTransform = function _parseTransform(target, uncache) {
10829    var cache = target._gsap || new GSCache(target);
10830
10831    if ("x" in cache && !uncache && !cache.uncache) {
10832      return cache;
10833    }
10834
10835    var style = target.style,
10836        invertedScaleX = cache.scaleX < 0,
10837        xOrigin = cache.xOrigin || 0,
10838        yOrigin = cache.yOrigin || 0,
10839        px = "px",
10840        deg = "deg",
10841        origin = _getComputedProperty(target, _transformOriginProp) || "0",
10842        x,
10843        y,
10844        z,
10845        scaleX,
10846        scaleY,
10847        rotation,
10848        rotationX,
10849        rotationY,
10850        skewX,
10851        skewY,
10852        perspective,
10853        matrix,
10854        angle,
10855        cos,
10856        sin,
10857        a,
10858        b,
10859        c,
10860        d,
10861        a12,
10862        a22,
10863        t1,
10864        t2,
10865        t3,
10866        a13,
10867        a23,
10868        a33,
10869        a42,
10870        a43,
10871        a32;
10872    x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;
10873    scaleX = scaleY = 1;
10874    cache.svg = !!(target.getCTM && _isSVG(target));
10875    matrix = _getMatrix(target, cache.svg);
10876
10877    if (cache.svg) {
10878      _applySVGOrigin(target, origin, cache.originIsAbsolute, cache.smooth !== false, matrix);
10879    }
10880
10881    if (matrix !== _identity2DMatrix) {
10882      a = matrix[0];
10883      b = matrix[1];
10884      c = matrix[2];
10885      d = matrix[3];
10886      x = a12 = matrix[4];
10887      y = a22 = matrix[5];
10888
10889      if (matrix.length === 6) {
10890        scaleX = Math.sqrt(a * a + b * b);
10891        scaleY = Math.sqrt(d * d + c * c);
10892        rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0;
10893        skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;
10894
10895        if (cache.svg) {
10896          x -= xOrigin - (xOrigin * a + yOrigin * c);
10897          y -= yOrigin - (xOrigin * b + yOrigin * d);
10898        }
10899      } else {
10900        a32 = matrix[6];
10901        a42 = matrix[7];
10902        a13 = matrix[8];
10903        a23 = matrix[9];
10904        a33 = matrix[10];
10905        a43 = matrix[11];
10906        x = matrix[12];
10907        y = matrix[13];
10908        z = matrix[14];
10909        angle = _atan2(a32, a33);
10910        rotationX = angle * _RAD2DEG;
10911
10912        if (angle) {
10913          cos = Math.cos(-angle);
10914          sin = Math.sin(-angle);
10915          t1 = a12 * cos + a13 * sin;
10916          t2 = a22 * cos + a23 * sin;
10917          t3 = a32 * cos + a33 * sin;
10918          a13 = a12 * -sin + a13 * cos;
10919          a23 = a22 * -sin + a23 * cos;
10920          a33 = a32 * -sin + a33 * cos;
10921          a43 = a42 * -sin + a43 * cos;
10922          a12 = t1;
10923          a22 = t2;
10924          a32 = t3;
10925        }
10926
10927        angle = _atan2(-c, a33);
10928        rotationY = angle * _RAD2DEG;
10929
10930        if (angle) {
10931          cos = Math.cos(-angle);
10932          sin = Math.sin(-angle);
10933          t1 = a * cos - a13 * sin;
10934          t2 = b * cos - a23 * sin;
10935          t3 = c * cos - a33 * sin;
10936          a43 = d * sin + a43 * cos;
10937          a = t1;
10938          b = t2;
10939          c = t3;
10940        }
10941
10942        angle = _atan2(b, a);
10943        rotation = angle * _RAD2DEG;
10944
10945        if (angle) {
10946          cos = Math.cos(angle);
10947          sin = Math.sin(angle);
10948          t1 = a * cos + b * sin;
10949          t2 = a12 * cos + a22 * sin;
10950          b = b * cos - a * sin;
10951          a22 = a22 * cos - a12 * sin;
10952          a = t1;
10953          a12 = t2;
10954        }
10955
10956        if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {
10957          rotationX = rotation = 0;
10958          rotationY = 180 - rotationY;
10959        }
10960
10961        scaleX = _round(Math.sqrt(a * a + b * b + c * c));
10962        scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));
10963        angle = _atan2(a12, a22);
10964        skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;
10965        perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;
10966      }
10967
10968      if (cache.svg) {
10969        matrix = target.getAttribute("transform");
10970        cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp));
vendor: 5,036 bytes, lines 10971-11121
10971        matrix && target.setAttribute("transform", matrix);
10972      }
10973    }
10974
10975    if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
10976      if (invertedScaleX) {
10977        scaleX *= -1;
10978        skewX += rotation <= 0 ? 180 : -180;
10979        rotation += rotation <= 0 ? 180 : -180;
10980      } else {
10981        scaleY *= -1;
10982        skewX += skewX <= 0 ? 180 : -180;
10983      }
10984    }
10985
10986    cache.x = ((cache.xPercent = x && Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0) ? 0 : x) + px;
10987    cache.y = ((cache.yPercent = y && Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0) ? 0 : y) + px;
10988    cache.z = z + px;
10989    cache.scaleX = _round(scaleX);
10990    cache.scaleY = _round(scaleY);
10991    cache.rotation = _round(rotation) + deg;
10992    cache.rotationX = _round(rotationX) + deg;
10993    cache.rotationY = _round(rotationY) + deg;
10994    cache.skewX = skewX + deg;
10995    cache.skewY = skewY + deg;
10996    cache.transformPerspective = perspective + px;
10997
10998    if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || 0) {
10999      style[_transformOriginProp] = _firstTwoOnly(origin);
11000    }
11001
11002    cache.xOffset = cache.yOffset = 0;
11003    cache.force3D = _config.force3D;
11004    cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;
11005    cache.uncache = 0;
11006    return cache;
11007  },
11008      _firstTwoOnly = function _firstTwoOnly(value) {
11009    return (value = value.split(" "))[0] + " " + value[1];
11010  },
11011      _addPxTranslate = function _addPxTranslate(target, start, value) {
11012    var unit = getUnit(start);
11013    return _round(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit;
11014  },
11015      _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {
11016    cache.z = "0px";
11017    cache.rotationY = cache.rotationX = "0deg";
11018    cache.force3D = 0;
11019
11020    _renderCSSTransforms(ratio, cache);
11021  },
11022      _zeroDeg = "0deg",
11023      _zeroPx = "0px",
11024      _endParenthesis = ") ",
11025      _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {
11026    var _ref = cache || this,
11027        xPercent = _ref.xPercent,
11028        yPercent = _ref.yPercent,
11029        x = _ref.x,
11030        y = _ref.y,
11031        z = _ref.z,
11032        rotation = _ref.rotation,
11033        rotationY = _ref.rotationY,
11034        rotationX = _ref.rotationX,
11035        skewX = _ref.skewX,
11036        skewY = _ref.skewY,
11037        scaleX = _ref.scaleX,
11038        scaleY = _ref.scaleY,
11039        transformPerspective = _ref.transformPerspective,
11040        force3D = _ref.force3D,
11041        target = _ref.target,
11042        zOrigin = _ref.zOrigin,
11043        transforms = "",
11044        use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true;
11045
11046    if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {
11047      var angle = parseFloat(rotationY) * _DEG2RAD,
11048          a13 = Math.sin(angle),
11049          a33 = Math.cos(angle),
11050          cos;
11051
11052      angle = parseFloat(rotationX) * _DEG2RAD;
11053      cos = Math.cos(angle);
11054      x = _addPxTranslate(target, x, a13 * cos * -zOrigin);
11055      y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);
11056      z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);
11057    }
11058
11059    if (transformPerspective !== _zeroPx) {
11060      transforms += "perspective(" + transformPerspective + _endParenthesis;
11061    }
11062
11063    if (xPercent || yPercent) {
11064      transforms += "translate(" + xPercent + "%, " + yPercent + "%) ";
11065    }
11066
11067    if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {
11068      transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis;
11069    }
11070
11071    if (rotation !== _zeroDeg) {
11072      transforms += "rotate(" + rotation + _endParenthesis;
11073    }
11074
11075    if (rotationY !== _zeroDeg) {
11076      transforms += "rotateY(" + rotationY + _endParenthesis;
11077    }
11078
11079    if (rotationX !== _zeroDeg) {
11080      transforms += "rotateX(" + rotationX + _endParenthesis;
11081    }
11082
11083    if (skewX !== _zeroDeg || skewY !== _zeroDeg) {
11084      transforms += "skew(" + skewX + ", " + skewY + _endParenthesis;
11085    }
11086
11087    if (scaleX !== 1 || scaleY !== 1) {
11088      transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis;
11089    }
11090
11091    target.style[_transformProp] = transforms || "translate(0, 0)";
11092  },
11093      _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {
11094    var _ref2 = cache || this,
11095        xPercent = _ref2.xPercent,
11096        yPercent = _ref2.yPercent,
11097        x = _ref2.x,
11098        y = _ref2.y,
11099        rotation = _ref2.rotation,
11100        skewX = _ref2.skewX,
11101        skewY = _ref2.skewY,
11102        scaleX = _ref2.scaleX,
11103        scaleY = _ref2.scaleY,
11104        target = _ref2.target,
11105        xOrigin = _ref2.xOrigin,
11106        yOrigin = _ref2.yOrigin,
11107        xOffset = _ref2.xOffset,
11108        yOffset = _ref2.yOffset,
11109        forceCSS = _ref2.forceCSS,
11110        tx = parseFloat(x),
11111        ty = parseFloat(y),
11112        a11,
11113        a21,
11114        a12,
11115        a22,
11116        temp;
11117
11118    rotation = parseFloat(rotation);
11119    skewX = parseFloat(skewX);
11120    skewY = parseFloat(skewY);
11121
vendor: 4,370 bytes, lines 11122-11266
11122    if (skewY) {
11123      skewY = parseFloat(skewY);
11124      skewX += skewY;
11125      rotation += skewY;
11126    }
11127
11128    if (rotation || skewX) {
11129      rotation *= _DEG2RAD;
11130      skewX *= _DEG2RAD;
11131      a11 = Math.cos(rotation) * scaleX;
11132      a21 = Math.sin(rotation) * scaleX;
11133      a12 = Math.sin(rotation - skewX) * -scaleY;
11134      a22 = Math.cos(rotation - skewX) * scaleY;
11135
11136      if (skewX) {
11137        skewY *= _DEG2RAD;
11138        temp = Math.tan(skewX - skewY);
11139        temp = Math.sqrt(1 + temp * temp);
11140        a12 *= temp;
11141        a22 *= temp;
11142
11143        if (skewY) {
11144          temp = Math.tan(skewY);
11145          temp = Math.sqrt(1 + temp * temp);
11146          a11 *= temp;
11147          a21 *= temp;
11148        }
11149      }
11150
11151      a11 = _round(a11);
11152      a21 = _round(a21);
11153      a12 = _round(a12);
11154      a22 = _round(a22);
11155    } else {
11156      a11 = scaleX;
11157      a22 = scaleY;
11158      a21 = a12 = 0;
11159    }
11160
11161    if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) {
11162      tx = _convertToUnit(target, "x", x, "px");
11163      ty = _convertToUnit(target, "y", y, "px");
11164    }
11165
11166    if (xOrigin || yOrigin || xOffset || yOffset) {
11167      tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);
11168      ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);
11169    }
11170
11171    if (xPercent || yPercent) {
11172      temp = target.getBBox();
11173      tx = _round(tx + xPercent / 100 * temp.width);
11174      ty = _round(ty + yPercent / 100 * temp.height);
11175    }
11176
11177    temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")";
11178    target.setAttribute("transform", temp);
11179
11180    if (forceCSS) {
11181      target.style[_transformProp] = temp;
11182    }
11183  },
11184      _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, relative) {
11185    var cap = 360,
11186        isString = _isString(endValue),
11187        endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1),
11188        change = relative ? endNum * relative : endNum - startNum,
11189        finalValue = startNum + change + "deg",
11190        direction,
11191        pt;
11192
11193    if (isString) {
11194      direction = endValue.split("_")[1];
11195
11196      if (direction === "short") {
11197        change %= cap;
11198
11199        if (change !== change % (cap / 2)) {
11200          change += change < 0 ? cap : -cap;
11201        }
11202      }
11203
11204      if (direction === "cw" && change < 0) {
11205        change = (change + cap * _bigNum$1) % cap - ~~(change / cap) * cap;
11206      } else if (direction === "ccw" && change > 0) {
11207        change = (change - cap * _bigNum$1) % cap - ~~(change / cap) * cap;
11208      }
11209    }
11210
11211    plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
11212    pt.e = finalValue;
11213    pt.u = "deg";
11214
11215    plugin._props.push(property);
11216
11217    return pt;
11218  },
11219      _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {
11220    var style = _tempDivStyler.style,
11221        startCache = target._gsap,
11222        exclude = "perspective,force3D,transformOrigin,svgOrigin",
11223        endCache,
11224        p,
11225        startValue,
11226        endValue,
11227        startNum,
11228        endNum,
11229        startUnit,
11230        endUnit;
11231    style.cssText = getComputedStyle(target).cssText + ";position:absolute;display:block;";
11232    style[_transformProp] = transforms;
11233
11234    _doc$1.body.appendChild(_tempDivStyler);
11235
11236    endCache = _parseTransform(_tempDivStyler, 1);
11237
11238    for (p in _transformProps) {
11239      startValue = startCache[p];
11240      endValue = endCache[p];
11241
11242      if (startValue !== endValue && exclude.indexOf(p) < 0) {
11243        startUnit = getUnit(startValue);
11244        endUnit = getUnit(endValue);
11245        startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);
11246        endNum = parseFloat(endValue);
11247        plugin._pt = new PropTween(plugin._pt, startCache, p, startNum, endNum - startNum, _renderCSSProp);
11248        plugin._pt.u = endUnit || 0;
11249
11250        plugin._props.push(p);
11251      }
11252    }
11253
11254    _doc$1.body.removeChild(_tempDivStyler);
11255  };
11256
11257  _forEachName("padding,margin,Width,Radius", function (name, index) {
11258    var t = "Top",
11259        r = "Right",
11260        b = "Bottom",
11261        l = "Left",
11262        props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {
11263      return index < 2 ? name + side : "border" + side + name;
11264    });
11265
11266    _specialProps[index >
11266 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) {
11267      var a, vars;
11268
11269      if (arguments.length < 4) {
11270        a = props.map(function (prop) {
11271          return _get(plugin, prop, property);
11272        });
11273        vars = a.join(" ");
11274        return vars.split(a[0]).length === 5 ? a[0] : vars;
11275      }
11276
11277      a = (endValue + "").split(" ");
11278      vars = {};
11279      props.forEach(function (prop, i) {
11280        return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];
11281      });
11282      plugin.init(target, vars, tween);
11283    };
11284  });
11285
11286  var CSSPlugin = {
11287    name: "css",
11288    register: _initCore,
11289    targetTest: function targetTest(target) {
11290      return target.style && target.nodeType;
11291    },
11292    init: function init(target, vars, tween, index, targets) {
11293      var props = this._props,
11294          style = target.style,
11295          startValue,
11296          endValue,
11297          endNum,
11298          startNum,
11299          type,
11300          specialProp,
11301          p,
11302          startUnit,
11303          endUnit,
11304          relative,
11305          isTransformRelated,
11306          transformPropTween,
11307          cache,
11308          smooth,
11309          hasPriority;
11310
11311      if (!_pluginInitted) {
11312        _initCore();
11313      }
11314
11315      for (p in vars) {
11316        if (p === "autoRound") {
11317          continue;
11318        }
11319
11320        endValue = vars[p];
11321
11322        if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {
11323          continue;
11324        }
11325
11326        type = typeof endValue;
11327        specialProp = _specialProps[p];
11328
11329        if (type === "function") {
11330          endValue = endValue.call(tween, index, target, targets);
11331          type = typeof endValue;
11332        }
11333
11334        if (type === "string" && ~endValue.indexOf("random(")) {
11335          endValue = _replaceRandom(endValue);
11336        }
11337
11338        if (specialProp) {
11339          if (specialProp(this, target, p, endValue, tween)) {
11340            hasPriority = 1;
11341          }
11342        } else if (p.substr(0, 2) === "--") {
11343          this.add(style, "setProperty", getComputedStyle(target).getPropertyValue(p) + "", endValue + "", index, targets, 0, 0, p);
11344        } else {
11345          startValue = _get(target, p);
11346          startNum = parseFloat(startValue);
11347          relative = type === "string" && endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0;
11348
11349          if (relative) {
11350            endValue = endValue.substr(2);
11351          }
11352
11353          endNum = parseFloat(endValue);
11354
11355          if (p in _propertyAliases) {
11356            if (p === "autoAlpha") {
11357              if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) {
11358                startNum = 0;
11359              }
11360
11361              _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum);
11362            }
11363
11364            if (p !== "scale" && p !== "transform") {
11365              p = _propertyAliases[p];
11366
11367              if (~p.indexOf(",")) {
11368                p = p.split(",")[0];
11369              }
11370            }
11371          }
11372
11373          isTransformRelated = p in _transformProps;
11374
11375          if (isTransformRelated) {
11376            if (!transformPropTween) {
11377              cache = target._gsap;
11378              cache.renderTransform || _parseTransform(target);
11379              smooth = vars.smoothOrigin !== false && cache.smooth;
11380              transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1);
11381              transformPropTween.dep = 1;
11382            }
11383
11384            if (p === "scale") {
11385              this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, relative ? relative * endNum : endNum - cache.scaleY);
11386              props.push("scaleY", p);
11387              p += "X";
11388            } else if (p === "transformOrigin") {
11389              endValue = _convertKeywordsToPercentages(endValue);
11390
11391              if (cache.svg) {
11392                _applySVGOrigin(target, endValue, 0, smooth, 0, this);
11393              } else {
11394                endUnit = parseFloat(endValue.split(" ")[2]);
11395
11396                if (endUnit !== cache.zOrigin) {
11397                  _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit);
11398                }
11399
11400                _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));
11401              }
11402
11403              continue;
11404            } else if (p === "svgOrigin") {
11405              _applySVGOrigin(target, endValue, 1, smooth, 0, this);
11406
11407              continue;
11408            } else if (p in _rotationalProperties) {
11409              _addRotationalPropTween(this, cache, p, startNum, endValue, relative);
11410
11411              continue;
11412            } else if (p === "smoothOrigin") {
11413              _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue);
11414
11415              continue;
11416            } else if (p === "force3D") {
11417              cache[p] = endValue;
11418              continue;
11419            } else if (p === "transform") {
11420              _addRawTransformPTs(this, endValue, target);
11421
11422              continue;
11423            }
11424          } else if (!(p in style)) {
11425            p = _checkPropPrefix(p) || p;
11426          }
11427
11428          if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {
11429            startUnit = (startValue + "").substr((startNum + "").length);
11430            endUnit = (endValue + "").substr((endNum + "").length) || (p in _config.units ? _config.units[p] : startUnit);
11431
11432            if (startUnit !== endUnit) {
11433              startNum = _convertToUnit(target, p, startValue, endUnit);
11434            }
11435
11436            this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, relative ? relative * endNum : endNum - startNum, endUnit === "px" && vars.autoRound !== false && !isTransformRelated ? _renderRoundedCSSProp : _renderCSSProp);
11437            this._pt.u = endUnit || 0;
11438
11439            if (startUnit !== endUnit) {
11440              this._pt.b = startValue;
11441              this._pt.r = _renderCSSPropWithBeginning;
11442            }
11443          } else if (!(p in style)) {
11444            if (p in target) {
11445              this.add(target, p, target[p], endValue, index, targets);
11446            } else {
11447              _missingPlugin(p, endValue);
11448
11449              continue;
11450            }
11451          } else {
11452            _tweenComplexCSSString.call(this, target, p, startValue, endValue);
11453          }
11454
11455          props.push(p);
11456        }
11457      }
11458
11459      if (hasPriority) {
11460        _sortPropTweensByPriority(this);
11461      }
11462    },
11463    get: _get,
11464    aliases: _propertyAliases,
11465    getSetter: function getSetter(target, property, plugin) {
11466      property = _propertyAliases[property] || property;
11467      return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property);
11468    }
11469  };
11470  gsap.utils.checkPrefix = _checkPropPrefix;
11471
11472  (function (positionAndScale, rotation, others, aliases) {
11473    var all = _forEachName(positionAndScale + "," + rotation + "," + others, function (name) {
11474      _transformProps[name] = 1;
11475    });
11476
11477    _forEachName(rotation, function (name) {
11478      _config.units[name] = "deg";
11479      _rotationalProperties[name] = 1;
11480    });
11481
11482    _propertyAliases[all[13]] = positionAndScale + "," + rotation;
11483
11484    _forEachName(aliases, function (name) {
11485      var split = name.split(":");
11486      _propertyAliases[split[1]] = all[split[0]];
11487    });
11488  })("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY");
11489
11490  _forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) {
11491    _config.units[name] = "px";
11492  });
11493
11494  gsap.registerPlugin(CSSPlugin);
11495
11496  var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,
11497      TweenMaxWithCSS = gsapWithCSS.core.Tween;
11498
11499  exports.Back = Back;
11500  exports.Bounce = Bounce;
11501  exports.CSSPlugin = CSSPlugin;
11502  exports.Circ = Circ;
11503  exports.Cubic = Cubic;
11504  exports.Elastic = Elastic;
11505  exports.Expo = Expo;
11506  exports.Linear = Linear;
11507  exports.Power0 = Power0;
11508  exports.Power1 = Power1;
11509  exports.Power2 = Power2;
11510  exports.Power3 = Power3;
11511  exports.Power4 = Power4;
11512  exports.Quad = Quad;
11513  exports.Quart = Quart;
11514  exports.Quint = Quint;
11515  exports.Sine = Sine;
11516  exports.SteppedEase = SteppedEase;
11517  exports.Strong = Strong;
11518  exports.TimelineLite = Timeline;
11519  exports.TimelineMax = Timeline;
11520  exports.TweenLite = Tween;
11521  exports.TweenMax = TweenMaxWithCSS;
11522  exports.default = gsapWithCSS;
11523  exports.gsap = gsapWithCSS;
11524
11525  if (typeof(window) === 'undefined' || window !== exports) {Object.defineProperty(exports, '__esModule', { value: true });} else {delete window.default;}
11526
11527})));
11528;
11529/*!
11530 * ScrollMagic v2.0.7 (2019-05-07)
11531 * The javascript library for magical scroll interactions.
11532 * (c) 2019 Jan Paepke (@janpaepke)
11533 * Project Website: http://scrollmagic.io
11534 *
11535 * @version 2.0.7
11536 * @license Dual licensed under MIT license and GPL.
11537 * @author Jan Paepke - [email protected]
11538 *
11539 * @file ScrollMagic main library.
11540 */
11541/**
11542 * @namespace ScrollMagic
11543 */
11544(function (root, factory) {
11545	if (typeof define === 'function' && define.amd) {
11546		// AMD. Register as an anonymous module.
11547		define(factory);
11548	} else if (typeof exports === 'object') {
11549		// CommonJS
11550		module.exports = factory();
11551	} else {
11552		// Browser global
11553		root.ScrollMagic = factory();
11554	}
11555}(this, function () {
11556	"use strict";
11557
11558	var ScrollMagic = function () {
11559		_util.log(2, '(COMPATIBILITY NOTICE) -> As of ScrollMagic 2.0.0 you need to use \'new ScrollMagic.Controller()\' to create a new controller instance. Use \'new ScrollMagic.Scene()\' to instance a scene.');
11560	};
11561
11562	ScrollMagic.version = "2.0.7";
11563
11564	// TODO: temporary workaround for chrome's scroll jitter bug
11565	window.addEventListener("mousewheel", function () {});
11566
11567	// global const
11568	var PIN_SPACER_ATTRIBUTE = "data-scrollmagic-pin-spacer";
11569
11570	/**
11571	 * The main class that is needed once per scroll container.
11572	 *
11573	 * @class
11574	 *
11575	 * @example
11576	 * // basic initialization
11577	 * var controller = new ScrollMagic.Controller();
11578	 *
11579	 * // passing options
11580	 * var controller = new ScrollMagic.Controller({container: "#myContainer", loglevel: 3});
11581	 *
11582	 * @param {object} [options] - An object containing one or more options for the controller.
11583	 * @param {(string|object)} [options.container=window] - A selector, DOM object that references the main container for scrolling.
11584	 * @param {boolean} [options.vertical=true] - Sets the scroll mode to vertical (`true`) or horizontal (`false`) scrolling.
11585	 * @param {object} [options.globalSceneOptions={}] - These options will be passed to every Scene that is added to the controller using the addScene method. For more information on Scene options see {@link ScrollMagic.Scene}.
11586	 * @param {number} [options.loglevel=2] Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic.
11587											 ** `0` => silent
11588											 ** `1` => errors
11589											 ** `2` => errors, warnings
11590											 ** `3` => errors, warnings, debuginfo
11591	 * @param {boolean} [options.refreshInterval=100] - Some changes don't call events by default, like changing the container size or moving a scene trigger element.
11592	 																										 This interval polls these parameters to fire the necessary events.
11593	 																										 If you don't use custom containers, trigger elements or have static layouts, where the positions of the trigger elements don't change, you can set this to 0 disable interval checking and improve performance.
11594	 *
11595	 */
11596	ScrollMagic.Controller = function (options) {
11597		/*
11598		 * ----------------------------------------------------------------
11599		 * settings
11600		 * ----------------------------------------------------------------
11601		 */
11602		var
11603			NAMESPACE = 'ScrollMagic.Controller',
11604			SCROLL_DIRECTION_FORWARD = 'FORWARD',
11605			SCROLL_DIRECTION_REVERSE = 'REVERSE',
11606			SCROLL_DIRECTION_PAUSED = 'PAUSED',
11607			DEFAULT_OPTIONS = CONTROLLER_OPTIONS.defaults;
11608
11609		/*
11610		 * ----------------------------------------------------------------
11611		 * private vars
11612		 * ----------------------------------------------------------------
11613		 */
11614		var
11615			Controller = this,
11616			_options = _util.extend({}, DEFAULT_OPTIONS, options),
11617			_sceneObjects = [],
11618			_updateScenesOnNextCycle = false, // can be boolean (true => all scenes) or an array of scenes to be updated
11619			_scrollPos = 0,
11620			_scrollDirection = SCROLL_DIRECTION_PAUSED,
11621			_isDocument = true,
11622			_viewPortSize = 0,
11623			_enabled = true,
11624			_updateTimeout,
11625			_refreshTimeout;
11626
11627		/*
11628		 * ----------------------------------------------------------------
11629		 * private functions
11630		 * ----------------------------------------------------------------
11631		 */
11632
11633		/**
11634		 * Internal constructor function of the ScrollMagic Controller
11635		 * @private
11636		 */
11637		var construct = function () {
11638			for (var key in _options) {
11639				if (!DEFAULT_OPTIONS.hasOwnProperty(key)) {
11640					log(2, "WARNING: Unknown option \"" + key + "\"");
11641					delete _options[key];
11642				}
11643			}
11644			_options.container = _util.get.elements(_options.container)[0];
11645			// check ScrollContainer
11646			if (!_options.container) {
11647				log(1, "ERROR creating object " + NAMESPACE + ": No valid scroll container supplied");
11648				throw NAMESPACE + " init failed."; // cancel
11649			}
11650			_isDocument = _options.container === window || _options.container === document.body || !document.body.contains(_options.container);
11651			// normalize to window
11652			if (_isDocument) {
11653				_options.container = window;
11654			}
11655			// update container size immediately
11656			_viewPortSize = getViewportSize();
11657			// set event handlers
11658			_options.container.addEventListener("resize", onChange);
11659			_options.container.addEventListener("scroll", onChange);
11660
11661			var ri = parseInt(_options.refreshInterval, 10);
11662			_options.refreshInterval = _util.type.Number(ri) ? ri : DEFAULT_OPTIONS.refreshInterval;
11663			scheduleRefresh();
11664
11665			log(3, "added new " + NAMESPACE + " controller (v" + ScrollMagic.version + ")");
11666		};
11667
11668		/**
11669		 * Schedule the next execution of the refresh function
11670		 * @private
11671		 */
11672		var scheduleRefresh = function () {
11673			if (_options.refreshInterval > 0) {
11674				_refreshTimeout = window.setTimeout(refresh, _options.refreshInterval);
11675			}
11676		};
11677
11678		/**
11679		 * Default function to get scroll pos - overwriteable using `Controller.scrollPos(newFunction)`
11680		 * @private
11681		 */
11682		var getScrollPos = function () {
11683			return _options.vertical ? _util.get.scrollTop(_options.container) : _util.get.scrollLeft(_options.container);
11684		};
11685
11686		/**
11687		 * Returns the current viewport Size (width vor horizontal, height for vertical)
11688		 * @private
11689		 */
11690		var getViewportSize = function () {
11691			return _options.vertical ? _util.get.height(_options.container) : _util.get.width(_options.container);
11692		};
11693
11694		/**
11695		 * Default function to set scroll pos - overwriteable using `Controller.scrollTo(newFunction)`
11696		 * Make available publicly for pinned mousewheel workaround.
11697		 * @private
11698		 */
11699		var setScrollPos = this._setScrollPos = function (pos) {
11700			if (_options.vertical) {
11701				if (_isDocument) {
11702					window.scrollTo(_util.get.scrollLeft(), pos);
11703				} else {
11704					_options.container.scrollTop = pos;
11705				}
11706			} else {
11707				if (_isDocument) {
11708					window.scrollTo(pos, _util.get.scrollTop());
11709				} else {
11710					_options.container.scrollLeft = pos;
11711				}
11712			}
11713		};
11714
11715		/**
11716		 * Handle updates in cycles instead of on scroll (performance)
11717		 * @private
11718		 */
11719		var updateScenes = function () {
11720			if (_enabled && _updateScenesOnNextCycle) {
11721				// determine scenes to update
11722				var scenesToUpdate = _util.type.Array(_updateScenesOnNextCycle) ? _updateScenesOnNextCycle : _sceneObjects.slice(0);
11723				// reset scenes
11724				_updateScenesOnNextCycle = false;
11725				var oldScrollPos = _scrollPos;
11726				// update scroll pos now instead of onChange, as it might have changed since scheduling (i.e. in-browser smooth scroll)
11727				_scrollPos = Controller.scrollPos();
11728				var deltaScroll = _scrollPos - oldScrollPos;
11729				if (deltaScroll !== 0) { // scroll position changed?
11730					_scrollDirection = (deltaScroll > 0) ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_REVERSE;
11731				}
11732				// reverse order of scenes if scrolling reverse
11733				if (_scrollDirection === SCROLL_DIRECTION_REVERSE) {
11734					scenesToUpdate.reverse();
11735				}
11736				// update scenes
11737				scenesToUpdate.forEach(function (scene, index) {
11738					log(3, "updating Scene " + (index + 1) + "/" + scenesToUpdate.length + " (" + _sceneObjects.length + " total)");
11739					scene.update(true);
11740				});
11741				if (scenesToUpdate.length === 0 && _options.loglevel >= 3) {
11742					log(3, "updating 0 Scenes (nothing added to controller)");
11743				}
11744			}
11745		};
11746
11747		/**
11748		 * Initializes rAF callback
11749		 * @private
11750		 */
11751		var debounceUpdate = function () {
11752			_updateTimeout = _util.rAF(updateScenes);
11753		};
11754
11755		/**
11756		 * Handles Container changes
11757		 * @private
11758		 */
11759		var onChange = function (e) {
11760			log(3, "event fired causing an update:", e.type);
11761			if (e.type == "resize") {
11762				// resize
11763				_viewPortSize = getViewportSize();
11764				_scrollDirection = SCROLL_DIRECTION_PAUSED;
11765			}
11766			// schedule update
11767			if (_updateScenesOnNextCycle !== true) {
11768				_updateScenesOnNextCycle = true;
11769				debounceUpdate();
11770			}
11771		};
11772
11773		var refresh = function () {
11774			if (!_isDocument) {
11775				// simulate resize event. Only works for viewport relevant param (performance)
11776				if (_viewPortSize != getViewportSize()) {
11777					var resizeEvent;
11778					try {
11779						resizeEvent = new Event('resize', {
11780							bubbles: false,
11781							cancelable: false
11782						});
11783					} catch (e) { // stupid IE
11784						resizeEvent = document.createEvent("Event");
11785						resizeEvent.initEvent("resize", false, false);
11786					}
11787					_options.container.dispatchEvent(resizeEvent);
11788				}
11789			}
11790			_sceneObjects.forEach(function (scene, index) { // refresh all scenes
11791				scene.refresh();
11792			});
11793			scheduleRefresh();
11794		};
11795
11796		/**
11797		 * Send a debug message to the console.
11798		 * provided publicly with _log for plugins
11799		 * @private
11800		 *
11801		 * @param {number} loglevel - The loglevel required to initiate output for the message.
11802		 * @param {...mixed} output - One or more variables that should be passed to the console.
11803		 */
11804		var log = this._log = function (loglevel, output) {
11805			if (_options.loglevel >= loglevel) {
11806				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ") ->");
11807				_util.log.apply(window, arguments);
11808			}
11809		};
11810		// for scenes we have getters for each option, but for the controller we don't, so we need to make it available externally for plugins
11811		this._options = _options;
11812
11813		/**
11814		 * Sort scenes in ascending order of their start offset.
11815		 * @private
11816		 *
11817		 * @param {array} ScenesArray - an array of ScrollMagic Scenes that should be sorted
11818		 * @return {array} The sorted array of Scenes.
11819		 */
11820		var sortScenes = function (ScenesArray) {
11821			if (ScenesArray.length <= 1) {
11822				return ScenesArray;
11823			} else {
11824				var scenes = ScenesArray.slice(0);
11825				scenes.sort(function (a, b) {
11826					return a.scrollOffset() > b.scrollOffset() ? 1 : -1;
11827				});
11828				return scenes;
11829			}
11830		};
11831
11832		/**
11833		 * ----------------------------------------------------------------
11834		 * public functions
11835		 * ----------------------------------------------------------------
11836		 */
11837
11838		/**
11839		 * Add one ore more scene(s) to the controller.
11840		 * This is the equivalent to `Scene.addTo(controller)`.
11841		 * @public
11842		 * @example
11843		 * // with a previously defined scene
11844		 * controller.addScene(scene);
11845		 *
11846		 * // with a newly created scene.
11847		 * controller.addScene(new ScrollMagic.Scene({duration : 0}));
11848		 *
11849		 * // adding multiple scenes
11850		 * controller.addScene([scene, scene2, new ScrollMagic.Scene({duration : 0})]);
11851		 *
11852		 * @param {(ScrollMagic.Scene|array)} newScene - ScrollMagic Scene or Array of Scenes to be added to the controller.
11853		 * @return {Controller} Parent object for chaining.
11854		 */
11855		this.addScene = function (newScene) {
11856			if (_util.type.Array(newScene)) {
11857				newScene.forEach(function (scene, index) {
11858					Controller.addScene(scene);
11859				});
11860			} else if (newScene instanceof ScrollMagic.Scene) {
11861				if (newScene.controller() !== Controller) {
11862					newScene.addTo(Controller);
11863				} else if (_sceneObjects.indexOf(newScene) < 0) {
11864					// new scene
11865					_sceneObjects.push(newScene); // add to array
11866					_sceneObjects = sortScenes(_sceneObjects); // sort
11867					newScene.on("shift.controller_sort", function () { // resort whenever scene moves
11868						_sceneObjects = sortScenes(_sceneObjects);
11869					});
11870					// insert Global defaults.
11871					for (var key in _options.globalSceneOptions) {
11872						if (newScene[key]) {
11873							newScene[key].call(newScene, _options.globalSceneOptions[key]);
11874						}
11875					}
11876					log(3, "adding Scene (now " + _sceneObjects.length + " total)");
11877				}
11878			} else {
11879				log(1, "ERROR: invalid argument supplied for '.addScene()'");
11880			}
11881			return Controller;
11882		};
11883
11884		/**
11885		 * Remove one ore more scene(s) from the controller.
11886		 * This is the equivalent to `Scene.remove()`.
11887		 * @public
11888		 * @example
11889		 * // remove a scene from the controller
11890		 * controller.removeScene(scene);
11891		 *
11892		 * // remove multiple scenes from the controller
11893		 * controller.removeScene([scene, scene2, scene3]);
11894		 *
11895		 * @param {(ScrollMagic.Scene|array)}
11895 Scene - ScrollMagic Scene or Array of Scenes to be removed from the controller.
11896		 * @returns {Controller} Parent object for chaining.
11897		 */
11898		this.removeScene = function (Scene) {
11899			if (_util.type.Array(Scene)) {
11900				Scene.forEach(function (scene, index) {
11901					Controller.removeScene(scene);
11902				});
11903			} else {
11904				var index = _sceneObjects.indexOf(Scene);
11905				if (index > -1) {
11906					Scene.off("shift.controller_sort");
11907					_sceneObjects.splice(index, 1);
11908					log(3, "removing Scene (now " + _sceneObjects.length + " left)");
11909					Scene.remove();
11910				}
11911			}
11912			return Controller;
11913		};
11914
11915		/**
11916	 * Update one ore more scene(s) according to the scroll position of the container.
11917	 * This is the equivalent to `Scene.update()`.
11918	 * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container.
11919	 * It then updates the current scene state accordingly (or does nothing, if the state is already correct) – Pins will be set to their correct position and tweens will be updated to their correct progress.
11920	 * _**Note:** This method gets called constantly whenever Controller detects a change. The only application for you is if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._
11921	 * @public
11922	 * @example
11923	 * // update a specific scene on next cycle
11924 	 * controller.updateScene(scene);
11925 	 *
11926	 * // update a specific scene immediately
11927	 * controller.updateScene(scene, true);
11928 	 *
11929	 * // update multiple scenes scene on next cycle
11930	 * controller.updateScene([scene1, scene2, scene3]);
11931	 *
11932	 * @param {ScrollMagic.Scene} Scene - ScrollMagic Scene or Array of Scenes that is/are supposed to be updated.
11933	 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle.
11934	 										  This is useful when changing multiple properties of the scene - this way it will only be updated once all new properties are set (updateScenes).
11935	 * @return {Controller} Parent object for chaining.
11936	 */
11937		this.updateScene = function (Scene, immediately) {
11938			if (_util.type.Array(Scene)) {
11939				Scene.forEach(function (scene, index) {
11940					Controller.updateScene(scene, immediately);
11941				});
11942			} else {
11943				if (immediately) {
11944					Scene.update(true);
11945				} else if (_updateScenesOnNextCycle !== true && Scene instanceof ScrollMagic.Scene) { // if _updateScenesOnNextCycle is true, all connected scenes are already scheduled for update
11946					// prep array for next update cycle
11947					_updateScenesOnNextCycle = _updateScenesOnNextCycle || [];
11948					if (_updateScenesOnNextCycle.indexOf(Scene) == -1) {
11949						_updateScenesOnNextCycle.push(Scene);
11950					}
11951					_updateScenesOnNextCycle = sortScenes(_updateScenesOnNextCycle); // sort
11952					debounceUpdate();
11953				}
11954			}
11955			return Controller;
11956		};
11957
11958		/**
11959		 * Updates the controller params and calls updateScene on every scene, that is attached to the controller.
11960		 * See `Controller.updateScene()` for more information about what this means.
11961		 * In most cases you will not need this function, as it is called constantly, whenever ScrollMagic detects a state change event, like resize or scroll.
11962		 * The only application for this method is when ScrollMagic fails to detect these events.
11963		 * One application is with some external scroll libraries (like iScroll) that move an internal container to a negative offset instead of actually scrolling. In this case the update on the controller needs to be called whenever the child container's position changes.
11964		 * For this case there will also be the need to provide a custom function to calculate the correct scroll position. See `Controller.scrollPos()` for details.
11965		 * @public
11966		 * @example
11967		 * // update the controller on next cycle (saves performance due to elimination of redundant updates)
11968		 * controller.update();
11969		 *
11970		 * // update the controller immediately
11971		 * controller.update(true);
11972		 *
11973		 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance)
11974		 * @return {Controller} Parent object for chaining.
11975		 */
11976		this.update = function (immediately) {
11977			onChange({
11978				type: "resize"
11979			}); // will update size and set _updateScenesOnNextCycle to true
11980			if (immediately) {
11981				updateScenes();
11982			}
11983			return Controller;
11984		};
11985
11986		/**
11987		 * Scroll to a numeric scroll offset, a DOM element, the start of a scene or provide an alternate method for scrolling.
11988		 * For vertical controllers it will change the top scroll offset and for horizontal applications it will change the left offset.
11989		 * @public
11990		 *
11991		 * @since 1.1.0
11992		 * @example
11993		 * // scroll to an offset of 100
11994		 * controller.scrollTo(100);
11995		 *
11996		 * // scroll to a DOM element
11997		 * controller.scrollTo("#anchor");
11998		 *
11999		 * // scroll to the beginning of a scene
12000		 * var scene = new ScrollMagic.Scene({offset: 200});
12001		 * controller.scrollTo(scene);
12002		 *
12003		 * // define a new scroll position modification function (jQuery animate instead of jump)
12004		 * controller.scrollTo(function (newScrollPos) {
12005		 *	$("html, body").animate({scrollTop: newScrollPos});
12006		 * });
12007		 * controller.scrollTo(100); // call as usual, but the new function will be used instead
12008		 *
12009		 * // define a new scroll function with an additional parameter
12010		 * controller.scrollTo(function (newScrollPos, message) {
12011		 *  console.log(message);
12012		 *	$(this).animate({scrollTop: newScrollPos});
12013		 * });
12014		 * // call as usual, but supply an extra parameter to the defined custom function
12015		 * controller.scrollTo(100, "my message");
12016		 *
12017		 * // define a new scroll function with an additional parameter containing multiple variables
12018		 * controller.scrollTo(function (newScrollPos, options) {
12019		 *  someGlobalVar = options.a + options.b;
12020		 *	$(this).animate({scrollTop: newScrollPos});
12021		 * });
12022		 * // call as usual, but supply an extra parameter containing multiple options
12023		 * controller.scrollTo(100, {a: 1, b: 2});
12024		 *
12025		 * // define a new scroll function with a callback supplied as an additional parameter
12026		 * controller.scrollTo(function (newScrollPos, callback) {
12027		 *	$(this).animate({scrollTop: newScrollPos}, 400, "swing", callback);
12028		 * });
12029		 * // call as usual, but supply an extra parameter, which is used as a callback in the previously defined custom scroll function
12030		 * controller.scrollTo(100, function() {
12031		 *	console.log("scroll has finished.");
12032		 * });
12033		 *
12034		 * @param {mixed} scrollTarget - The supplied argument can be one of these types:
12035		 * 1. `number` -> The container will scroll to this new scroll offset.
12036		 * 2. `string` or `object` -> Can be a selector or a DOM object.
12037		 *  The container will scroll to the position of this element.
12038		 * 3. `ScrollMagic Scene` -> The container will scroll to the start of this scene.
12039		 * 4. `function` -> This function will be used for future scroll position modifications.
12040		 *  This provides a way for you to change the behaviour of scrolling and adding new behaviour like animation. The function receives the new scroll position as a parameter and a reference to the container element using `this`.
12041		 *  It may also optionally receive an optional additional parameter (see below)
12042		 *  _**NOTE:**
12043		 *  All other options will still work as expected, using the new function to scroll._
12044		 * @param {mixed} [additionalParameter] - If a custom scroll function was defined (see above 4.), you may want to supply additional parameters to it, when calling it. You can do this using this parameter – see examples for details. Please note, that this parameter will have no effect, if you use the default scrolling function.
12045		 * @returns {Controller} Parent object for chaining.
12046		 */
12047		this.scrollTo = function (scrollTarget, additionalParameter) {
12048			if (_util.type.Number(scrollTarget)) { // excecute
12049				setScrollPos.call(_options.container, scrollTarget, additionalParameter);
12050			} else if (scrollTarget instanceof ScrollMagic.Scene) { // scroll to scene
12051				if (scrollTarget.controller() === Controller) { // check if the controller is associated with this scene
12052					Controller.scrollTo(scrollTarget.scrollOffset(), additionalParameter);
12053				} else {
12054					log(2, "scrollTo(): The supplied scene does not belong to this controller. Scroll cancelled.", scrollTarget);
12055				}
12056			} else if (_util.type.Function(scrollTarget)) { // assign new scroll function
12057				setScrollPos = scrollTarget;
12058			} else { // scroll to element
12059				var elem = _util.get.elements(scrollTarget)[0];
12060				if (elem) {
12061					// if parent is pin spacer, use spacer position instead so correct start position is returned for pinned elements.
12062					while (elem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) {
12063						elem = elem.parentNode;
12064					}
12065
12066					var
12067						param = _options.vertical ? "top" : "left", // which param is of interest ?
12068						containerOffset = _util.get.offset(_options.container), // container position is needed because element offset is returned in relation to document, not in relation to container.
12069						elementOffset = _util.get.offset(elem);
12070
12071					if (!_isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent
12072						containerOffset[param] -= Controller.scrollPos();
12073					}
12074
12075					Controller.scrollTo(elementOffset[param] - containerOffset[param], additionalParameter);
12076				} else {
12077					log(2, "scrollTo(): The supplied argument is invalid. Scroll cancelled.", scrollTarget);
12078				}
12079			}
12080			return Controller;
12081		};
12082
12083		/**
12084		 * **Get** the current scrollPosition or **Set** a new method to calculate it.
12085		 * -> **GET**:
12086		 * When used as a getter this function will return the current scroll position.
12087		 * To get a cached value use Controller.info("scrollPos"), which will be updated in the update cycle.
12088		 * For vertical controllers it will return the top scroll offset and for horizontal applications it will return the left offset.
12089		 *
12090		 * -> **SET**:
12091		 * When used as a setter this method prodes a way to permanently overwrite the controller's scroll position calculation.
12092		 * A typical usecase is when the scroll position is not reflected by the containers scrollTop or scrollLeft values, but for example by the inner offset of a child container.
12093		 * Moving a child container inside a parent is a commonly used method for several scrolling frameworks, including iScroll.
12094		 * By providing an alternate calculation function you can make sure ScrollMagic receives the correct scroll position.
12095		 * Please also bear in mind that your function should return y values for vertical scrolls an x for horizontals.
12096		 *
12097		 * To change the current scroll position please use `Controller.scrollTo()`.
12098		 * @public
12099		 *
12100		 * @example
12101		 * // get the current scroll Position
12102		 * var scrollPos = controller.scrollPos();
12103		 *
12104		 * // set a new scroll position calculation method
12105		 * controller.scrollPos(function () {
12106		 *	return this.info("vertical") ? -mychildcontainer.y : -mychildcontainer.x
12107		 * });
12108		 *
12109		 * @param {function} [scrollPosMethod] - The function to be used for the scroll position calculation of the container.
12110		 * @returns {(number|Controller)} Current scroll position or parent object for chaining.
12111		 */
12112		this.scrollPos = function (scrollPosMethod) {
12113			if (!arguments.length) { // get
12114				return getScrollPos.call(Controller);
12115			} else { // set
12116				if (_util.type.Function(scrollPosMethod)) {
12117					getScrollPos = scrollPosMethod;
12118				} else {
12119					log(2, "Provided value for method 'scrollPos' is not a function. To change the current scroll position use 'scrollTo()'.");
12120				}
12121			}
12122			return Controller;
12123		};
12124
12125		/**
12126		 * **Get** all infos or one in particular about the controller.
12127		 * @public
12128		 * @example
12129		 * // returns the current scroll position (number)
12130		 * var scrollPos = controller.info("scrollPos");
12131		 *
12132		 * // returns all infos as an object
12133		 * var infos = controller.info();
12134		 *
12135		 * @param {string} [about] - If passed only this info will be returned instead of an object c
12135ontaining all.
12136		 							 Valid options are:
12137		 							 ** `"size"` => the current viewport size of the container
12138		 							 ** `"vertical"` => true if vertical scrolling, otherwise false
12139		 							 ** `"scrollPos"` => the current scroll position
12140		 							 ** `"scrollDirection"` => the last known direction of the scroll
12141		 							 ** `"container"` => the container element
12142		 							 ** `"isDocument"` => true if container element is the document.
12143		 * @returns {(mixed|object)} The requested info(s).
12144		 */
12145		this.info = function (about) {
12146			var values = {
12147				size: _viewPortSize, // contains height or width (in regard to orientation);
12148				vertical: _options.vertical,
12149				scrollPos: _scrollPos,
12150				scrollDirection: _scrollDirection,
12151				container: _options.container,
12152				isDocument: _isDocument
12153			};
12154			if (!arguments.length) { // get all as an object
12155				return values;
12156			} else if (values[about] !== undefined) {
12157				return values[about];
12158			} else {
12159				log(1, "ERROR: option \"" + about + "\" is not available");
12160				return;
12161			}
12162		};
12163
12164		/**
12165		 * **Get** or **Set** the current loglevel option value.
12166		 * @public
12167		 *
12168		 * @example
12169		 * // get the current value
12170		 * var loglevel = controller.loglevel();
12171		 *
12172		 * // set a new value
12173		 * controller.loglevel(3);
12174		 *
12175		 * @param {number} [newLoglevel] - The new loglevel setting of the Controller. `[0-3]`
12176		 * @returns {(number|Controller)} Current loglevel or parent object for chaining.
12177		 */
12178		this.loglevel = function (newLoglevel) {
12179			if (!arguments.length) { // get
12180				return _options.loglevel;
12181			} else if (_options.loglevel != newLoglevel) { // set
12182				_options.loglevel = newLoglevel;
12183			}
12184			return Controller;
12185		};
12186
12187		/**
12188		 * **Get** or **Set** the current enabled state of the controller.
12189		 * This can be used to disable all Scenes connected to the controller without destroying or removing them.
12190		 * @public
12191		 *
12192		 * @example
12193		 * // get the current value
12194		 * var enabled = controller.enabled();
12195		 *
12196		 * // disable the controller
12197		 * controller.enabled(false);
12198		 *
12199		 * @param {boolean} [newState] - The new enabled state of the controller `true` or `false`.
12200		 * @returns {(boolean|Controller)} Current enabled state or parent object for chaining.
12201		 */
12202		this.enabled = function (newState) {
12203			if (!arguments.length) { // get
12204				return _enabled;
12205			} else if (_enabled != newState) { // set
12206				_enabled = !!newState;
12207				Controller.updateScene(_sceneObjects, true);
12208			}
12209			return Controller;
12210		};
12211
12212		/**
12213		 * Destroy the Controller, all Scenes and everything.
12214		 * @public
12215		 *
12216		 * @example
12217		 * // without resetting the scenes
12218		 * controller = controller.destroy();
12219		 *
12220		 * // with scene reset
12221		 * controller = controller.destroy(true);
12222		 *
12223		 * @param {boolean} [resetScenes=false] - If `true` the pins and tweens (if existent) of all scenes will be reset.
12224		 * @returns {null} Null to unset handler variables.
12225		 */
12226		this.destroy = function (resetScenes) {
12227			window.clearTimeout(_refreshTimeout);
12228			var i = _sceneObjects.length;
12229			while (i--) {
12230				_sceneObjects[i].destroy(resetScenes);
12231			}
12232			_options.container.removeEventListener("resize", onChange);
12233			_options.container.removeEventListener("scroll", onChange);
12234			_util.cAF(_updateTimeout);
12235			log(3, "destroyed " + NAMESPACE + " (reset: " + (resetScenes ? "true" : "false") + ")");
12236			return null;
12237		};
12238
12239		// INIT
12240		construct();
12241		return Controller;
12242	};
12243
12244	// store pagewide controller options
12245	var CONTROLLER_OPTIONS = {
12246		defaults: {
12247			container: window,
12248			vertical: true,
12249			globalSceneOptions: {},
12250			loglevel: 2,
12251			refreshInterval: 100
12252		}
12253	};
12254	/*
12255	 * method used to add an option to ScrollMagic Scenes.
12256	 */
12257	ScrollMagic.Controller.addOption = function (name, defaultValue) {
12258		CONTROLLER_OPTIONS.defaults[name] = defaultValue;
12259	};
12260	// instance extension function for plugins
12261	ScrollMagic.Controller.extend = function (extension) {
12262		var oldClass = this;
12263		ScrollMagic.Controller = function () {
12264			oldClass.apply(this, arguments);
12265			this.$super = _util.extend({}, this); // copy parent state
12266			return extension.apply(this, arguments) || this;
12267		};
12268		_util.extend(ScrollMagic.Controller, oldClass); // copy properties
12269		ScrollMagic.Controller.prototype = oldClass.prototype; // copy prototype
12270		ScrollMagic.Controller.prototype.constructor = ScrollMagic.Controller; // restore constructor
12271	};
12272
12273
12274	/**
12275	 * A Scene defines where the controller should react and how.
12276	 *
12277	 * @class
12278	 *
12279	 * @example
12280	 * // create a standard scene and add it to a controller
12281	 * new ScrollMagic.Scene()
12282	 *		.addTo(controller);
12283	 *
12284	 * // create a scene with custom options and assign a handler to it.
12285	 * var scene = new ScrollMagic.Scene({
12286	 * 		duration: 100,
12287	 *		offset: 200,
12288	 *		triggerHook: "onEnter",
12289	 *		reverse: false
12290	 * });
12291	 *
12292	 * @param {object} [options] - Options for the Scene. The options can be updated at any time.
12293	 							   Instead of setting the options for each scene individually you can also set them globally in the controller as the controllers `globalSceneOptions` option. The object accepts the same properties as the ones below.
12294	 							   When a scene is added to the controller the options defined using the Scene constructor will be overwritten by those set in `globalSceneOptions`.
12295	 * @param {(number|string|function)} [options.duration=0] - The duration of the scene.
12296	 					Please see `Scene.duration()` for details.
12297	 * @param {number} [options.offset=0] - Offset Value for the Trigger Position. If no triggerElement is defined this will be the scroll distance from the start of the page, after which the scene will start.
12298	 * @param {(string|object)} [options.triggerElement=null] - Selector or DOM object that defines the start of the scene. If undefined the scene will start right at the start of the page (unless an offset is set).
12299	 * @param {(number|string)} [options.triggerHook="onCenter"] - Can be a number between 0 and 1 defining the position of the trigger Hook in relation to the viewport.
12300	 															  Can also be defined using a string:
12301	 															  ** `"onEnter"` => `1`
12302	 															  ** `"onCenter"` => `0.5`
12303	 															  ** `"onLeave"` => `0`
12304	 * @param {boolean} [options.reverse=true] - Should the scene reverse, when scrolling up?
12305	 * @param {number} [options.loglevel=2] - Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic.
12306	 										  ** `0` => silent
12307	 										  ** `1` => errors
12308	 										  ** `2` => errors, warnings
12309	 										  ** `3` => errors, warnings, debuginfo
12310	 *
12311	 */
12312	ScrollMagic.Scene = function (options) {
12313
12314		/*
12315		 * ----------------------------------------------------------------
12316		 * settings
12317		 * ----------------------------------------------------------------
12318		 */
12319
12320		var
12321			NAMESPACE = 'ScrollMagic.Scene',
12322			SCENE_STATE_BEFORE = 'BEFORE',
12323			SCENE_STATE_DURING = 'DURING',
12324			SCENE_STATE_AFTER = 'AFTER',
12325			DEFAULT_OPTIONS = SCENE_OPTIONS.defaults;
12326
12327		/*
12328		 * ----------------------------------------------------------------
12329		 * private vars
12330		 * ----------------------------------------------------------------
12331		 */
12332
12333		var
12334			Scene = this,
12335			_options = _util.extend({}, DEFAULT_OPTIONS, options),
12336			_state = SCENE_STATE_BEFORE,
12337			_progress = 0,
12338			_scrollOffset = {
12339				start: 0,
12340				end: 0
12341			}, // reflects the controllers's scroll position for the start and end of the scene respectively
12342			_triggerPos = 0,
12343			_enabled = true,
12344			_durationUpdateMethod,
12345			_controller;
12346
12347		/**
12348		 * Internal constructor function of the ScrollMagic Scene
12349		 * @private
12350		 */
12351		var construct = function () {
12352			for (var key in _options) { // check supplied options
12353				if (!DEFAULT_OPTIONS.hasOwnProperty(key)) {
12354					log(2, "WARNING: Unknown option \"" + key + "\"");
12355					delete _options[key];
12356				}
12357			}
12358			// add getters/setters for all possible options
12359			for (var optionName in DEFAULT_OPTIONS) {
12360				addSceneOption(optionName);
12361			}
12362			// validate all options
12363			validateOption();
12364		};
12365
12366		/*
12367		 * ----------------------------------------------------------------
12368		 * Event Management
12369		 * ----------------------------------------------------------------
12370		 */
12371
12372		var _listeners = {};
12373		/**
12374		 * Scene start event.
12375		 * Fires whenever the scroll position its the starting point of the scene.
12376		 * It will also fire when scrolling back up going over the start position of the scene. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback.
12377		 *
12378		 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.
12379		 *
12380		 * @event ScrollMagic.Scene#start
12381		 *
12382		 * @example
12383		 * scene.on("start", function (event) {
12384		 * 	console.log("Hit start point of scene.");
12385		 * });
12386		 *
12387		 * @property {object} event - The event Object passed to each callback
12388		 * @property {string} event.type - The name of the event
12389		 * @property {Scene} event.target - The Scene object that triggered this event
12390		 * @property {number} event.progress - Reflects the current progress of the scene
12391		 * @property {string} event.state - The current state of the scene `"BEFORE"` or `"DURING"`
12392		 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"`
12393		 */
12394		/**
12395		 * Scene end event.
12396		 * Fires whenever the scroll position its the ending point of the scene.
12397		 * It will also fire when scrolling back up from after the scene and going over its end position. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback.
12398		 *
12399		 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.
12400		 *
12401		 * @event ScrollMagic.Scene#end
12402		 *
12403		 * @example
12404		 * scene.on("end", function (event) {
12405		 * 	console.log("Hit end point of scene.");
12406		 * });
12407		 *
12408		 * @property {object} event - The event Object passed to each callback
12409		 * @property {string} event.type - The name of the event
12410		 * @property {Scene} event.target - The Scene object that triggered this event
12411		 * @property {number} event.progress - Reflects the current progress of the scene
12412		 * @property {string} event.state - The current state of the scene `"DURING"` or `"AFTER"`
12413		 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"`
12414		 */
12415		/**
12416		 * Scene enter event.
12417		 * Fires whenever the scene enters the "DURING" state.
12418		 * Keep in mind that it doesn't matter if the scene plays forward or backward: This event always fires when the scene enters its active scroll timeframe, regardless of the scroll-direction.
12419		 *
12420		 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.
12421		 *
12422		 * @event ScrollMagic.Scene#enter
12423		 *
12424		 * @example
12425		 * scene.on("enter", function (event) {
12426		 * 	console.log("Scene entered.");
12427		 * });
12428		 *
12429		 * @property {object} event - The event Object passed to each callback
12430		 * @property {string} event.type - The name of the event
12431		 * @property {Scene} event.target - The Scene object that triggered this event
12432		 * @property {number} event.progress - Reflects the current progress of the scene
12433		 * @property {string} event.state - The current state of the scene - always `"DURING"`
12434		 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"`
12435		 */
12436		/**
12437		 * Scene leave event.
12438		 * Fires whenever the scene's state goes from "DURING" to either "BEFORE" or "AFTER".
12439		 * Keep in mind that it doesn't matter if the scene plays forward or backward: This event al
12439ways fires when the scene leaves its active scroll timeframe, regardless of the scroll-direction.
12440		 *
12441		 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.
12442		 *
12443		 * @event ScrollMagic.Scene#leave
12444		 *
12445		 * @example
12446		 * scene.on("leave", function (event) {
12447		 * 	console.log("Scene left.");
12448		 * });
12449		 *
12450		 * @property {object} event - The event Object passed to each callback
12451		 * @property {string} event.type - The name of the event
12452		 * @property {Scene} event.target - The Scene object that triggered this event
12453		 * @property {number} event.progress - Reflects the current progress of the scene
12454		 * @property {string} event.state - The current state of the scene `"BEFORE"` or `"AFTER"`
12455		 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"`
12456		 */
12457		/**
12458		 * Scene update event.
12459		 * Fires whenever the scene is updated (but not necessarily changes the progress).
12460		 *
12461		 * @event ScrollMagic.Scene#update
12462		 *
12463		 * @example
12464		 * scene.on("update", function (event) {
12465		 * 	console.log("Scene updated.");
12466		 * });
12467		 *
12468		 * @property {object} event - The event Object passed to each callback
12469		 * @property {string} event.type - The name of the event
12470		 * @property {Scene} event.target - The Scene object that triggered this event
12471		 * @property {number} event.startPos - The starting position of the scene (in relation to the conainer)
12472		 * @property {number} event.endPos - The ending position of the scene (in relation to the conainer)
12473		 * @property {number} event.scrollPos - The current scroll position of the container
12474		 */
12475		/**
12476		 * Scene progress event.
12477		 * Fires whenever the progress of the scene changes.
12478		 *
12479		 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.
12480		 *
12481		 * @event ScrollMagic.Scene#progress
12482		 *
12483		 * @example
12484		 * scene.on("progress", function (event) {
12485		 * 	console.log("Scene progress changed to " + event.progress);
12486		 * });
12487		 *
12488		 * @property {object} event - The event Object passed to each callback
12489		 * @property {string} event.type - The name of the event
12490		 * @property {Scene} event.target - The Scene object that triggered this event
12491		 * @property {number} event.progress - Reflects the current progress of the scene
12492		 * @property {string} event.state - The current state of the scene `"BEFORE"`, `"DURING"` or `"AFTER"`
12493		 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"`
12494		 */
12495		/**
12496		 * Scene change event.
12497		 * Fires whenvever a property of the scene is changed.
12498		 *
12499		 * @event ScrollMagic.Scene#change
12500		 *
12501		 * @example
12502		 * scene.on("change", function (event) {
12503		 * 	console.log("Scene Property \"" + event.what + "\" changed to " + event.newval);
12504		 * });
12505		 *
12506		 * @property {object} event - The event Object passed to each callback
12507		 * @property {string} event.type - The name of the event
12508		 * @property {Scene} event.target - The Scene object that triggered this event
12509		 * @property {string} event.what - Indicates what value has been changed
12510		 * @property {mixed} event.newval - The new value of the changed property
12511		 */
12512		/**
12513		 * Scene shift event.
12514		 * Fires whenvever the start or end **scroll offset** of the scene change.
12515		 * This happens explicitely, when one of these values change: `offset`, `duration` or `triggerHook`.
12516		 * It will fire implicitly when the `triggerElement` changes, if the new element has a different position (most cases).
12517		 * It will also fire implicitly when the size of the container changes and the triggerHook is anything other than `onLeave`.
12518		 *
12519		 * @event ScrollMagic.Scene#shift
12520		 * @since 1.1.0
12521		 *
12522		 * @example
12523		 * scene.on("shift", function (event) {
12524		 * 	console.log("Scene moved, because the " + event.reason + " has changed.)");
12525		 * });
12526		 *
12527		 * @property {object} event - The event Object passed to each callback
12528		 * @property {string} event.type - The name of the event
12529		 * @property {Scene} event.target - The Scene object that triggered this event
12530		 * @property {string} event.reason - Indicates why the scene has shifted
12531		 */
12532		/**
12533		 * Scene destroy event.
12534		 * Fires whenvever the scene is destroyed.
12535		 * This can be used to tidy up custom behaviour used in events.
12536		 *
12537		 * @event ScrollMagic.Scene#destroy
12538		 * @since 1.1.0
12539		 *
12540		 * @example
12541		 * scene.on("enter", function (event) {
12542		 *        // add custom action
12543		 *        $("#my-elem").left("200");
12544		 *      })
12545		 *      .on("destroy", function (event) {
12546		 *        // reset my element to start position
12547		 *        if (event.reset) {
12548		 *          $("#my-elem").left("0");
12549		 *        }
12550		 *      });
12551		 *
12552		 * @property {object} event - The event Object passed to each callback
12553		 * @property {string} event.type - The name of the event
12554		 * @property {Scene} event.target - The Scene object that triggered this event
12555		 * @property {boolean} event.reset - Indicates if the destroy method was called with reset `true` or `false`.
12556		 */
12557		/**
12558		 * Scene add event.
12559		 * Fires when the scene is added to a controller.
12560		 * This is mostly used by plugins to know that change might be due.
12561		 *
12562		 * @event ScrollMagic.Scene#add
12563		 * @since 2.0.0
12564		 *
12565		 * @example
12566		 * scene.on("add", function (event) {
12567		 * 	console.log('Scene was added to a new controller.');
12568		 * });
12569		 *
12570		 * @property {object} event - The event Object passed to each callback
12571		 * @property {string} event.type - The name of the event
12572		 * @property {Scene} event.target - The Scene object that triggered this event
12573		 * @property {boolean} event.controller - The controller object the scene was added to.
12574		 */
12575		/**
12576		 * Scene remove event.
12577		 * Fires when the scene is removed from a controller.
12578		 * This is mostly used by plugins to know that change might be due.
12579		 *
12580		 * @event ScrollMagic.Scene#remove
12581		 * @since 2.0.0
12582		 *
12583		 * @example
12584		 * scene.on("remove", function (event) {
12585		 * 	console.log('Scene was removed from its controller.');
12586		 * });
12587		 *
12588		 * @property {object} event - The event Object passed to each callback
12589		 * @property {string} event.type - The name of the event
12590		 * @property {Scene} event.target - The Scene object that triggered this event
12591		 */
12592
12593		/**
12594		 * Add one ore more event listener.
12595		 * The callback function will be fired at the respective event, and an object c
12595ontaining relevant data will be passed to the callback.
12596		 * @method ScrollMagic.Scene#on
12597		 *
12598		 * @example
12599		 * function callback (event) {
12600		 * 		console.log("Event fired! (" + event.type + ")");
12601		 * }
12602		 * // add listeners
12603		 * scene.on("change update progress start end enter leave", callback);
12604		 *
12605		 * @param {string} names - The name or names of the event the callback should be attached to.
12606		 * @param {function} callback - A function that should be executed, when the event is dispatched. An event object will be passed to the callback.
12607		 * @returns {Scene} Parent object for chaining.
12608		 */
12609		this.on = function (names, callback) {
12610			if (_util.type.Function(callback)) {
12611				names = names.trim().split(' ');
12612				names.forEach(function (fullname) {
12613					var
12614						nameparts = fullname.split('.'),
12615						eventname = nameparts[0],
12616						namespace = nameparts[1];
12617					if (eventname != "*") { // disallow wildcards
12618						if (!_listeners[eventname]) {
12619							_listeners[eventname] = [];
12620						}
12621						_listeners[eventname].push({
12622							namespace: namespace || '',
12623							callback: callback
12624						});
12625					}
12626				});
12627			} else {
12628				log(1, "ERROR when calling '.on()': Supplied callback for '" + names + "' is not a valid function!");
12629			}
12630			return Scene;
12631		};
12632
12633		/**
12634		 * Remove one or more event listener.
12635		 * @method ScrollMagic.Scene#off
12636		 *
12637		 * @example
12638		 * function callback (event) {
12639		 * 		console.log("Event fired! (" + event.type + ")");
12640		 * }
12641		 * // add listeners
12642		 * scene.on("change update", callback);
12643		 * // remove listeners
12644		 * scene.off("change update", callback);
12645		 *
12646		 * @param {string} names - The name or names of the event that should be removed.
12647		 * @param {function} [callback] - A specific callback function that should be removed. If none is passed all callbacks to the event listener will be removed.
12648		 * @returns {Scene} Parent object for chaining.
12649		 */
12650		this.off = function (names, callback) {
12651			if (!names) {
12652				log(1, "ERROR: Invalid event name supplied.");
12653				return Scene;
12654			}
12655			names = names.trim().split(' ');
12656			names.forEach(function (fullname, key) {
12657				var
12658					nameparts = fullname.split('.'),
12659					eventname = nameparts[0],
12660					namespace = nameparts[1] || '',
12661					removeList = eventname === '*' ? Object.keys(_listeners) : [eventname];
12662				removeList.forEach(function (remove) {
12663					var
12664						list = _listeners[remove] || [],
12665						i = list.length;
12666					while (i--) {
12667						var listener = list[i];
12668						if (listener && (namespace === listener.namespace || namespace === '*') && (!callback || callback == listener.callback)) {
12669							list.splice(i, 1);
12670						}
12671					}
12672					if (!list.length) {
12673						delete _listeners[remove];
12674					}
12675				});
12676			});
12677			return Scene;
12678		};
12679
12680		/**
12681		 * Trigger an event.
12682		 * @method ScrollMagic.Scene#trigger
12683		 *
12684		 * @example
12685		 * this.trigger("change");
12686		 *
12687		 * @param {string} name - The name of the event that should be triggered.
12688		 * @param {object} [vars] - An object containing info that should be passed to the callback.
12689		 * @returns {Scene} Parent object for chaining.
12690		 */
12691		this.trigger = function (name, vars) {
12692			if (name) {
12693				var
12694					nameparts = name.trim().split('.'),
12695					eventname = nameparts[0],
12696					namespace = nameparts[1],
12697					listeners = _listeners[eventname];
12698				log(3, 'event fired:', eventname, vars ? "->" : '', vars || '');
12699				if (listeners) {
12700					listeners.forEach(function (listener, key) {
12701						if (!namespace || namespace === listener.namespace) {
12702							listener.callback.call(Scene, new ScrollMagic.Event(eventname, listener.namespace, Scene, vars));
12703						}
12704					});
12705				}
12706			} else {
12707				log(1, "ERROR: Invalid event name supplied.");
12708			}
12709			return Scene;
12710		};
12711
12712		// set event listeners
12713		Scene
12714			.on("change.internal", function (e) {
12715				if (e.what !== "loglevel" && e.what !== "tweenChanges") { // no need for a scene update scene with these options...
12716					if (e.what === "triggerElement") {
12717						updateTriggerElementPosition();
12718					} else if (e.what === "reverse") { // the only property left that may have an impact on the current scene state. Everything else is handled by the shift event.
12719						Scene.update();
12720					}
12721				}
12722			})
12723			.on("shift.internal", function (e) {
12724				updateScrollOffset();
12725				Scene.update(); // update scene to reflect new position
12726			});
12727
12728		/**
12729		 * Send a debug message to the console.
12730		 * @private
12731		 * but provided publicly with _log for plugins
12732		 *
12733		 * @param {number} loglevel - The loglevel required to initiate output for the message.
12734		 * @param {...mixed} output - One or more variables that should be passed to the console.
12735		 */
12736		var log = this._log = function (loglevel, output) {
12737			if (_options.loglevel >= loglevel) {
12738				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ") ->");
12739				_util.log.apply(window, arguments);
12740			}
12741		};
12742
12743		/**
12744		 * Add the scene to a controller.
12745		 * This is the equivalent to `Controller.addScene(scene)`.
12746		 * @method ScrollMagic.Scene#addTo
12747		 *
12748		 * @example
12749		 * // add a scene to a ScrollMagic Controller
12750		 * scene.addTo(controller);
12751		 *
12752		 * @param {ScrollMagic.Controller} controller - The controller to which the scene should be added.
12753		 * @returns {Scene} Parent object for chaining.
12754		 */
12755		this.addTo = function (controller) {
12756			if (!(controller instanceof ScrollMagic.Controller)) {
12757				log(1, "ERROR: supplied argument of 'addTo()' is not a valid ScrollMagic Controller");
12758			} else if (_controller != controller) {
12759				// new controller
12760				if (_controller) { // was associated to a different controller before, so remove it...
12761					_controller.removeScene(Scene);
12762				}
12763				_controller = controller;
12764				validateOption();
12765				updateDuration(true);
12766				updateTriggerElementPosition(true);
12767				updateScrollOffset();
12768				_controller.info("container").addEventListener('resize', onContainerResize);
12769				controller.addScene(Scene);
12770				Scene.trigger("add", {
12771					controller: _controller
12772				});
12773				log(3, "added " + NAMESPACE + " to controller");
12774				Scene.update();
12775			}
12776			return Scene;
12777		};
12778
12779		/**
12780		 * **Get** or **Set** the current enabled state of the scene.
12781		 * This can be used to disable this scene without removing or destroying it.
12782		 * @method ScrollMagic.Scene#enabled
12783		 *
12784		 * @example
12785		 * // get the current value
12786		 * var enabled = scene.enabled();
12787		 *
12788		 * // disable the scene
12789		 * scene.enabled(false);
12790		 *
12791		 * @param {boolean} [newState] - The new enabled state of the scene `true` or `false`.
12792		 * @returns {(boolean|Scene)} Current enabled state or parent object for chaining.
12793		 */
12794		this.enabled = function (newState) {
12795			if (!arguments.length) { // get
12796				return _enabled;
12797			} else if (_enabled != newState) { // set
12798				_enabled = !!newState;
12799				Scene.update(true);
12800			}
12801			return Scene;
12802		};
12803
12804		/**
12805		 * Remove the scene from the controller.
12806		 * This is the equivalent to `Controller.removeScene(scene)`.
12807		 * The scene will not be updated anymore until you readd it to a controller.
12808		 * To remove the pin or the tween you need to call removeTween() or removePin() respectively.
12809		 * @method ScrollMagic.Scene#remove
12810		 * @example
12811		 * // remove the scene from its controller
12812		 * scene.remove();
12813		 *
12814		 * @returns {Scene} Parent object for chaining.
12815		 */
12816		this.remove = function () {
12817			if (_controller) {
12818				_controller.info("container").removeEventListener('resize', onContainerResize);
12819				var tmpParent = _controller;
12820				_controller = undefined;
12821				tmpParent.removeScene(Scene);
12822				Scene.trigger("remove");
12823				log(3, "removed " + NAMESPACE + " from controller");
12824			}
12825			return Scene;
12826		};
12827
12828		/**
12829		 * Destroy the scene and everything.
12830		 * @method ScrollMagic.Scene#destroy
12831		 * @example
12832		 * // destroy the scene without resetting the pin and tween to their initial positions
12833		 * scene = scene.destroy();
12834		 *
12835		 * // destroy the scene and reset the pin and tween
12836		 * scene = scene.destroy(true);
12837		 *
12838		 * @param {boolean} [reset=false] - If `true` the pin and tween (if existent) will be reset.
12839		 * @returns {null} Null to unset handler variables.
12840		 */
12841		this.destroy = function (reset) {
12842			Scene.trigger("destroy", {
12843				reset: reset
12844			});
12845			Scene.remove();
12846			Scene.off("*.*");
12847			log(3, "destroyed " + NAMESPACE + " (reset: " + (reset ? "true" : "false") + ")");
12848			return null;
12849		};
12850
12851
12852		/**
12853		 * Updates the Scene to reflect the current state.
12854		 * This is the equivalent to `Controller.updateScene(scene, immediately)`.
12855		 * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container.
12856		 * It then updates the current scene state accordingly (or does nothing, if the state is already correct) – Pins will be set to their correct position and tweens will be updated to their correct progress.
12857		 * This means an update doesn't necessarily result in a progress change. The `progress` event will be fired if the progress has indeed changed between this update and the last.
12858		 * _**NOTE:** This method gets called constantly whenever ScrollMagic detects a change. The only application for you is 
12858if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._
12859		 * @method ScrollMagic.Scene#update
12860		 * @example
12861		 * // update the scene on next tick
12862		 * scene.update();
12863		 *
12864		 * // update the scene immediately
12865		 * scene.update(true);
12866		 *
12867		 * @fires Scene.update
12868		 *
12869		 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance).
12870		 * @returns {Scene} Parent object for chaining.
12871		 */
12872		this.update = function (immediately) {
12873			if (_controller) {
12874				if (immediately) {
12875					if (_controller.enabled() && _enabled) {
12876						var
12877							scrollPos = _controller.info("scrollPos"),
12878							newProgress;
12879
12880						if (_options.duration > 0) {
12881							newProgress = (scrollPos - _scrollOffset.start) / (_scrollOffset.end - _scrollOffset.start);
12882						} else {
12883							newProgress = scrollPos >= _scrollOffset.start ? 1 : 0;
12884						}
12885
12886						Scene.trigger("update", {
12887							startPos: _scrollOffset.start,
12888							endPos: _scrollOffset.end,
12889							scrollPos: scrollPos
12890						});
12891
12892						Scene.progress(newProgress);
12893					} else if (_pin && _state === SCENE_STATE_DURING) {
12894						updatePinState(true); // unpin in position
12895					}
12896				} else {
12897					_controller.updateScene(Scene, false);
12898				}
12899			}
12900			return Scene;
12901		};
12902
12903		/**
12904		 * Updates dynamic scene variables like the trigger element position or the duration.
12905		 * This method is automatically called in regular intervals from the controller. See {@link ScrollMagic.Controller} option `refreshInterval`.
12906		 *
12907		 * You can call it to minimize lag, for example when you intentionally change the position of the triggerElement.
12908		 * If you don't it will simply be updated in the next refresh interval of the container, which is usually sufficient.
12909		 *
12910		 * @method ScrollMagic.Scene#refresh
12911		 * @since 1.1.0
12912		 * @example
12913		 * scene = new ScrollMagic.Scene({triggerElement: "#trigger"});
12914		 *
12915		 * // change the position of the trigger
12916		 * $("#trigger").css("top", 500);
12917		 * // immediately let the scene know of this change
12918		 * scene.refresh();
12919		 *
12920		 * @fires {@link Scene.shift}, if the trigger element position or the duration changed
12921		 * @fires {@link Scene.change}, if the duration changed
12922		 *
12923		 * @returns {Scene} Parent object for chaining.
12924		 */
12925		this.refresh = function () {
12926			updateDuration();
12927			updateTriggerElementPosition();
12928			// update trigger element position
12929			return Scene;
12930		};
12931
12932		/**
12933		 * **Get** or **Set** the scene's progress.
12934		 * Usually it shouldn't be necessary to use this as a setter, as it is set automatically by scene.update().
12935		 * The order in which the events are fired depends on the duration of the scene:
12936		 *  1. Scenes with `duration == 0`:
12937		 *  Scenes that have no duration by definition have no ending. Thus the `end` event will never be fired.
12938		 *  When the trigger position of the scene is passed the events are always fired in this order:
12939		 *  `enter`, `start`, `progress` when scrolling forward
12940		 *  and
12941		 *  `progress`, `start`, `leave` when scrolling in reverse
12942		 *  2. Scenes with `duration > 0`:
12943		 *  Scenes with a set duration have a defined start and end point.
12944		 *  When scrolling past the start position of the scene it will fire these events in this order:
12945		 *  `enter`, `start`, `progress`
12946		 *  When continuing to scroll and passing the end point it will fire these events:
12947		 *  `progress`, `end`, `leave`
12948		 *  When reversing through the end point these events are fired:
12949		 *  `enter`, `end`, `progress`
12950		 *  And when continuing to scroll past the start position in reverse it will fire:
12951		 *  `progress`, `start`, `leave`
12952		 *  In between start and end the `progress` event will be called constantly, whenever the progress changes.
12953		 *
12954		 * In short:
12955		 * `enter` events will always trigger **before** the progress update and `leave` envents will trigger **after** the progress update.
12956		 * `start` and `end` will always trigger at their respective position.
12957		 *
12958		 * Please review the event descriptions for details on the events and the event object that is passed to the callback.
12959		 *
12960		 * @method ScrollMagic.Scene#progress
12961		 * @example
12962		 * // get the current scene progress
12963		 * var progress = scene.progress();
12964		 *
12965		 * // set new scene progress
12966		 * scene.progress(0.3);
12967		 *
12968		 * @fires {@link Scene.enter}, when used as setter
12969		 * @fires {@link Scene.start}, when used as setter
12970		 * @fires {@link Scene.progress}, when used as setter
12971		 * @fires {@link Scene.end}, when used as setter
12972		 * @fires {@link Scene.leave}, when used as setter
12973		 *
12974		 * @param {number} [progress] - The new progress value of the scene `[0-1]`.
12975		 * @returns {number} `get` -  Current scene progress.
12976		 * @returns {Scene} `set` -  Parent object for chaining.
12977		 */
12978		this.progress = function (progress) {
12979			if (!arguments.length) { // get
12980				return _progress;
12981			} else { // set
12982				var
12983					doUpdate = false,
12984					oldState = _state,
12985					scrollDirection = _controller ? _controller.info("scrollDirection") : 'PAUSED',
12986					reverseOrForward = _options.reverse || progress >= _progress;
12987				if (_options.duration === 0) {
12988					// zero duration scenes
12989					doUpdate = _progress != progress;
12990					_progress = progress < 1 && reverseOrForward ? 0 : 1;
12991					_state = _progress === 0 ? SCENE_STATE_BEFORE : SCENE_STATE_DURING;
12992				} else {
12993					// scenes with start and end
12994					if (progress < 0 && _state !== SCENE_STATE_BEFORE && reverseOrForward) {
12995						// go back to initial state
12996						_progress = 0;
12997						_state = SCENE_STATE_BEFORE;
12998						doUpdate = true;
12999					} else if (progress >= 0 && progress < 1 && reverseOrForward) {
13000						_progress = progress;
13001						_state = SCENE_STATE_DURING;
13002						doUpdate = true;
13003					} else if (progress >= 1 && _state !== SCENE_STATE_AFTER) {
13004						_progress = 1;
13005						_state = SCENE_STATE_AFTER;
13006						doUpdate = true;
13007					} else if (_state === SCENE_STATE_DURING && !reverseOrForward) {
13008						updatePinState(); // in case we scrolled backwards mid-scene and reverse is disabled => update the pin position, so it doesn't move back as well.
13009					}
13010				}
13011				if (doUpdate) {
13012					// fire events
13013					var
13014						eventVars = {
13015							progress: _progress,
13016							state: _state,
13017							scrollDirection: scrollDirection
13018						},
13019						stateChanged = _state != oldState;
13020
13021					var trigger = function (eventName) { // tmp helper to simplify code
13022						Scene.trigger(eventName, eventVars);
13023					};
13024
13025					if (stateChanged) { // enter events
13026						if (oldState !== SCENE_STATE_DURING) {
13027							trigger("enter");
13028							trigger(oldState === SCENE_STATE_BEFORE ? "start" : "end");
13029						}
13030					}
13031					trigger("progress");
13032					if (stateChanged) { // leave events
13033						if (_state !== SCENE_STATE_DURING) {
13034							trigger(_state === SCENE_STATE_BEFORE ? "start" : "end");
13035							trigger("leave");
13036						}
13037					}
13038				}
13039
13040				return Scene;
13041			}
13042		};
13043
13044
13045		/**
13046		 * Update the start and end scrollOffset of the container.
13047		 * The positions reflect what the controller's scroll position will be at the start and end respectively.
13048		 * Is called, when:
13049		 *   - Scene event "change" is called with: offset, triggerHook, duration
13050		 *   - scroll container event "resize" is called
13051		 *   - the position of the triggerElement changes
13052		 *   - the controller changes -> addTo()
13053		 * @private
13054		 */
13055		var updateScrollOffset = function () {
13056			_scrollOffset = {
13057				start: _triggerPos + _options.offset
13058			};
13059			if (_controller && _options.triggerElement) {
13060				// take away triggerHook portion to get relative to top
13061				_scrollOffset.start -= _controller.info("size") * _options.triggerHook;
13062			}
13063			_scrollOffset.end = _scrollOffset.start + _options.duration;
13064		};
13065
13066		/**
13067		 * Updates the duration if set to a dynamic function.
13068		 * This method is called when the scene is added to a controller and in regular intervals from the controller through scene.refresh().
13069		 *
13070		 * @fires {@link Scene.change}, if the duration changed
13071		 * @fires {@link Scene.shift}, if the duration changed
13072		 *
13073		 * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed.
13074		 * @private
13075		 */
13076		var updateDuration = function (suppressEvents) {
13077			// update duration
13078			if (_durationUpdateMethod) {
13079				var varname = "duration";
13080				if (changeOption(varname, _durationUpdateMethod.call(Scene)) && !suppressEvents) { // set
13081					Scene.trigger("change", {
13082						what: varname,
13083						newval: _options[varname]
13084					});
13085					Scene.trigger("shift", {
13086						reason: varname
13087					});
13088				}
13089			}
13090		};
13091
13092		/**
13093		 * Updates the position of the triggerElement, if present.
13094		 * This method is called ...
13095		 *  - ... when the triggerElement is changed
13096		 *  - ... when the scene is added to a (new) controller
13097		 *  - ... in regular intervals from the controller through scene.refresh().
13098		 *
13099		 * @fires {@link Scene.shift}, if the position changed
13100		 *
13101		 * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed.
13102		 * @private
13103		 */
13104		var updateTriggerElementPosition = function (suppressEvents) {
13105			var
13106				elementPos = 0,
13107				telem = _options.triggerElement;
13108			if (_controller && (telem || _triggerPos > 0)) { // either an element exists or was removed and the triggerPos is still > 0
13109				if (telem) { // there currently a triggerElement set
13110					if (telem.parentNode) { // check if element is still attached to DOM
13111						var
13112							controllerInfo = _controller.info(),
13113							containerOffset = _util.get.offset(controllerInfo.container), // container position is needed because element offset is returned in relation to document, not in relation to container.
13114							param = controllerInfo.vertical ? "top" : "left"; // which param is of interest ?
13115
13116						// if parent is spacer, use spacer position instead so correct start position is returned for pinned elements.
13117						while (telem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) {
13118							telem = telem.parentNode;
13119						}
13120
13121						var elementOffset = _util.get.offset(telem);
13122
13123						if (!controllerInfo.isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent
13124							containerOffset[param] -= _controller.scrollPos();
13125						}
13126
13127						elementPos = elementOffset[param] - containerOffset[param];
13128
13129					} else { // there was an element, but it was removed from DOM
13130						log(2, "WARNING: triggerElement was removed from DOM and will be reset to", undefined);
13131						Scene.triggerElement(undefined); // unset, so a change event is triggered
13132					}
13133				}
13134
13135				var changed = elementPos != _triggerPos;
13136				_triggerPos = elementPos;
13137				if (changed && !suppressEvents) {
13138					Scene.trigger("shift", {
13139						reason: "triggerElementPosition"
13140					});
13141				}
13142			}
13143		};
13144
13145		/**
13146		 * Trigger a shift event, when the container is resized and the triggerHook is > 1.
13147		 * @private
13148		 */
13149		var onContainerResize = function (e) {
13150			if (_options.triggerHook > 0) {
13151				Scene.trigger("shift", {
13152					reason: "containerResize"
13153				});
13154			}
13155		};
13156
13157
13158		var _validate = _util.extend(SCENE_OPTIONS.validate, {
13159			// validation for duration handled internally for reference to private var _durationMethod
13160			duration: function (val) {
13161				if (_util.type.String(val) && val.match(/^(\.|\d)*\d+%$/)) {
13162					// percentage value
13163					var perc = parseFloat(val) / 100;
13164					val = function () {
13165						return _controller ? _controller.info("size") * perc : 0;
13166					};
13167				}
13168				if (_util.type.Function(val)) {
13169					// function
13170					_durationUpdateMethod = val;
13171					try {
13172						val = parseFloat(_durationUpdateMethod.call(Scene));
13173					} catch (e) {
13174						val = -1; // will cause error below
13175					}
13176				}
13177				// val has to be float
13178				val = parseFloat(val);
13179				if (!_util.type.Number(val) || val < 0) {
13180					if (_durationUpdateMethod) {
13181						_durationUpdateMethod = undefined;
13182						throw ["Invalid return value of supplied function for option \"duration\":", val];
13183					} else {
13184						throw ["Invalid value for option \"duration\":", val];
13185					}
13186				}
13187				return val;
13188			}
13189		});
13190
13191		/**
13192		 * Checks the validity of a specific or all options and reset to default if neccessary.
13193		 * @private
13194		 */
13195		var validateOption = function (check) {
13196			check = arguments.length ? [check] : Object.keys(_validate);
13197			check.forEach(function (optionName, key) {
13198				var value;
13199				if (_validate[optionName]) { // there is a validation method for this option
13200					try { // validate value
13201						value = _validate[optionName](_options[optionName]);
13202					} catch (e) { // validation failed -> reset to default
13203						value = DEFAULT_OPTIONS[optionName];
13204						var logMSG = _util.type.String(e) ? [e] : e;
13205						if (_util.type.Array(logMSG)) {
13206							logMSG[0] = "ERROR: " + logMSG[0];
13207							logMSG.unshift(1); // loglevel 1 for error msg
13208							log.apply(this, logMSG);
13209						} else {
13210							log(1, "ERROR: Problem executing validation callback for option '" + optionName + "':", e.message);
13211						}
13212					} finally {
13213						_options[optionName] = value;
13214					}
13215				}
13216			});
13217		};
13218
13219		/**
13220		 * Helper used by the setter/getters for scene options
13221		 * @private
13222		 */
13223		var changeOption = function (varname, newval) {
13224			var
13225				changed = false,
13226				oldval = _options[varname];
13227			if (_options[varname] != newval) {
13228				_options[varname] = newval;
13229				validateOption(varname); // resets to default if necessary
13230				changed = oldval != _options[varname];
13231			}
13232			return changed;
13233		};
13234
13235		// generate getters/setters for all options
13236		var addSceneOption = function (optionName) {
13237			if (!Scene[optionName]) {
13238				Scene[optionName] = function (newVal) {
13239					if (!arguments.length) { // get
13240						return _options[optionName];
13241					} else {
13242						if (optionName === "duration") { // new duration is set, so any previously set function must be unset
13243							_durationUpdateMethod = undefined;
13244						}
13245						if (changeOption(optionName, newVal)) { // set
13246							Scene.trigger("change", {
13247								what: optionName,
13248								newval: _options[optionName]
13249							});
13250							if (SCENE_OPTIONS.shifts.indexOf(optionName) > -1) {
13251								Scene.trigger("shift", {
13252									reason: optionName
13253								});
13254							}
13255						}
13256					}
13257					return Scene;
13258				};
13259			}
13260		};
13261
13262		/**
13263		 * **Get** or **Set** the duration option value.
13264		 *
13265		 * As a **setter** it accepts three types of parameters:
13266		 * 1. `number`: Sets the duration of the scene to exactly this amount of pixels.
13267		 *   This means the scene will last for exactly this amount of pixels scrolled. Sub-Pixels are also valid.
13268		 *   A value of `0` means that the scene is 'open end' and no end will be triggered. Pins will never unpin and animations will play independently of scroll progress.
13269		 * 2. `string`: Always updates the duration relative to parent scroll container.
13270		 *   For example `"100%"` will keep the duration always exactly at the inner height of the scroll container.
13271		 *   When scrolling vertically the width is used for reference respectively.
13272		 * 3. `function`: The supplied function will be called to return the scene duration.
13273		 *   This is useful in setups where the duration depends on other elements who might change size. By supplying a function you can return a value instead of updating potentially multiple scene durations.
13274		 *   The scene can be referenced inside the callback using `this`.
13275		 *   _**WARNING:** This is an easy way to kill performance, as the callback will be executed every time `Scene.refresh()` is called, which happens a lot. The interval is defined by the controller (see ScrollMagic.Controller option `refreshInterval`).
13276		 *   It's recomended to avoid calculations within the function and use cached variables as return values.
13277		 *   This counts double if you use the same function for multiple scenes._
13278		 *
13279		 * @method ScrollMagic.Scene#duration
13280		 * @example
13281		 * // get the current duration value
13282		 * var duration = scene.duration();
13283		 *
13284		 * // set a new duration
13285		 * scene.duration(300);
13286		 *
13287		 * // set duration responsively to container size
13288		 * scene.duration("100%");
13289		 *
13290		 * // use a function to randomize the duration for some reason.
13291		 * var durationValueCache;
13292		 * function durationCallback () {
13293		 *   return durationValueCache;
13294		 * }
13295		 * function updateDuration () {
13296		 *   durationValueCache = Math.random() * 100;
13297		 * }
13298		 * updateDuration(); // set to initial value
13299		 * scene.duration(durationCallback); // set duration callback
13300		 *
13301		 * @fires {@link Scene.change}, when used as setter
13302		 * @fires {@link Scene.shift}, when used as setter
13303		 * @param {(number|string|function)} [newDuration] - The new duration setting for the scene.
13304		 * @returns {number} `get` -  Current scene duration.
13305		 * @returns {Scene} `set` -  Parent object for chaining.
13306		 */
13307
13308		/**
13309		 * **Get** or **Set** the offset option value.
13310		 * @method ScrollMagic.Scene#offset
13311		 * @example
13312		 * // get the current offset
13313		 * var offset = scene.offset();
13314		 *
13315		 * // set a new offset
13316		 * scene.offset(100);
13317		 *
13318		 * @fires {@link Scene.change}, when used as setter
13319		 * @fires {@link Scene.shift}, when used as setter
13320		 * @param {number} [newOffset] - The new offset of the scene.
13321		 * @returns {number} `get` -  Current scene offset.
13322		 * @returns {Scene} `set` -  Parent object for chaining.
13323		 */
13324
13325		/**
13326		 * **Get** or **Set** the triggerElement option value.
13327		 * Does **not** fire `Scene.shift`, because changing the trigger Element doesn't necessarily mean the start position changes. This will be determined in `Scene.refresh()`, which is automatically triggered.
13328		 * @method ScrollMagic.Scene#triggerElement
13329		 * @example
13330		 * // get the current triggerElement
13331		 * var triggerElement = scene.triggerElement();
13332		 *
13333		 * // set a new triggerElement using a selector
13334		 * scene.triggerElement("#trigger");
13335		 * // set a new triggerElement using a DOM object
13336		 * scene.triggerElement(document.getElementById("trigger"));
13337		 *
13338		 * @fires {@link Scene.change}, when used as setter
13339		 * @param {(string|object)} [newTriggerElement] - The new trigger element for the scene.
13340		 * @returns {(string|object)} `get` -  Current triggerElement.
13341		 * @returns {Scene} `set` -  Parent object for chaining.
13342		 */
13343
13344		/**
13345		 * **Get** or **Set** the triggerHook option value.
13346		 * @method ScrollMagic.Scene#triggerHook
13347		 * @example
13348		 * // get the current triggerHook value
13349		 * var triggerHook = scene.triggerHook();
13350		 *
13351		 * // set a new triggerHook using a string
13352		 * scene.triggerHook("onLeave");
13353		 * // set a new triggerHook using a number
13354		 * scene.triggerHook(0.7);
13355		 *
13356		 * @fires {@link Scene.change}, when used as setter
13357		 * @fires {@link Scene.shift}, when used as setter
13358		 * @param {(number|string)} [newTriggerHook] - The new triggerHook of the scene. See {@link Scene} parameter description for value options.
13359		 * @returns {number} `get` -  Current triggerHook (ALWAYS numerical).
13360		 * @returns {Scene} `set` -  Parent object for chaining.
13361		 */
13362
13363		/**
13364		 * **Get** or **Set** the reverse option value.
13365		 * @method ScrollMagic.Scene#reverse
13366		 * @example
13367		 * // get the current reverse option
13368		 * var reverse = scene.reverse();
13369		 *
13370		 * // set new reverse option
13371		 * scene.reverse(false);
13372		 *
13373		 * @fires {@link Scene.change}, when used as setter
13374		 * @param {boolean} [newReverse] - The new reverse setting of the scene.
13375		 * @returns {boolean} `get` -  Current reverse option value.
13376		 * @returns {Scene} `set` -  Parent object for chaining.
13377		 */
13378
13379		/**
13380		 * **Get** or **Set** the loglevel option value.
13381		 * @method ScrollMagic.Scene#loglevel
13382		 * @example
13383		 * // get the current loglevel
13384		 * var loglevel = scene.loglevel();
13385		 *
13386		 * // set new loglevel
13387		 * scene.loglevel(3);
13388		 *
13389		 * @fires {@link Scene.change}, when used as setter
13390		 * @param {number} [newLoglevel] - The new loglevel setting of the scene. `[0-3]`
13391		 * @returns {number} `get` -  Current loglevel.
13392		 * @returns {Scene} `set` -  Parent object for chaining.
13393		 */
13394
13395		/**
13396		 * **Get** the associated controller.
13397		 * @method ScrollMagic.Scene#controller
13398		 * @example
13399		 * // get the controller of a scene
13400		 * var controller = scene.controller();
13401		 *
13402		 * @returns {ScrollMagic.Controller} Parent controller or `undefined`
13403		 */
13404		this.controller = function () {
13405			return _controller;
13406		};
13407
13408		/**
13409		 * **Get** the current state.
13410		 * @method ScrollMagic.Scene#state
13411		 * @example
13412		 * // get the current state
13413		 * var state = scene.state();
13414		 *
13415		 * @returns {string} `"BEFORE"`, `"DURING"` or `"AFTER"`
13416		 */
13417		this.state = function () {
13418			return _state;
13419		};
13420
13421		/**
13422		 * **Get** the current scroll offset for the start of the scene.
13423		 * Mind, that the scrollOffset is related to the size of the container, if `triggerHook` is bigger than `0` (or `"onLeave"`).
13424		 * This means, that resizing the container or changing the `triggerHook` will influence the scene's start offset.
13425		 * @method ScrollMagic.Scene#scrollOffset
13426		 * @example
13427		 * // get the current scroll offset for the start and end of the scene.
13428		 * var start = scene.scrollOffset();
13429		 * var end = scene.scrollOffset() + scene.duration();
13430		 * console.log("the scene starts at", start, "and ends at", end);
13431		 *
13432		 * @returns {number} The scroll offset (of the container) at which the scene will trigger. Y value for vertical and X value for horizontal scrolls.
13433		 */
13434		this.scrollOffset = function () {
13435			return _scrollOffset.start;
13436		};
13437
13438		/**
13439		 * **Get** the trigger position of the scene (including the value of the `offset` option).
13440		 * @method ScrollMagic.Scene#triggerPosition
13441		 * @example
13442		 * // get the scene's trigger position
13443		 * var triggerPosition = scene.triggerPosition();
13444		 *
13445		 * @returns {number} Start position of the scene. Top position value for vertical and left position value for horizontal scrolls.
13446		 */
13447		this.triggerPosition = function () {
13448			var pos = _options.offset; // the offset is the basis
13449			if (_controller) {
13450				// get the trigger position
13451				if (_options.triggerElement) {
13452					// Element as trigger
13453					pos += _triggerPos;
13454				} else {
13455					// return the height of the triggerHook to start at the beginning
13456					pos += _controller.info("size") * Scene.triggerHook();
13457				}
13458			}
13459			return pos;
13460		};
13461
13462
13463		var
13464			_pin,
13465			_pinOptions;
13466
13467		Scene
13468			.on("shift.internal", function (e) {
13469				var durationChanged = e.reason === "duration";
13470				if ((_state === SCENE_STATE_AFTER && durationChanged) || (_state === SCENE_STATE_DURING && _options.duration === 0)) {
13471					// if [duration changed after a scene (inside scene progress updates pin position)] or [duration is 0, we are in pin phase and some other value changed].
13472					updatePinState();
13473				}
13474				if (durationChanged) {
13475					updatePinDimensions();
13476				}
13477			})
13478			.on("progress.internal", function (e) {
13479				updatePinState();
13480			})
13481			.on("add.internal", function (e) {
13482				updatePinDimensions();
13483			})
13484			.on("destroy.internal", function (e) {
13485				Scene.removePin(e.reset);
13486			});
13487		/**
13488		 * Update the pin state.
13489		 * @private
13490		 */
13491		var updatePinState = function (forceUnpin) {
13492			if (_pin && _controller) {
13493				var
13494					containerInfo = _controller.info(),
13495					pinTarget = _pinOptions.spacer.firstChild; // may be pin element or another spacer, if cascading pins
13496
13497				if (!forceUnpin && _state === SCENE_STATE_DURING) { // during scene or if duration is 0 and we are past the trigger
13498					// pinned state
13499					if (_util.css(pinTarget, "position") != "fixed") {
13500						// change state before updating pin spacer (position changes due to fixed collapsing might occur.)
13501						_util.css(pinTarget, {
13502							"position": "fixed"
13503						});
13504						// update pin spacer
13505						updatePinDimensions();
13506					}
13507
13508					var
13509						fixedPos = _util.get.offset(_pinOptions.spacer, true), // get viewport position of spacer
13510						scrollDistance = _options.reverse || _options.duration === 0 ?
13511						containerInfo.scrollPos - _scrollOffset.start // quicker
13512						:
13513						Math.round(_progress * _options.duration * 10) / 10; // if no reverse and during pin the position needs to be recalculated using the progress
13514
13515					// add scrollDistance
13516					fixedPos[containerInfo.vertical ? "top" : "left"] += scrollDistance;
13517
13518					// set new values
13519					_util.css(_pinOptions.spacer.firstChild, {
13520						top: fixedPos.top,
13521						left: fixedPos.left
13522					});
13523				} else {
13524					// unpinned state
13525					var
13526						newCSS = {
13527							position: _pinOptions.inFlow ? "relative" : "absolute",
13528							top: 0,
13529							left: 0
13530						},
13531						change = _util.css(pinTarget, "position") != newCSS.position;
13532
13533					if (!_pinOptions.pushFollowers) {
13534						newCSS[containerInfo.vertical ? "top" : "left"] = _options.duration * _progress;
13535					} else if (_options.duration > 0) { // only concerns scenes with duration
13536						if (_state === SCENE_STATE_AFTER && parseFloat(_util.css(_pinOptions.spacer, "padding-top")) === 0) {
13537							change = true; // if in after state but havent updated spacer yet (jumped past pin)
13538						} else if (_state === SCENE_STATE_BEFORE && parseFloat(_util.css(_pinOptions.spacer, "padding-bottom")) === 0) { // before
13539							change = true; // jumped past fixed state upward direction
13540						}
13541					}
13542					// set new values
13543					_util.css(pinTarget, newCSS);
13544					if (change) {
13545						// update pin spacer if state changed
13546						updatePinDimensions();
13547					}
13548				}
13549			}
13550		};
13551
13552		/**
13553		 * Update the pin spacer and/or element size.
13554		 * The size of the spacer needs to be updated whenever the duration of the scene changes, if it is to push down following elements.
13555		 * @private
13556		 */
13557		var updatePinDimensions = function () {
13558			if (_pin && _controller && _pinOptions.inFlow) { // no spacerresize, if original position is absolute
13559				var
13560					after = (_state === SCENE_STATE_AFTER),
13561					before = (_state === SCENE_STATE_BEFORE),
13562					during = (_state === SCENE_STATE_DURING),
13563					vertical = _controller.info("vertical"),
13564					pinTarget = _pinOptions.spacer.firstChild, // usually the pined element but can also be another spacer (cascaded pins)
13565					marginCollapse = _util.isMarginCollapseType(_util.css(_pinOptions.spacer, "display")),
13566					css = {};
13567
13568				// set new size
13569				// if relsize: spacer -> pin | else: pin -> spacer
13570				if (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) {
13571					if (during) {
13572						_util.css(_pin, {
13573							"width": _util.get.width(_pinOptions.spacer)
13574						});
13575					} else {
13576						_util.css(_pin, {
13577							"width": "100%"
13578						});
13579					}
13580				} else {
13581					// minwidth is needed for cascaded pins.
13582					css["min-width"] = _util.get.width(vertical ? _pin : pinTarget, true, true);
13583					css.width = during ? css["min-width"] : "auto";
13584				}
13585				if (_pinOptions.relSize.height) {
13586					if (during) {
13587						// the only padding the spacer should ever include is the duration (if pushFollowers = true), so we need to substract that.
13588						_util.css(_pin, {
13589							"height": _util.get.height(_pinOptions.spacer) - (_pinOptions.pushFollowers ? _options.duration : 0)
13590						});
13591					} else {
13592						_util.css(_pin, {
13593							"height": "100%"
13594						});
13595					}
13596				} else {
13597					// margin is only included if it's a cascaded pin to resolve an IE9 bug
13598					css["min-height"] = _util.get.height(vertical ? pinTarget : _pin, true, !marginCollapse); // needed for cascading pins
13599					css.height = during ? css["min-height"] : "auto";
13600				}
13601
13602				// add space for duration if pushFollowers is true
13603				if (_pinOptions.pushFollowers) {
13604					css["padding" + (vertical ? "Top" : "Left")] = _options.duration * _progress;
13605					css["padding" + (vertical ? "Bottom" : "Right")] = _options.duration * (1 - _progress);
13606				}
13607				_util.css(_pinOptions.spacer, css);
13608			}
13609		};
13610
13611		/**
13612		 * Updates the Pin state (in certain scenarios)
13613		 * If the controller container is not the document and we are mid-pin-phase scrolling or resizing the main document can result to wrong pin positions.
13614		 * So this function is called on resize and scroll of the document.
13615		 * @private
13616		 */
13617		var updatePinInContainer = function () {
13618			if (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info("isDocument")) {
13619				updatePinState();
13620			}
13621		};
13622
13623		/**
13624		 * Updates the Pin spacer size state (in certain scenarios)
13625		 * If container is resized during pin and relatively sized the size of the pin might need to be updated...
13626		 * So this function is called on resize of the container.
13627		 * @private
13628		 */
13629		var updateRelativePinSpacer = function () {
13630			if (_controller && _pin && // well, duh
13631				_state === SCENE_STATE_DURING && // element in pinned state?
13632				( // is width or height relatively sized, but not in relation to body? then we need to recalc.
13633					((_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) && _util.get.width(window) != _util.get.width(_pinOptions.spacer.parentNode)) ||
13634					(_pinOptions.relSize.height && _util.get.height(window) != _util.get.height(_pinOptions.spacer.parentNode))
13635				)
13636			) {
13637				updatePinDimensions();
13638			}
13639		};
13640
13641		/**
13642		 * Is called, when the mousewhel is used while over a pinned element inside a div container.
13643		 * If the scene is in fixed state scroll events would be counted towards the body. This forwards the event to the scroll container.
13644		 * @private
13645		 */
13646		var onMousewheelOverPin = function (e) {
13647			if (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info("isDocument")) { // in pin 
13647state
13648				e.preventDefault();
13649				_controller._setScrollPos(_controller.info("scrollPos") - ((e.wheelDelta || e[_controller.info("vertical") ? "wheelDeltaY" : "wheelDeltaX"]) / 3 || -e.detail * 30));
13650			}
13651		};
13652
13653		/**
13654		 * Pin an element for the duration of the scene.
13655		 * If the scene duration is 0 the element will only be unpinned, if the user scrolls back past the start position.
13656		 * Make sure only one pin is applied to an element at the same time.
13657		 * An element can be pinned multiple times, but only successively.
13658		 * _**NOTE:** The option `pushFollowers` has no effect, when the scene duration is 0._
13659		 * @method ScrollMagic.Scene#setPin
13660		 * @example
13661		 * // pin element and push all following elements down by the amount of the pin duration.
13662		 * scene.setPin("#pin");
13663		 *
13664		 * // pin element and keeping all following elements in their place. The pinned element will move past them.
13665		 * scene.setPin("#pin", {pushFollowers: false});
13666		 *
13667		 * @param {(string|object)} element - A Selector targeting an element or a DOM object that is supposed to be pinned.
13668		 * @param {object} [settings] - settings for the pin
13669		 * @param {boolean} [settings.pushFollowers=true] - If `true` following elements will be "pushed" down for the duration of the pin, if `false` the pinned element will just scroll past them.
13670		 												   Ignored, when duration is `0`.
13671		 * @param {string} [settings.spacerClass="scrollmagic-pin-spacer"] - Classname of the pin spacer element, which is used to replace the element.
13672		 *
13673		 * @returns {Scene} Parent object for chaining.
13674		 */
13675		this.setPin = function (element, settings) {
13676			var
13677				defaultSettings = {
13678					pushFollowers: true,
13679					spacerClass: "scrollmagic-pin-spacer"
13680				};
13681			var pushFollowersActivelySet = settings && settings.hasOwnProperty('pushFollowers');
13682			settings = _util.extend({}, defaultSettings, settings);
13683
13684			// validate Element
13685			element = _util.get.elements(element)[0];
13686			if (!element) {
13687				log(1, "ERROR calling method 'setPin()': Invalid pin element supplied.");
13688				return Scene; // cancel
13689			} else if (_util.css(element, "position") === "fixed") {
13690				log(1, "ERROR calling method 'setPin()': Pin does not work with elements that are positioned 'fixed'.");
13691				return Scene; // cancel
13692			}
13693
13694			if (_pin) { // preexisting pin?
13695				if (_pin === element) {
13696					// same pin we already have -> do nothing
13697					return Scene; // cancel
13698				} else {
13699					// kill old pin
13700					Scene.removePin();
13701				}
13702
13703			}
13704			_pin = element;
13705
13706			var
13707				parentDisplay = _pin.parentNode.style.display,
13708				boundsParams = ["top", "left", "bottom", "right", "margin", "marginLeft", "marginRight", "marginTop", "marginBottom"];
13709
13710			_pin.parentNode.style.display = 'none'; // hack start to force css to return stylesheet values instead of calculated px values.
13711			var
13712				inFlow = _util.css(_pin, "position") != "absolute",
13713				pinCSS = _util.css(_pin, boundsParams.concat(["display"])),
13714				sizeCSS = _util.css(_pin, ["width", "height"]);
13715			_pin.parentNode.style.display = parentDisplay; // hack end.
13716
13717			if (!inFlow && settings.pushFollowers) {
13718				log(2, "WARNING: If the pinned element is positioned absolutely pushFollowers will be disabled.");
13719				settings.pushFollowers = false;
13720			}
13721			window.setTimeout(function () { // wait until all finished, because with responsive duration it will only be set after scene is added to controller
13722				if (_pin && _options.duration === 0 && pushFollowersActivelySet && settings.pushFollowers) {
13723					log(2, "WARNING: pushFollowers =", true, "has no effect, when scene duration is 0.");
13724				}
13725			}, 0);
13726
13727			// create spacer and insert
13728			var
13729				spacer = _pin.parentNode.insertBefore(document.createElement('div'), _pin),
13730				spacerCSS = _util.extend(pinCSS, {
13731					position: inFlow ? "relative" : "absolute",
13732					boxSizing: "content-box",
13733					mozBoxSizing: "content-box",
13734					webkitBoxSizing: "content-box"
13735				});
13736
13737			if (!inFlow) { // copy size if positioned absolutely, to work for bottom/right positioned elements.
13738				_util.extend(spacerCSS, _util.css(_pin, ["width", "height"]));
13739			}
13740
13741			_util.css(spacer, spacerCSS);
13742			spacer.setAttribute(PIN_SPACER_ATTRIBUTE, "");
13743			_util.addClass(spacer, settings.spacerClass);
13744
13745			// set the pin Options
13746			_pinOptions = {
13747				spacer: spacer,
13748				relSize: { // save if size is defined using % values. if so, handle spacer resize differently...
13749					width: sizeCSS.width.slice(-1) === "%",
13750					height: sizeCSS.height.slice(-1) === "%",
13751					autoFullWidth: sizeCSS.width === "auto" && inFlow && _util.isMarginCollapseType(pinCSS.display)
13752				},
13753				pushFollowers: settings.pushFollowers,
13754				inFlow: inFlow, // stores if the element takes up space in the document flow
13755			};
13756
13757			if (!_pin.___origStyle) {
13758				_pin.___origStyle = {};
13759				var
13760					pinInlineCSS = _pin.style,
13761					copyStyles = boundsParams.concat(["width", "height", "position", "boxSizing", "mozBoxSizing", "webkitBoxSizing"]);
13762				copyStyles.forEach(function (val) {
13763					_pin.___origStyle[val] = pinInlineCSS[val] || "";
13764				});
13765			}
13766
13767			// if relative size, transfer it to spacer and make pin calculate it...
13768			if (_pinOptions.relSize.width) {
13769				_util.css(spacer, {
13770					width: sizeCSS.width
13771				});
13772			}
13773			if (_pinOptions.relSize.height) {
13774				_util.css(spacer, {
13775					height: sizeCSS.height
13776				});
13777			}
13778
13779			// now place the pin element inside the spacer
13780			spacer.appendChild(_pin);
13781			// and set new css
13782			_util.css(_pin, {
13783				position: inFlow ? "relative" : "absolute",
13784				margin: "auto",
13785				top: "auto",
13786				left: "auto",
13787				bottom: "auto",
13788				right: "auto"
13789			});
13790
13791			if (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) {
13792				_util.css(_pin, {
13793					boxSizing: "border-box",
13794					mozBoxSizing: "border-box",
13795					webkitBoxSizing: "border-box"
13796				});
13797			}
13798
13799			// add listener to document to update pin position in case controller is not the document.
13800			window.addEventListener('scroll', updatePinInContainer);
13801			window.addEventListener('resize', updatePinInContainer);
13802			window.addEventListener('resize', updateRelativePinSpacer);
13803			// add mousewheel listener to catch scrolls over fixed elements
13804			_pin.addEventListener("mousewheel", onMousewheelOverPin);
13805			_pin.addEventListener("DOMMouseScroll", onMousewheelOverPin);
13806
13807			log(3, "added pin");
13808
13809			// finally update the pin to init
13810			updatePinState();
13811
13812			return Scene;
13813		};
13814
13815		/**
13816		 * Remove the pin from the scene.
13817		 * @method ScrollMagic.Scene#removePin
13818		 * @example
13819		 * // remove the pin from the scene without resetting it (the spacer is not removed)
13820		 * scene.removePin();
13821		 *
13822		 * // remove the pin from the scene and reset the pin element to its initial position (spacer is removed)
13823		 * scene.removePin(true);
13824		 *
13825		 * @param {boolean} [reset=false] - If `false` the spacer will not be removed and the element's position will not be reset.
13826		 * @returns {Scene} Parent object for chaining.
13827		 */
13828		this.removePin = function (reset) {
13829			if (_pin) {
13830				if (_state === SCENE_STATE_DURING) {
13831					updatePinState(true); // force unpin at position
13832				}
13833				if (reset || !_controller) { // if there's no controller no progress was made anyway...
13834					var pinTarget = _pinOptions.spacer.firstChild; // usually the pin element, but may be another spacer (cascaded pins)...
13835					if (pinTarget.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // copy margins to child spacer
13836						var
13837							style = _pinOptions.spacer.style,
13838							values = ["margin", "marginLeft", "marginRight", "marginTop", "marginBottom"],
13839							margins = {};
13840						values.forEach(function (val) {
13841							margins[val] = style[val] || "";
13842						});
13843						_util.css(pinTarget, margins);
13844					}
13845					_pinOptions.spacer.parentNode.insertBefore(pinTarget, _pinOptions.spacer);
13846					_pinOptions.spacer.parentNode.removeChild(_pinOptions.spacer);
13847					if (!_pin.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // if it's the last pin for this element -> restore inline styles
13848						// TODO: only correctly set for first pin (when cascading) - how to fix?
13849						_util.css(_pin, _pin.___origStyle);
13850						delete _pin.___origStyle;
13851					}
13852				}
13853				window.removeEventListener('scroll', updatePinInContainer);
13854				window.removeEventListener('resize', updatePinInContainer);
13855				window.removeEventListener('resize', updateRelativePinSpacer);
13856				_pin.removeEventListener("mousewheel", onMousewheelOverPin);
13857				_pin.removeEventListener("DOMMouseScroll", onMousewheelOverPin);
13858				_pin = undefined;
13859				log(3, "removed pin (reset: " + (reset ? "true" : "false") + ")");
13860			}
13861			return Scene;
13862		};
13863
13864
13865		var
13866			_cssClasses,
13867			_cssClassElems = [];
13868
13869		Scene
13870			.on("destroy.internal", function (e) {
13871				Scene.removeClassToggle(e.reset);
13872			});
13873		/**
13874		 * Define a css class modification while the scene is active.
13875		 * When the scene triggers the classes will be added to the supplied element and removed, when the scene is over.
13876		 * If the scene duration is 0 the classes will only be removed if the user scrolls back past the start position.
13877		 * @method ScrollMagic.Scene#setClassToggle
13878		 * @example
13879		 * // add the class 'myclass' to the element with the id 'my-elem' for the duration of the scene
13880		 * scene.setClassToggle("#my-elem", "myclass");
13881		 *
13882		 * // add multiple classes to multiple elements defined by the selector '.classChange'
13883		 * scene.setClassToggle(".classChange", "class1 class2 class3");
13884		 *
13885		 * @param {(string|object)} element - A Selector targeting one or more elements or a DOM object that is supposed to be modified.
13886		 * @param {string} classes - One or more Classnames (separated by space) that should be added to the element during the scene.
13887		 *
13888		 * @returns {Scene} Parent object for chaining.
13889		 */
13890		this.setClassToggle = function (element, classes) {
13891			var elems = _util.get.elements(element);
13892			if (elems.length === 0 || !_util.type.String(classes)) {
13893				log(1, "ERROR calling method 'setClassToggle()': Invalid " + (elems.length === 0 ? "element" : "classes") + " supplied.");
13894				return Scene;
13895			}
13896			if (_cssClassElems.length > 0) {
13897				// remove old ones
13898				Scene.removeClassToggle();
13899			}
13900			_cssClasses = classes;
13901			_cssClassElems = elems;
13902			Scene.on("enter.internal_class leave.internal_class", function (e) {
13903				var toggle = e.type === "enter" ? _util.addClass : _util.removeClass;
13904				_cssClassElems.forEach(function (elem, key) {
13905					toggle(elem, _cssClasses);
13906				});
13907			});
13908			return Scene;
13909		};
13910
13911		/**
13912		 * Remove the class binding from the scene.
13913		 * @method ScrollMagic.Scene#removeClassToggle
13914		 * @example
13915		 * // remove class binding from the scene without reset
13916		 * scene.removeClassToggle();
13917		 *
13918		 * // remove class binding and remove the changes it caused
13919		 * scene.removeClassToggle(true);
13920		 *
13921		 * @param {boolean} [reset=false] - If `false` and the classes are currently active, they will remain on the element. If `true` they will be removed.
13922		 * @returns {Scene} Parent object for chaining.
13923		 */
13924		this.removeClassToggle = function (reset) {
13925			if (reset) {
13926				_cssClassElems.forEach(function (elem, key) {
13927					_util.removeClass(elem, _cssClasses);
13928				});
13929			}
13930			Scene.off("start.internal_class end.internal_class");
13931			_cssClasses = undefined;
13932			_cssClassElems = [];
13933			return Scene;
13934		};
13935
13936		// INIT
13937		construct();
13938		return Scene;
13939	};
13940
13941	// store pagewide scene options
13942	var SCENE_OPTIONS = {
13943		defaults: {
13944			duration: 0,
13945			offset: 0,
13946			triggerElement: undefined,
13947			triggerHook: 0.5,
13948			reverse: true,
13949			loglevel: 2
13950		},
13951		validate: {
13952			offset: function (val) {
13953				val = parseFloat(val);
13954				if (!_util.type.Number(val)) {
13955					throw ["Invalid value for option \"offset\":", val];
13956				}
13957				return val;
13958			},
13959			triggerElement: function (val) {
13960				val = val || undefined;
13961				if (val) {
13962					var elem = _util.get.elements(val)[0];
13963					if (elem && elem.parentNode) {
13964						val = elem;
13965					} else {
13966						throw ["Element defined in option \"triggerElement\" was not found:", val];
13967					}
13968				}
13969				return val;
13970			},
13971			triggerHook: function (val) {
13972				var translate = {
13973					"onCenter": 0.5,
13974					"onEnter": 1,
13975					"onLeave": 0
13976				};
13977				if (_util.type.Number(val)) {
13978					val = Math.max(0, Math.min(parseFloat(val), 1)); //  make sure its betweeen 0 and 1
13979				} else if (val in translate) {
13980					val = translate[val];
13981				} else {
13982					throw ["Invalid value for option \"triggerHook\": ", val];
13983				}
13984				return val;
13985			},
13986			reverse: function (val) {
13987				return !!val; // force boolean
13988			},
13989			loglevel: function (val) {
13990				val = parseInt(val);
13991				if (!_util.type.Number(val) || val < 0 || val > 3) {
13992					throw ["Invalid value for option \"loglevel\":", val];
13993				}
13994				return val;
13995			}
13996		}, // holder for  validation methods. duration validation is handled in 'getters-setters.js'
13997		shifts: ["duration", "offset", "triggerHook"], // list of options that trigger a `shift` event
13998	};
13999	/*
14000	 * method used to add an option to ScrollMagic Scenes.
14001	 * TODO: DOC (private for dev)
14002	 */
14003	ScrollMagic.Scene.addOption = function (name, defaultValue, validationCallback, shifts) {
14004		if (!(name in SCENE_OPTIONS.defaults)) {
14005			SCENE_OPTIONS.defaults[name] = defaultValue;
14006			SCENE_OPTIONS.validate[name] = validationCallback;
14007			if (shifts) {
14008				SCENE_OPTIONS.shifts.push(name);
14009			}
14010		} else {
14011			ScrollMagic._util.log(1, "[static] ScrollMagic.Scene -> Cannot add Scene option '" + name + "', because it already exists.");
14012		}
14013	};
14014	// instance extension function for plugins
14015	// TODO: DOC (private for dev)
14016	ScrollMagic.Scene.extend = function (extension) {
14017		var oldClass = this;
14018		ScrollMagic.Scene = function () {
14019			oldClass.apply(this, arguments);
14020			this.$super = _util.extend({}, this); // copy parent state
14021			return extension.apply(this, arguments) || this;
14022		};
14023		_util.extend(ScrollMagic.Scene, oldClass); // copy properties
14024		ScrollMagic.Scene.prototype = oldClass.prototype; // copy prototype
14025		ScrollMagic.Scene.prototype.constructor = ScrollMagic.Scene; // restore constructor
14026	};
14027
14028
14029
14030	/**
14031	 * TODO: DOCS (private for dev)
14032	 * @class
14033	 * @private
14034	 */
14035
14036	ScrollMagic.Event = function (type, namespace, target, vars) {
14037		vars = vars || {};
14038		for (var key in vars) {
14039			this[key] = vars[key];
14040		}
14041		this.type = type;
14042		this.target = this.currentTarget = target;
14043		this.namespace = namespace || '';
14044		this.timeStamp = this.timestamp = Date.now();
14045		return this;
14046	};
14047
14048	/*
14049	 * TODO: DOCS (private for dev)
14050	 */
14051
14052	var _util = ScrollMagic._util = (function (window) {
14053		var U = {},
14054			i;
14055
14056		/**
14057		 * ------------------------------
14058		 * internal helpers
14059		 * ------------------------------
14060		 */
14061
14062		// parse float and fall back to 0.
14063		var floatval = function (number) {
14064			return parseFloat(number) || 0;
14065		};
14066		// get current style IE safe (otherwise IE would return calculated values for 'auto')
14067		var _getComputedStyle = function (elem) {
14068			return elem.currentStyle ? elem.currentStyle : window.getComputedStyle(elem);
14069		};
14070
14071		// get element dimension (width or height)
14072		var _dimension = function (which, elem, outer, includeMargin) {
14073			elem = (elem === document) ? window : elem;
14074			if (elem === window) {
14075				includeMargin = false;
14076			} else if (!_type.DomElement(elem)) {
14077				return 0;
14078			}
14079			which = which.charAt(0).toUpperCase() + which.substr(1).toLowerCase();
14080			var dimension = (outer ? elem['offset' + which] || elem['outer' + which] : elem['client' + which] || elem['inner' + which]) || 0;
14081			if (outer && includeMargin) {
14082				var style = _getComputedStyle(elem);
14083				dimension += which === 'Height' ? floatval(style.marginTop) + floatval(style.marginBottom) : floatval(style.marginLeft) + floatval(style.marginRight);
14084			}
14085			return dimension;
14086		};
14087		// converts 'margin-top' into 'marginTop'
14088		var _camelCase = function (str) {
14089			return str.replace(/^[^a-z]+([a-z])/g, '$1').replace(/-([a-z])/g, function (g) {
14090				return g[1].toUpperCase();
14091			});
14092		};
14093
14094		/**
14095		 * ------------------------------
14096		 * external helpers
14097		 * ------------------------------
14098		 */
14099
14100		// extend obj – same as jQuery.extend({}, objA, objB)
14101		U.extend = function (obj) {
14102			obj = obj || {};
14103			for (i = 1; i < arguments.length; i++) {
14104				if (!arguments[i]) {
14105					continue;
14106				}
14107				for (var key in arguments[i]) {
14108					if (arguments[i].hasOwnProperty(key)) {
14109						obj[key] = arguments[i][key];
14110					}
14111				}
14112			}
14113			return obj;
14114		};
14115
14116		// check if a css display type results in margin-collapse or not
14117		U.isMarginCollapseType = function (str) {
14118			return ["block", "flex", "list-item", "table", "-webkit-box"].indexOf(str) > -1;
14119		};
14120
14121		// implementation of requestAnimationFrame
14122		// based on https://gist.github.com/paulirish/1579671
14123		var
14124			lastTime = 0,
14125			vendors = ['ms', 'moz', 'webkit', 'o'];
14126		var _requestAnimationFrame = window.requestAnimationFrame;
14127		var _cancelAnimationFrame = window.cancelAnimationFrame;
14128		// try vendor prefixes if the above doesn't work
14129		for (i = 0; !_requestAnimationFrame && i < vendors.length; ++i) {
14130			_requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame'];
14131			_cancelAnimationFrame = window[vendors[i] + 'CancelAnimationFrame'] || window[vendors[i] + 'CancelRequestAnimationFrame'];
14132		}
14133
14134		// fallbacks
14135		if (!_requestAnimationFrame) {
14136			_requestAnimationFrame = function (callback) {
14137				var
14138					currTime = new Date().getTime(),
14139					timeToCall = Math.max(0, 16 - (currTime - lastTime)),
14140					id = window.setTimeout(function () {
14141						callback(currTime + timeToCall);
14142					}, timeToCall);
14143				lastTime = currTime + timeToCall;
14144				return id;
14145			};
14146		}
14147		if (!_cancelAnimationFrame) {
14148			_cancelAnimationFrame = function (id) {
14149				window.clearTimeout(id);
14150			};
14151		}
14152		U.rAF = _requestAnimationFrame.bind(window);
14153		U.cAF = _cancelAnimationFrame.bind(window);
14154
14155		var
14156			loglevels = ["error", "warn", "log"],
14157			console = window.console || {};
14158
14159		console.log = console.log || function () {}; // no console log, well - do nothing then...
14160		// make sure methods for all levels exist.
14161		for (i = 0; i < loglevels.length; i++) {
14162			var method = loglevels[i];
14163			if (!console[method]) {
14164				console[method] = console.log; // prefer .log over nothing
14165			}
14166		}
14167		U.log = function (loglevel) {
14168			if (loglevel > loglevels.length || loglevel <= 0) loglevel = loglevels.length;
14169			var now = new Date(),
14170				time = ("0" + now.getHours()).slice(-2) + ":" + ("0" + now.getMinutes()).slice(-2) + ":" + ("0" + now.getSeconds()).slice(-2) + ":" + ("00" + now.getMilliseconds()).slice(-3),
14171				method = loglevels[loglevel - 1],
14172				args = Array.prototype.splice.call(arguments, 1),
14173				func = Function.prototype.bind.call(console[method], console);
14174			args.unshift(time);
14175			func.apply(console, args);
14176		};
14177
14178		/**
14179		 * ------------------------------
14180		 * type testing
14181		 * ------------------------------
14182		 */
14183
14184		var _type = U.type = function (v) {
14185			return Object.prototype.toString.call(v).replace(/^\[object (.+)\]$/, "$1").toLowerCase();
14186		};
14187		_type.String = function (v) {
14188			return _type(v) === 'string';
14189		};
14190		_type.Function = function (v) {
14191			return _type(v) === 'function';
14192		};
14193		_type.Array = function (v) {
14194			return Array.isArray(v);
14195		};
14196		_type.Number = function (v) {
14197			return !_type.Array(v) && (v - parseFloat(v) + 1) >= 0;
14198		};
14199		_type.DomElement = function (o) {
14200			return (
14201				typeof HTMLElement === "object" || typeof HTMLElement === "function" ? o instanceof HTMLElement || o instanceof SVGElement : //DOM2
14202				o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
14203			);
14204		};
14205
14206		/**
14207		 * ------------------------------
14208		 * DOM Element info
14209		 * ------------------------------
14210		 */
14211		// always returns a list of matching DOM elements, from a selector, a DOM element or an list of elements or even an array of selectors
14212		var _get = U.get = {};
14213		_get.elements = function (selector) {
14214			var arr = [];
14215			if (_type.String(selector)) {
14216				try {
14217					selector = document.querySelectorAll(selector);
14218				} catch (e) { // invalid selector
14219					return arr;
14220				}
14221			}
14222			if (_type(selector) === 'nodelist' || _type.Array(selector) || selector instanceof NodeList) {
14223				for (var i = 0, ref = arr.length = selector.length; i < ref; i++) { // list of elements
14224					var elem = selector[i];
14225					arr[i] = _type.DomElement(elem) ? elem : _get.elements(elem); // if not an element, try to resolve recursively
14226				}
14227			} else if (_type.DomElement(selector) || selector === document || selector === window) {
14228				arr = [selector]; // only the element
14229			}
14230			return arr;
14231		};
14232		// get scroll top value
14233		_get.scrollTop = function (elem) {
14234			return (elem && typeof elem.scrollTop === 'number') ? elem.scrollTop : window.pageYOffset || 0;
14235		};
14236		// get scroll left value
14237		_get.scrollLeft = function (elem) {
14238			return (elem && typeof elem.scrollLeft === 'number') ? elem.scrollLeft : window.pageXOffset || 0;
14239		};
14240		// get element height
14241		_get.width = function (elem, outer, includeMargin) {
14242			return _dimension('width', elem, outer, includeMargin);
14243		};
14244		// get element width
14245		_get.height = function (elem, outer, includeMargin) {
14246			return _dimension('height', elem, outer, includeMargin);
14247		};
14248
14249		// get element position (optionally relative to viewport)
14250		_get.offset = function (elem, relativeToViewport) {
14251			var offset = {
14252				top: 0,
14253				left: 0
14254			};
14255			if (elem && elem.getBoundingClientRect) { // check if available
14256				var rect = elem.getBoundingClientRect();
14257				offset.top = rect.top;
14258				offset.left = rect.left;
14259				if (!relativeToViewport) { // clientRect is by default relative to viewport...
14260					offset.top += _get.scrollTop();
14261					offset.left += _get.scrollLeft();
14262				}
14263			}
14264			return offset;
14265		};
14266
14267		/**
14268		 * ------------------------------
14269		 * DOM Element manipulation
14270		 * ------------------------------
14271		 */
14272
14273		U.addClass = function (elem, classname) {
14274			if (classname) {
14275				if (elem.classList)
14276					elem.classList.add(classname);
14277				else
14278					elem.className += ' ' + classname;
14279			}
14280		};
14281		U.removeClass = function (elem, classname) {
14282			if (classname) {
14283				if (elem.classList)
14284					elem.classList.remove(classname);
14285				else
14286					elem.className = elem.className.replace(new RegExp('(^|\\b)' + classname.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
14287			}
14288		};
14289		// if options is string -> returns css value
14290		// if options is array -> returns object with css value pairs
14291		// if options is object -> set new css values
14292		U.css = function (elem, options) {
14293			if (_type.String(options)) {
14294				return _getComputedStyle(elem)[_camelCase(options)];
14295			} else if (_type.Array(options)) {
14296				var
14297					obj = {},
14298					style = _getComputedStyle(elem);
14299				options.forEach(function (option, key) {
14300					obj[option] = style[_camelCase(option)];
14301				});
14302				return obj;
14303			} else {
14304				for (var option in options) {
14305					var val = options[option];
14306					if (val == parseFloat(val)) { // assume pixel for seemingly numerical values
14307						val += 'px';
14308					}
14309					elem.style[_camelCase(option)] = val;
14310				}
14311			}
14312		};
14313
14314		return U;
14315	}(window || {}));
14316
14317
14318	ScrollMagic.Scene.prototype.addIndicators = function () {
14319		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling addIndicators() due to missing Plugin \'debug.addIndicators\'. Please make sure to include plugins/debug.addIndicators.js');
14320		return this;
14321	};
14322	ScrollMagic.Scene.prototype.removeIndicators = function () {
14323		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeIndicators() due to missing Plugin \'debug.addIndicators\'. Please make sure to include plugins/debug.addIndicators.js');
14324		return this;
14325	};
14326	ScrollMagic.Scene.prototype.setTween = function () {
14327		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setTween() due to missing Plugin \'animation.gsap\'. Please make sure to include plugins/animation.gsap.js');
14328		return this;
14329	};
14330	ScrollMagic.Scene.prototype.removeTween = function () {
14331		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeTween() due to missing Plugin \'animation.gsap\'. Please make sure to include plugins/animation.gsap.js');
14332		return this;
14333	};
14334	ScrollMagic.Scene.prototype.setVelocity = function () {
14335		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setVelocity() due to missing Plugin \'animation.velocity\'. Please make sure to include plugins/animation.velocity.js');
14336		return this;
14337	};
14338	ScrollMagic.Scene.prototype.removeVelocity = function () {
14339		ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeVelocity() due to missing Plugin \'animation.velocity\'. Please make sure to include plugins/animation.velocity.js');
14340		return this;
14341	};
14342
14343	return ScrollMagic;
14344}));
14345;
14346/**
14347 * velocity-animate (C) 2014-2017 Julian Shapiro.
14348 *
14349 * Licensed under the MIT license. See LICENSE file in the project root for details.
14350 */
14351!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Velocity=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e};function i(e){return!0===e||!1===e}function o(e){return"[object Function]"===Object.prototype.toString.call(e)}function a(e){return!(!e||!e.nodeType)}function l(e){return"number"==typeof e}function s(t){if(!t||"object"!==(void 0===t?"undefined":e(t))||t.nodeType||"[object Object]"!==Object.prototype.toString.call(t))return!1;var n=Object.getPrototypeOf(t);return!n||n.hasOwnProperty("constructor")&&n.constructor===Object}function u(e){return"string"==typeof e}function c(e){return e&&l(e.length)&&o(e.velocity)}function f(e){return e&&e!==window&&l(e.length)&&!u(e)&&!o(e)&&!a(e)&&(0===e.length||a(e[0]))}function d(e){return Array.prototype.slice.call(e,0)}function v(e,t,n,r){e&&Object.defineProperty(e,t,{configurable:!r,writable:!r,value:n})}function p(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=!0,i=!1,o=void 0;try{for(var a,l=arguments[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var s=a.value;if(void 0!==s&&s==s)return s}}catch(e){i=!0,o=e}finally{try{!r&&l.return&&l.return()}finally{if(i)throw o}}}var y=Date.now?Date.now:function(){return(new Date).getTime()};function g(e,t){e instanceof Element&&(e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\s)"+t+"(\\s|$)","gi")," "))}var h={};function m(e,t){var n,r,i=e[0],a=e[1];u(i)?o(a)?h[i]&&(n=h,r=i,!Object.prototype.propertyIsEnumerable.call(n,r))?console.warn("VelocityJS: Trying to override internal 'registerAction' callback",i):!0===t?v(h,i,a):h[i]=a:console.warn("VelocityJS: Trying to set 'registerAction' callback to an invali
14351d value:",i,a):console.warn("VelocityJS: Trying to set 'registerAction' name to an invalid value:",i)}m(["registerAction",m],!0);var w=400,b={fast:200,normal:400,slow:600},S={};function x(e){var t=e[0],n=e[1];u(t)?o(n)?S[t]?console.warn("VelocityJS: Trying to override 'registerEasing' callback",t):S[t]=n:console.warn("VelocityJS: Trying to set 'registerEasing' callback to an invalid value:",t,n):console.warn("VelocityJS: Trying to set 'registerEasing' name to an invalid value:",t)}function k(e,t,n,r){return t+e*(n-t)}function O(e){return Math.min(Math.max(e,0),1)}function E(e,t){return 1-3*t+3*e}function _(e,t){return 3*t-6*e}function T(e){return 3*e}function M(e,t,n){return((E(t,n)*e+_(t,n))*e+T(t))*e}function V(e,t,n){return 3*E(t,n)*e*e+2*_(t,n)*e+T(t)}function q(e,t,n,r){var i=4,o=.001,a=1e-7,l=10,s=11,u=1/(s-1),c="Float32Array"in window;if(4===arguments.length){for(var f=0;f<4;++f)if("number"!=typeof arguments[f]||isNaN(arguments[f])||!isFinite(arguments[f]))return;e=O(e),n=O(n);var d=c?new Float32Array(s):new Array(s),v=!1,p="generateBezier("+[e,t,n,r]+")",y=function(i,o,a,l){return v||h(),0===i?o:1===i?a:e===t&&n===r?o+i*(a-o):o+M(g(i),t,r)*(a-o)};return y.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]},y.toString=function(){return p},y}function g(t){for(var r=s-1,c=0,f=1;f!==r&&d[f]<=t;++f)c+=u;var v=c+(t-d[--f])/(d[f+1]-d[f])*u,p=V(v,e,n);return p>=o?function(t,r){for(var o=0;o<i;++o){var a=V(r,e,n);if(0===a)return r;r-=(M(r,e,n)-t)/a}return r}(t,v):0===p?v:function(t,r,i){var o=void 0,s=void 0,u=0;do{(o=M(s=r+(i-r)/2,e,n)-t)>0?i=s:r=s}while(Math.abs(o)>a&&++u<l);return s}(t,c,c+u)}function h(){v=!0,e===t&&n===r||function(){for(var t=0;t<s;++t)d[t]=M(t*u,e,n)}()}}m(["registerEasing",x],!0),x(["linear",k]),x(["swing",function(e,t,n){return t+(.5-Math.cos(e*Math.PI)/2)*(n-t)}]),x(["spring",function(e,t,n){return t+(1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e))*(n-t)}]);var N=q(.42,0,1,1),A=q(0,0,.58,1),L=q(.42,0,.58,1);function J(e){return-e.tension*e.x-e.friction*e.v}function I(e,t,n){var r={x:e.x+n.dx*t,v:e.v+n.dv*t,tension:e.tension,friction:e.friction};return{dx:r.v,dv:J(r)}}function j(e,t){var n={dx:e.v,dv:J(e)},r=I(e,.5*t,n),i=I(e,.5*t,r),o=I(e,t,i),a=1/6*(n.dx+2*(r.dx+i.dx)+o.dx),l=1/6*(n.dv+2*(r.dv+i.dv)+o.dv);return e.x=e.x+a*t,e.v=e.v+l*t,e}x(["ease",q(.25,.1,.25,1)]),x(["easeIn",N]),x(["ease-in",N]),x(["easeOut",A]),x(["ease-out",A]),x(["easeInOut",L]),x(["ease-in-out",L]),x(["easeInSine",q(.47,0,.745,.715)]),x(["easeOutSine",q(.39,.575,.565,1)]),x(["easeInOutSine",q(.445,.05,.55,.95)]),x(["easeInQuad",q(.55,.085,.68,.53)]),x(["easeOutQuad",q(.25,.46,.45,.94)]),x(["easeInOutQuad",q(.455,.03,.515,.955)]),x(["easeInCubic",q(.55,.055,.675,.19)]),x(["easeOutCubic",q(.215,.61,.355,1)]),x(["easeInOutCubic",q(.645,.045,.355,1)]),x(["easeInQuart",q(.895,.03,.685,.22)]),x(["easeOutQuart",q(.165,.84,.44,1)]),x(["easeInOutQuart",q(.77,0,.175,1)]),x(["easeInQuint",q(.755,.05,.855,.06)]),x(["easeOutQuint",q(.23,1,.32,1)]),x(["easeInOutQuint",q(.86,0,.07,1)]),x(["easeInExpo",q(.95,.05,.795,.035)]),x(["easeOutExpo",q(.19,1,.22,1)]),x(["easeInOutExpo",q(1,0,0,1)]),x(["easeInCirc",q(.6,.04,.98,.335)]),x(["easeOutCirc",q(.075,.82,.165,1)]),x(["easeInOutCirc",q(.785,.135,.15,.86)]);var C={};function P(e,t){return l(e)?e:u(e)?b[e.toLowerCase()]||parseFloat(e.replace("ms","").replace("s","000")):null==t?void 0:P(t)}function z(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'cache' to an invalid value:",e)}function F(e){if(o(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'begin' to an invalid value:",e)}function H(e,t){if(o(e))return e;null==e||t||console.warn("VelocityJS: Trying to set 'complete' to an invalid value:",e)}function R(e){var t=P(e);if(!isNaN(t))return t;null!=e&&console.error("VelocityJS: Trying to set 'delay' to an invalid value:",e)}function B(e,t){var n=P(e);if(!isNaN(n)&&n>=0)return n;null==e||t||console.error("VelocityJS: Trying to set 'duration' to an invalid value:",e)}function W(e,t,n){if(u(e))return S[e];if(o(e))return e;if(Array.isArray(e)){if(1===e.length)return r=e[0],C[r]||(C[r]=function(e,t,n){return 0===e?t:1===e?n:t+Math.round(e*r)*(1/r)*(n-t)});if(2===e.length)return function e(t,n,r){var i={x:-1,v:0,tension:parseFloat(t)||500,friction:parseFloat(n)||20},o=[0],a=null!=r,l=0,s=void 0,u=void 0;for(s=a?(l=e(i.tension,i.friction))/r*.016:.016;u=j(u||i,s),o.push(1+u.x),l+=16,Math.abs(u.x)>1e-4&&Math.abs(u.v)>1e-4;);return a?function(e,t,n){return 0===e?t:1===e?n:t+o[Math.floor(e*(o.length-1))]*(n-t)}:l}(e[0],e[1],t);
14351if(4===e.length)return q.apply(null,e)||!1}var r;null==e||n||console.error("VelocityJS: Trying to set 'easing' to an invalid value:",e)}function $(e){if(!1===e)return 0;var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,60);null!=e&&console.warn("VelocityJS: Trying to set 'fpsLimit' to an invalid value:",e)}function G(e){switch(e){case!1:return 0;case!0:return!0;default:var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return t}null!=e&&console.warn("VelocityJS: Trying to set 'loop' to an invalid value:",e)}function Q(e,t){if(!1===e||u(e))return e;null==e||t||console.warn("VelocityJS: Trying to set 'queue' to an invalid value:",e)}function D(e){switch(e){case!1:return 0;case!0:return!0;default:var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return t}null!=e&&console.warn("VelocityJS: Trying to set 'repeat' to an invalid value:",e)}function U(e){if(l(e))return e;null!=e&&console.error("VelocityJS: Trying to set 'speed' to an invalid value:",e)}function Z(e){if(i(e))return e;null!=e&&console.error("VelocityJS: Trying to set 'sync' to an invalid value:",e)}var Y=void 0,X=void 0,K=void 0,ee=void 0,te=void 0,ne=void 0,re=void 0,ie=void 0,oe=void 0,ae=void 0,le=void 0,se=void 0,ue=void 0,ce=void 0,fe=void 0,de=void 0,ve=function(){function e(){t(this,e)}return n(e,null,[{key:"reset",value:function(){Y=!0,X=void 0,K=void 0,ee=0,te=w,ne=W("swing",w),re=60,ie=0,ae=980/60,le=!0,se=!0,ue="",ce=0,fe=1,de=!0}},{key:"cache",get:function(){return Y},set:function(e){void 0!==(e=z(e))&&(Y=e)}},{key:"begin",get:function(){return X},set:function(e){void 0!==(e=F(e))&&(X=e)}},{key:"complete",get:function(){return K},set:function(e){void 0!==(e=H(e))&&(K=e)}},{key:"delay",get:function(){return ee},set:function(e){void 0!==(e=R(e))&&(ee=e)}},{key:"duration",get:function(){return te},set:function(e){void 0!==(e=B(e))&&(te=e)}},{key:"easing",get:function(){return ne},set:function(e){void 0!==(e=W(e,te))&&(ne=e)}},{key:"fpsLimit",get:function(){return re},set:function(e){void 0!==(e=$(e))&&(re=e,ae=980/e)}},{key:"loop",get:function(){return ie},set:function(e){void 0!==(e=G(e))&&(ie=e)}},{key:"mobileHA",get:function(){return oe},set:function(e){i(e)&&(oe=e)}},{key:"minFrameTime",get:function(){return ae}},{key:"promise",get:function(){return le},set:function(e){void 0!==(e=function(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'promise' to an invalid value:",e)}(e))&&(le=e)}},{key:"promiseRejectEmpty",get:function(){return se},set:function(e){void 0!==(e=function(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:",e)}(e))&&(se=e)}},{key:"queue",get:function(){return ue},set:function(e){void 0!==(e=Q(e))&&(ue=e)}},{key:"repeat",get:function(){return ce},set:function(e){void 0!==(e=D(e))&&(ce=e)}},{key:"repeatAgain",get:function(){return ce}},{key:"speed",get:function(){return fe},set:function(e){void 0!==(e=U(e))&&(fe=e)}},{key:"sync",get:function(){return de},set:function(e){void 0!==(e=Z(e))&&(de=e)}}]),e}();Object.freeze(ve),ve.reset();var pe=[],ye={},ge=new Set,he=[],me=new Map,we="velocityData";function be(e){var t=e[we];if(t)return t;for(var n=e.ownerDocument.defaultView,r=0,i=0;i<he.length;i++){var o=he[i];u(o)?e instanceof n[o]&&(r|=1<<i):e instanceof o&&(r|=1<<i)}var a={types:r,count:0,computedStyle:null,cache:{},queueList:{},lastAnimationList:{},lastFinishList:{},window:n};return Object.defineProperty(e,we,{value:a}),a}var Se=window&&window===window.window,xe=Se&&void 0!==window.pageYOffset,ke={isClient:Se,isMobile:Se&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isGingerbread:Se&&/Android 2\.3\.[3-7]/i.test(navigator.userAgent),prefixElement:Se&&document.createElement("div"),windowScrollAnchor:xe,scrollAnchor:xe?window:!Se||document.documentElement||document.body.parentNode||document.body,scrollPropertyLeft:xe?"pageXOffset":"scrollLeft",scrollPropertyTop:xe?"pageYOffset":"scrollTop",className:"velocity-animating",isTicking:!1,first:void 0,last:void 0,firstNew:void 0};function Oe(e){var t=ke.last;e._prev=t,e._next=void 0,t?t._next=e:ke.first=e,ke.last=e,ke.firstNew||(ke.firstNew=e);var n=e.element;be(n).count++||function(e,t){e instanceof Element&&(e.classList?e.classList.add(t):(g(e,t),e.className+=(e.className.length?" ":"")+t))}(n,ke.className)}function Ee(e,t,n){var r=be(e);if(!1!==n&&(r.lastAnimationList[n]=t),!1===n)Oe(t);else{u(n)||(n="");var i=r.queueList[n];if(i){for(;i._next;)i=i._next;i._next=t,t._prev=i}else null===i?r.queueList[n]=t:(r.queueList[n]=null,Oe(t))}}function _e(e){var t=e._next,n=e._prev,r=null==e.queue?e.options.queue:e.queue;(ke.firstNew===e&&(ke.firstNew=t),ke.first===e?ke.first=t:n&&(n._next=t),ke.last===e?ke.last=n:t&&(t._prev=n),r)&&(be(e.element)&&(e._next=e._prev=void 0))}var Te={};function Me(e){var t=e.options,n=p(e.queue,t.queue),r=p(e.loop,t.loop,ve.loop),i=p(e.repeat,t.repeat,ve.repeat),o=8&e._flags;if(o||!r&&!i){var a=e.element,l=be(a);if(--l.count||o||g(a,ke.className),t&&++t._completed===t._total){!o&&t.complete&&(!function(e){var t=e.complete||e.options.complete;if(t)try{var n=e.elements;t.call(n,n,e)}catch(e){setTimeout(function(){throw e},1)}}(e),t.complete=null);var s=t._resolver;s&&(s(e.elements),delete t._resolver)}!1!==n&&(o||(l.lastFinishList[n]=e.timeStart+p(e.duration,t.duration,ve.duration)),function(e,t,n){if(!1!==t){u(t)||(t="");var r=be(e),i=r.queueList[t];i?(r.queueList[t]=i._next||null,n||Oe(i)):null===i&&delete r.queueList[t]}}(a,n)),_e(e)}else i&&!0!==i?e.repeat=i-1:r&&!0!==r&&(e.loop=r-1,e.repeat=p(e.repeatAgain,t.repeatAgain,ve.repeatAgain)),r&&(e._flags^=64),!1!==n&&(be(e.element).lastFinishList[n]=e.timeStart+p(e.duration,t.duration,ve.duration)),e.timeStart=e.ellapsedTime=e.percentComplete=0,e._flags&=-5}function Ve(e){var t=e[0],n=e[1],r=e[2];if((!u(t)||window[t]instanceof Object)&&(u(t)||t instanceof Object))if(u(n))if(o(r)){var i=he.indexOf(t),a=3;if(i<0&&!u(t))if(me.has(t))i=he.indexOf(me.get(t));else for(var l in window)if(window[l]===t){(i=he.indexOf(l))<0&&(i=he.push(l)-1,pe[i]={},me.set(t,l));break}if(i<0&&(i=he.push(t)-1,pe[i]={}),pe[i][n]=r,u(e[a])){var s=e[a++],c=ye[s];c||(c=ye[s]=[]),c.push(r)}!1===e[a]&&ge.add(n)}else console.warn("VelocityJS: Trying to set 'registerNormalization' callback to an invali
14351d value:",n,r);else console.warn("VelocityJS: Trying to set 'registerNormalization' name to an invalid value:",n);else console.warn("VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:",t)}function qe(e){var t=e[0],n=e[1],r=he.indexOf(t);if(r<0&&!u(t))if(me.has(t))r=he.indexOf(me.get(t));else for(var i in window)if(window[i]===t){r=he.indexOf(i);break}return r>=0&&pe[r].hasOwnProperty(n)}function Ne(e,t){for(var n=be(e),r=void 0,i=he.length-1,o=n.types;!r&&i>=0;i--)o&1<<i&&(r=pe[i][t]);return r}function Ae(e,t,n,r){var i=ge.has(t),o=!i&&be(e);(i||o&&o.cache[t]!==n)&&(i||(o.cache[t]=n||void 0),(r=r||Ne(e,t))&&r(e,n),Ut.debug>=2&&console.info('Set "'+t+'": "'+n+'"',e))}function Le(e){if(e.indexOf("calc(")>=0){for(var t=e.split(/([\(\)])/),n=0,r=0;r<t.length;r++){var i=t[r];switch(i){case"(":n++;break;case")":n--;break;default:n&&"0"===i[0]&&(t[r]=i.replace(/^0[a-z%]+ \+ /,""))}}return t.join("").replace(/(?:calc)?\(([0-9\.]+[a-z%]+)\)/g,"$1")}return e}m(["registerNormalization",Ve]),m(["hasNormalization",qe]);var Je={};function Ie(e){var t=Je[e];return t||(Je[e]=e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()}))}var je=/#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})/gi,Ce=/#([a-f\d])([a-f\d])([a-f\d])/gi,Pe=/(rgba?\(\s*)?(\b[a-z]+\b)/g,ze=/rgb(a?)\(([^\)]+)\)/gi,Fe=/\s+/g,He={};function Re(e,t,n,r){return"rgba("+parseInt(t,16)+","+parseInt(n,16)+","+parseInt(r,16)+",1)"}function Be(e){return e.replace(je,Re).replace(Ce,function(e,t,n,r){return Re(0,t+t,n+n,r+r)}).replace(Pe,function(e,t,n){return He[n]?(t||"rgba(")+He[n]+(t?"":",1)"):e}).replace(ze,function(e,t,n){return"rgba("+n.replace(Fe,"")+(t?"":",1")+")"})}function We(e,t,n){if("border-box"===Qe(e,"boxSizing").toString().toLowerCase()===n){var r="width"===t?["Left","Right"]:["Top","Bottom"],i=["padding"+r[0],"padding"+r[1],"border"+r[0]+"Width","border"+r[1]+"Width"],o=0,a=!0,l=!1,s=void 0;try{for(var u,c=i[Symbol.iterator]();!(a=(u=c.next()).done);a=!0){var f=u.value,d=parseFloat(Qe(e,f));isNaN(d)||(o+=d)}}catch(e){l=!0,s=e}finally{try{!a&&c.return&&c.return()}finally{if(l)throw s}}return n?-o:o}return 0}function $e(e,t){return e.getBoundingClientRect()[t]+We(e,t,!0)+"px"}function Ge(e,t){var n=be(e),r=n.computedStyle?n.computedStyle:n.window.getComputedStyle(e,null),i=0;if(n.computedStyle||(n.computedStyle=r),"none"===r.display)switch(t){case"width":case"height":return Ae(e,"display","auto"),i=$e(e,t),Ae(e,"display","none"),String(i)}if((i=r[t])||(i=e.style[t]),"auto"===i)switch(t){case"width":case"height":i=$e(e,t);break;case"top":case"left":case"right":case"bottom":var o=Qe(e,"position");if("fixed"===o||"absolute"===o){i=e.getBoundingClientRect[t]+"px";break}default:i="0px"}return i?String(i):""}function Qe(e,t,n,r){var i=be(e),o=void 0;return ge.has(t)&&(r=!0),!r&&i&&null!=i.cache[t]?o=i.cache[t]:(n=n||Ne(e,t))&&(o=n(e),i&&(i.cache[t]=o)),Ut.debug>=2&&console.info('Get "'+t+'": "'+o+'"',e),o}var De=/^#([A-f\d]{3}){1,2}$/i,Ue={function:function(e,t,n,r,i,o){return e.call(t,r,n.length,i)},number:function(e,t,n,r,i,o){return String(e)+function(e){for(var t in ye)if(ye[t].includes(e))return t;return""}(o.fn)},string:function(e,t,n,r,i,o){return Be(e)},undefined:function(e,t,n,r,i,o){return Be(Qe(t,i,o.fn)||"")}};function Ze(t,n){var r=t.tweens=Object.create(null),i=t.elements,a=t.element,s=i.indexOf(a),c=be(a),f=p(t.queue,t.options.queue),d=p(t.options.duration,ve.duration);for(var v in n)if(n.hasOwnProperty(v)){var y=Ie(v),g=Ne(a,y),h=n[v];if(!g&&"tween"!==y){Ut.debug&&console.log('Skipping "'+v+'" due to a lack of browser support.');continue}if(null==h){Ut.debug&&console.log('Skipping "'+v+'" due to no value supplied.');continue}var m=r[y]={},w=void 0,b=void 0;if(m.fn=g,o(h)&&(h=h.call(a,s,i.length,i)),Array.isArray(h)){var x=h[1],k=h[2];w=h[0],u(x)&&(/^[\d-]/.test(x)||De.test(x))||o(x)||l(x)?b=x:u(x)&&S[x]||Array.isArray(x)?(m.easing=W(x,d),b=k):b=x||k}else w=h;m.end=Ue[void 0===w?"undefined":e(w)](w,a,i,s,y,m),null==b&&!1!==f&&void 0!==c.queueList[f]||(m.start=Ue[void 0===b?"undefined":e(b)](b,a,i,s,y,m),et(y,m,d))}}var Ye=/((?:[+\-*\/]=)?(?:[+-]?\d*\.\d+|[+-]?\d+)[a-z%]*|(?:.(?!$|[+-]?\d|[+\-*\/]=[+-]?\d))+.|.)/g,Xe=/^([+\-*\/]=)?([+-]?\d*\.\d+|[+-]?\d+)(.*)$/;function Ke(e,t){for(var n=e.length,r=[],i=[],o=void 0,a=0;a<n;a++){if(!u(e[a]))return;""===e[a]?r[a]=[""]:r[a]=d(e[a].match(Ye)),i[a]=0,o=o||r[a].length>1}for(var l=[],s=l.pattern=[],c=function(e){if(u(s[s.length-1]))s[s.length-1]+=e;else if(e){s.push(e);for(var t=0;t<n;t++)l[t].push(null)}},f=function(){if(!(o||s.length>1)){for(var r="display"===t,i="visibility"===t,a=0;a<n;a++){var u=e[a];l[a][0]=u,l[a].easing=W(r&&"none"===u||i&&"hidden"===u||!r&&!i?"at-end":"at-start",400)}return s[0]=!1,l}},v=!0,p=0;p<n;p++)l[p]=[];for(;v;){for(var y=[],g=[],h=void 0,m=!1,w=!1,b=0;b<n;b++){var S=i[b]++,x=r[b][S];if(!x){if(b)return;for(;b<n;b++){var k=i[b]++;if(r[b][k])return f()}v=!1;break}var O=x.match(Xe);if(O){if(h)return f();var E=parseFloat(O[2]),_=O[3],T=O[1]?O[1][0]+_:void 0,M=T||_;E&&!g.includes(M)&&g.push(M),_||(E?w=!0:m=!0),y[b]=T?[E,M,!0]:[E,M]}else{if(y.length)return f();if(h){if(h!==x)return f()}else h=x}}if(h)c(h);else if(g.length)if(2===g.length&&m&&!w&&g.splice(g[0]?1:0,1),1===g.length){var V=g[0];switch(V[0]){case"+":case"-":case"*":case"/":return void(t&&console.error('Velocity: The first property must not contain a relative function "'+t+'":',e))}s.push(!1);for(var q=0;q<n;q++)l[q].push(y[q][0]);c(V)}else{c("calc(");for(var N=s.length-1,A=0;A<g.length;A++){var L=g[A],J=L[0],I="*"===J||"/"===J,j=I||"+"===J||"-"===J;I&&(s[N]+="(",c(")")),A&&c(" "+(j?J:"+")+" "),s.push(!1);for(var C=0;C<n;C++){var P=y[C],z=P[1]===L?P[0]:3===P.length?l[C-1][l[C-1].length-1]:I?1:0;l[C].push(z)}c(j?L.substring(1):L)}c(")")}}for(var F=0,H=0;F<s.length;F++){var R=s[F];u(R)?H&&R.indexOf(",")>=0?H++:R.indexOf("rgb")>=0&&(H=1):H&&(H<4?s[F]=!0:H=0)}return l}function et(e,t,n,r){var i=t.start,o=t.end;if(u(o)&&u(i)){var a=Ke([i,o],e);if(!a&&r){var l=i.match(/\d\.?\d*/g)||["0"],s=l.length,c=0;a=Ke([o.replace(/\d+\.?\d*/g,function(){return l[c++%s]}),o],e)}if(a)switch(Ut.debug&&console.log("Velocity: Sequence found:",a),a[0].percent=0,a[1].percent=1,t.sequence=a,t.easing){case S["at-start"]:case S.during:case S["at-end"]:a[0].easing=a[1].easing=t.easing}}}function tt(e){if(ke.firstNew===e&&(ke.firstNew=e._next),!(1&e._flags)){var t=e.element,n=e.tweens;p(e.options.duration,ve.duration);for(var r in n){var i=n[r];if(null==i.start){var o=Qe(e.element,r);u(o)?(i.start=Be(o),et(r,i,0,!0)):Array.isArray(o)||console.warn("bad type",i,r,o)}Ut.debug&&console.log('tweensContainer "'+r+'": '+JSON.stringify(i),t)}e._flags|=1}}function nt(e){var t=e.begin||e.options.begin;if(t)try{var n=e.elements;t.call(n,n,e)}catch(e){setTimeout(function(){throw e},1)}}function rt(e){var t=e.progress||e.options.progress;if(t)try{var n=e.elements,r=e.percentComplete,i=e.options,o=e.tween;t.call(n,n,r,Math.max(0,e.timeStart+(null!=e.duration?e.duration:null!=i.duration?i.duration:ve.duration)-vt),void 0!==o?o:String(100*r),e)}catch(e){setTimeout(function(){throw e},1)}}function it(){var e=!0,t=!1,n=void 0;try{for(var r,i=lt[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){rt(r.value)}}catch(e){t=!0,n=e}finally{try{!e&&i.return&&i.return()}finally{if(t)throw n}}lt.clear();var o=!0,a=!1,l=void 0;try{for(var s,u=at[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){Me(s.value)}}catch(e){a=!0,l=e}finally{try{!o&&u.return&&u.return()}finally{if(a)throw l}}at.clear()}var ot=1e3/60,at=new Set,lt=new Set,st=function(){var e=window.performance||{};if("function"!=typeof e.now){var t=e.timing&&e.timing.navigationStart?e.timing.navigationStart:y();e.now=function(){return y()-t}}return e}(),ut=function(e){return setTimeout(e,Math.max(0,ot-(st.now()-vt)))},ct=window.requestAnimationFrame||ut,ft=void 0,dt=void 0,vt=0;try{(dt=new Worker(URL.createObjectURL(new Blob(["("+function(){var e=this,t=void 0;this.onmessage=function(n){switch(n.data){case!0:t||(t=setInterval(function(){e.postMessage(!0)},1e3/30));break;case!1:t&&(clearInterval(t),t=0);break;default:e.postMessage(n.data)}}}
14351+")()"])))).onmessage=function(e){!0===e.data?pt():it()},ke.isMobile||void 0===document.hidden||document.addEventListener("visibilitychange",function(){dt.postMessage(ke.isTicking&&document.hidden)})}catch(e){}function pt(e){if(!ft){if(ft=!0,!1!==e){var t=st.now(),n=vt?t-vt:ot,r=ve.speed,i=ve.easing,o=ve.duration,a=void 0,l=void 0;if(n>=ve.minFrameTime||!vt){for(vt=t;ke.firstNew;)tt(ke.firstNew);for(a=ke.first;a&&a!==ke.firstNew;a=a._next){var s=a.element,u=be(s);if(s.parentNode&&u){var c=a.options,f=a._flags,d=a.timeStart;if(!d){var v=null!=a.queue?a.queue:c.queue;d=t-n,!1!==v&&(d=Math.max(d,u.lastFinishList[v]||0)),a.timeStart=d}16&f?a.timeStart+=n:2&f||(a._flags|=2,c._ready++)}else _e(a)}for(a=ke.first;a&&a!==ke.firstNew;a=l){var p=a._flags;if(l=a._next,2&p&&!(16&p)){var y=a.options;if(32&p&&y._ready<y._total)a.timeStart+=n;else{var g=null!=a.speed?a.speed:null!=y.speed?y.speed:r,h=a.timeStart;if(!(4&p)){var m=null!=a.delay?a.delay:y.delay;if(m){if(h+m/g>t)continue;a.timeStart=h+=m/(m>0?g:1)}a._flags|=4,0==y._started++&&(y._first=a,y.begin&&(nt(a),y.begin=void 0))}1!==g&&(a.timeStart=h+=Math.min(n,t-h)*(1-g));var w=null!=a.easing?a.easing:null!=y.easing?y.easing:i,b=a.ellapsedTime=t-h,S=null!=a.duration?a.duration:null!=y.duration?y.duration:o,x=a.percentComplete=Ut.mock?1:Math.min(b/S,1),O=a.tweens,E=64&p;for(var _ in(a.progress||y._first===a&&y.progress)&&lt.add(a),1===x&&at.add(a),O){var T=O[_],M=T.sequence,V=M.pattern,q="",N=0;if(V){for(var A=(T.easing||w)(x,0,1,_),L=0,J=0;J<M.length-1;J++)M[J].percent<A&&(L=J);for(var I=M[L],j=M[L+1]||I,C=(x-I.percent)/(j.percent-I.percent),P=E?1-C:C,z=j.easing||w||k;N<V.length;N++){var F=I[N];if(null==F)q+=V[N];else{var H=j[N];if(F===H)q+=F;else{var R=z(P,F,H,_);q+=!0!==V[N]?R:Math.round(R)}}}"tween"!==_?(1===x&&(q=Le(q)),Ae(a.element,_,q,T.fn)):a.tween=q}else console.warn("VelocityJS: Missing pattern:",_,JSON.stringify(T[_])),delete O[_]}}}}(lt.size||at.size)&&(document.hidden?dt?dt.postMessage(""):setTimeout(it,1):it())}}ke.first?(ke.isTicking=!0,document.hidden?dt?!1===e&&dt.postMessage(!0):ut(pt):ct(pt)):(ke.isTicking=!1,vt=0,document.hidden&&dt&&dt.postMessage(!1)),ft=!1}}function yt(e,t,n){if(tt(e),void 0===t||t===p(e.queue,e.options.queue,n)){if(!(4&e._flags)){var r=e.options;0==r._started++&&(r._first=e,r.begin&&(nt(e),r.begin=void 0)),e._flags|=4}for(var i in e.tweens){var o=e.tweens[i],a=o.sequence,l=a.pattern,s="",u=0;if(l)for(var c=a[a.length-1];u<l.length;u++){var f=c[u];s+=null==f?l[u]:f}Ae(e.element,i,s,o.fn)}Me(e)}}m(["finish",function(e,t,n){var r=Q(e[0],!0),i=ve.queue,o=!0===e[void 0===r?0:1];if(c(t)&&t.velocity.animations){var a=!0,l=!1,s=void 0;try{for(var u,f=t.velocity.animations[Symbol.iterator]();!(a=(u=f.next()).done);a=!0)yt(u.value,r,i)}catch(e){l=!0,s=e}finally{try{!a&&f.return&&f.return()}finally{if(l)throw s}}}else{for(;ke.firstNew;)tt(ke.firstNew);for(var d,v=ke.first;v&&(o||v!==ke.firstNew);v=d||ke.firstNew)d=v._next,t&&!t.includes(v.element)||yt(v,r,i)}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0);var gt={isExpanded:1,isReady:2,isStarted:4,isStopped:8,isPaused:16,isSync:32,isReverse:64};function ht(e,t,n,r){void 0!==t&&t!==p(e.queue,e.options.queue,n)||(r?e._flags|=16:e._flags&=-17)}function mt(e,t,n,r){var i=0===r.indexOf("pause"),o="false"!==(r.indexOf(".")>=0?r.replace(/^.*\./,""):void 0)&&Q(e[0]),a=ve.queue;if(c(t)&&t.velocity.animations){var l=!0,s=!1,u=void 0;try{for(var f,d=t.velocity.animations[Symbol.iterator]();!(l=(f=d.next()).done);l=!0){ht(f.value,o,a,i)}}catch(e){s=!0,u=e}finally{try{!l&&d.return&&d.return()}finally{if(s)throw u}}}else for(var v=ke.first;v;)t&&!t.includes(v.element)||ht(v,o,a,i),v=v._next;n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}function wt(t,n,r,i){var o=t[0],a=t[1];if(!o)return console.warn("VelocityJS: Cannot access a non-existant property!"),null;if(void 0===a&&!s(o)){if(Array.isArray(o)){if(1===n.length){var f={},d=!0,v=!1,p=void 0;try{for(var y,g=o[Symbol.iterator]();!(d=(y=g.next()).done);d=!0){var h=y.value;f[h]=Be(Qe(n[0],h))}}catch(e){v=!0,p=e}finally{try{!d&&g.return&&g.return()}finally{if(v)throw p}
14351}return f}var m=[],w=!0,b=!1,S=void 0;try{for(var x,k=n[Symbol.iterator]();!(w=(x=k.next()).done);w=!0){var O=x.value,E={},_=!0,T=!1,M=void 0;try{for(var V,q=o[Symbol.iterator]();!(_=(V=q.next()).done);_=!0){var N=V.value;E[N]=Be(Qe(O,N))}}catch(e){T=!0,M=e}finally{try{!_&&q.return&&q.return()}finally{if(T)throw M}}m.push(E)}}catch(e){b=!0,S=e}finally{try{!w&&k.return&&k.return()}finally{if(b)throw S}}return m}if(1===n.length)return Be(Qe(n[0],o));var A=[],L=!0,J=!1,I=void 0;try{for(var j,C=n[Symbol.iterator]();!(L=(j=C.next()).done);L=!0){var P=j.value;A.push(Be(Qe(P,o)))}}catch(e){J=!0,I=e}finally{try{!L&&C.return&&C.return()}finally{if(J)throw I}}return A}var z=[];if(s(o)){for(var F in o)if(o.hasOwnProperty(F)){var H=!0,R=!1,B=void 0;try{for(var W,$=n[Symbol.iterator]();!(H=(W=$.next()).done);H=!0){var G=W.value,Q=o[F];u(Q)||l(Q)?Ae(G,F,o[F]):(z.push('Cannot set a property "'+F+'" to an unknown type: '+(void 0===Q?"undefined":e(Q))),console.warn('VelocityJS: Cannot set a property "'+F+'" to an unknown type:',Q))}}catch(e){R=!0,B=e}finally{try{!H&&$.return&&$.return()}finally{if(R)throw B}}}}else if(u(a)||l(a)){var D=!0,U=!1,Z=void 0;try{for(var Y,X=n[Symbol.iterator]();!(D=(Y=X.next()).done);D=!0){Ae(Y.value,o,String(a))}}catch(e){U=!0,Z=e}finally{try{!D&&X.return&&X.return()}finally{if(U)throw Z}}}else z.push('Cannot set a property "'+o+'" to an unknown type: '+(void 0===a?"undefined":e(a))),console.warn('VelocityJS: Cannot set a property "'+o+'" to an unknown type:',a);r&&(z.length?r._rejecter(z.join(", ")):c(n)&&n.velocity.animations&&n.then?n.then(r._resolver):r._resolver(n))}function bt(e,t,n){tt(e),void 0!==t&&t!==p(e.queue,e.options.queue,n)||(e._flags|=8,Me(e))}m(["option",function(e,t,n,r){var i=e[0],o=r.indexOf(".")>=0?r.replace(/^.*\./,""):void 0,a="false"!==o&&Q(o,!0),l=void 0,s=e[1];if(!i)return console.warn("VelocityJS: Cannot access a non-existant key!"),null;if(c(t)&&t.velocity.animations)l=t.velocity.animations;else{l=[];for(var u=ke.first;u;u=u._next)t.indexOf(u.element)>=0&&p(u.queue,u.options.queue)===a&&l.push(u);if(t.length>1&&l.length>1){for(var f=1,d=l[0].options;f<l.length;)if(l[f++].options!==d){d=null;break}d&&(l=[l[0]])}}if(void 0===s){var v=[],y=gt[i],g=!0,h=!1,m=void 0;try{for(var w,b=l[Symbol.iterator]();!(g=(w=b.next()).done);g=!0){var S=w.value;void 0===y?v.push(p(S[i],S.options[i])):v.push(0==(S._flags&y))}}catch(e){h=!0,m=e}finally{try{!g&&b.return&&b.return()}finally{if(h)throw m}}return 1===t.length&&1===l.length?v[0]:v}var x=void 0;switch(i){case"cache":s=z(s);break;case"begin":s=F(s);break;case"complete":s=H(s);break;case"delay":s=R(s);break;case"duration":s=B(s);break;case"fpsLimit":s=$(s);break;case"loop":s=G(s);break;case"percentComplete":x=!0,s=parseFloat(s);break;case"repeat":case"repeatAgain":s=D(s);break;default:if("_"!==i[0]){var k=parseFloat(s);s===String(k)&&(s=k);break}case"queue":case"promise":case"promiseRejectEmpty":case"easing":case"started":return void console.warn("VelocityJS: Trying to set a read-only key:",i)}if(void 0===s||s!=s)return console.warn("VelocityJS: Trying to set an invalid value:"+i+"="+s+" ("+e[1]+")"),null;var O=!0,E=!1,_=void 0;try{for(var T,M=l[Symbol.iterator]();!(O=(T=M.next()).done);O=!0){var V=T.value;x?V.timeStart=vt-p(V.duration,V.options.duration,ve.duration)*s:V[i]=s}}catch(e){E=!0,_=e}finally{try{!O&&M.return&&M.return()}finally{if(E)throw _}}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0),m(["pause",mt],!0),m(["resume",mt],!0),m(["property",wt],!0),m(["reverse",function(e,t,n,r){throw new SyntaxError("VelocityJS: The 'reverse' action is built in and private.")}],!0),m(["stop",function(e,t,n,r){var i=Q(e[0],!0),o=ve.queue,a=!0===e[void 0===i?0:1];if(c(t)&&t.velocity.animations){var l=!0,s=!1,u=void 0;try{for(var f,d=t.velocity.animations[Symbol.iterator]();!(l=(f=d.next()).done);l=!0)bt(f.value,i,o)}catch(e){s=!0,u=e}finally{try{!l&&d.return&&d.return()}finally{if(s)throw u}}}else{for(;ke.firstNew;)tt(ke.firstNew);for(var v,p=ke.first;p&&(a||p!==ke.firstNew);p=v||ke.firstNew)v=p._next,t&&!t.includes(p.element)||bt(p,i,o)}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0),m(["style",wt],!0),m(["tween",function(e,t,n,i){var o=void 0;if(t){if(1!==t.length)throw new Error("VelocityJS: Cannot tween more than one element!")}else{if(!e.length)return console.info('Velocity(<element>, "tween", percentComplete, property, end | [end, <easing>, <start>], <easing>) => value\nVelocity(<element>, "tween", percentComplete, {property: end | [end, <easing>, <start>], ...}, <easing>) => {property: value, ...}'),null;t=[document.body],o=!0}var a=e[0],c={elements:t,element:t[0],queue:!1,options:{duration:1e3},tweens:null},f={},d=e[1],v=void 0,y=void 0,g=e[2],h=0;if(u(e[1])?Te&&Te[e[1]]?(y=Te[e[1]],d={},g=e[2]):(v=!0,d=r({},e[1],e[2]),g=e[3]):Array.isArray(e[1])&&(v=!0,d={tween:e[1]},g=e[2]),!l(a)||a<0||a>1)throw new Error("VelocityJS: Must tween a percentage from 0 to 1!");
14351if(!s(d))throw new Error("VelocityJS: Cannot tween an invalid property!");if(o)for(var m in d)if(d.hasOwnProperty(m)&&(!Array.isArray(d[m])||d[m].length<2))throw new Error("VelocityJS: When not supplying an element you must force-feed values: "+m);var b=W(p(g,ve.easing),w);for(var S in y?tn(c,y):Ze(c,d),c.tweens){var x=c.tweens[S],O=x.sequence,E=O.pattern,_="",T=0;if(h++,E){for(var M=(x.easing||b)(a,0,1,S),V=0,q=0;q<O.length-1;q++)O[q].percent<M&&(V=q);for(var N=O[V],A=O[V+1]||N,L=(a-N.percent)/(A.percent-N.percent),J=A.easing||k;T<E.length;T++){var I=N[T];if(null==I)_+=E[T];else{var j=A[T];if(I===j)_+=I;else{var C=J(L,I,j,S);_+=!0===E[T]?Math.round(C):C}}}f[S]=_}}if(v&&1===h)for(var P in f)if(f.hasOwnProperty(P))return f[P];return f}],!0);var St={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgrey:11119017,darkgreen:25600,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,grey:8421504,green:32768,greenyellow:11403055,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgrey:13882323,lightgreen:9498256,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};for(var xt in St)if(St.hasOwnProperty(xt)){var kt=St[xt];He[xt]=Math.floor(kt/65536)+","+Math.floor(kt/256%256)+","+kt%256}function Ot(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function Et(e){return 1-Ot(1-e)}!function(e,t){x([e,function(e,n,r){return 0===e?n:1===e?r:Math.pow(e,2)*((t+1)*e-t)*(r-n)}])}("easeInBack",1.7),function(e,t){x([e,function(e,n,r){return 0===e?n:1===e?r:(Math.pow(--e,2)*((t+1)*e+t)+1)*(r-n)}])}("easeOutBack",1.7),function(e,t){t*=1.525,x([e,function(e,n,r){return 0===e?n:1===e?r:.5*((e*=2)<1?Math.pow(e,2)*((t+1)*e-t):Math.pow(e-2,2)*((t+1)*(e-2)+t)+2)*(r-n)}])}("easeInOutBack",1.7),x(["easeInBounce",function(e,t,n){return 0===e?t:1===e?n:Et(e)*(n-t)}]),x(["easeOutBounce",function(e,t,n){return 0===e?t:1===e?n:Ot(e)*(n-t)}]),x(["easeInOutBounce",function(e,t,n){return 0===e?t:1===e?n:(e<.5?.5*Et(2*e):.5*Ot(2*e-1)+.5)*(n-t)}]);var _t=2*Math.PI;function Tt(e,t){return function(n,r){if(void 0===r)return We(n,e,t)+"px";Ae(n,e,parseFloat(r)-We(n,e,t)+"px")}}!function(e,t,n){x([e,function(e,r,i){return 0===e?r:1===e?i:-t*Math.pow(2,10*(e-=1))*Math.sin((e-n/_t*Math.asin(1/t))*_t/n)*(i-r)}])}("easeInElastic",1,.3),function(e,t,n){x([e,function(e,r,i){return 0===e?r:1===e?i:(t*Math.pow(2,-10*e)*Math.sin((e-n/_t*Math.asin(1/t))*_t/n)+1)*(i-r)}])}("easeOutElastic",1,.3),function(e,t,n){x([e,function(e,r,i){if(0===e)return r;if(1===e)return i;var o=n/_t*Math.asin(1/t);return((e=2*e-1)<0?t*Math.pow(2,10*e)*Math.sin((e-o)*_t/n)*-.5:t*Math.pow(2,-10*e)*Math.sin((e-o)*_t/n)*.5+1)*(i-r)}])}("easeInOutElastic",1,.3*1.5),x(["at-start",function(e,t,n){return 0===e?t:n}]),x(["during",function(e,t,n){return 0===e||1===e?t:n}]),x(["at-end",function(e,t,n){return 1===e?n:t}]),Ve(["Element","innerWidth",Tt("width",!0)]),Ve(["Element","innerHe
14351ight",Tt("height",!0)]),Ve(["Element","outerWidth",Tt("width",!1)]),Ve(["Element","outerHeight",Tt("height",!1)]);var Mt=/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,Vt=/^(li)$/i,qt=/^(tr)$/i,Nt=/^(table)$/i,At=/^(tbody)$/i;function Lt(e,t){return function(n,r){if(null==r)return Qe(n,"client"+e,null,!0),Qe(n,"scroll"+e,null,!0),n["scroll"+t]+"px";var i=parseFloat(r);switch(r.replace(String(i),"")){case"":case"px":n["scroll"+t]=i;break;case"%":var o=parseFloat(Qe(n,"client"+e)),a=parseFloat(Qe(n,"scroll"+e));n["scroll"+t]=Math.max(0,a-o)*i/100}}}Ve(["Element","display",function(e,t){var n=e.style;if(void 0===t)return Ge(e,"display");if("auto"===t){var r=e&&e.nodeName,i=be(e);t=Mt.test(r)?"inline":Vt.test(r)?"list-item":qt.test(r)?"table-row":Nt.test(r)?"table":At.test(r)?"table-row-group":"block",i.cache.display=t}n.display=t}]),Ve(["HTMLElement","scroll",Lt("Height","Top"),!1]),Ve(["HTMLElement","scrollTop",Lt("Height","Top"),!1]),Ve(["HTMLElement","scrollLeft",Lt("Width","Left"),!1]),Ve(["HTMLElement","scrollWidth",function(e,t){if(null==t)return e.scrollWidth+"px"}]),Ve(["HTMLElement","clientWidth",function(e,t){if(null==t)return e.clientWidth+"px"}]),Ve(["HTMLElement","scrollHeight",function(e,t){if(null==t)return e.scrollHeight+"px"}]),Ve(["HTMLElement","clientHeight",function(e,t){if(null==t)return e.clientHeight+"px"}]);var Jt=/^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;function It(e,t){return function(n,r){if(void 0===r)return Ge(n,e)||Ge(n,t);n.style[e]=n.style[t]=r}}function jt(e){return function(t,n){if(void 0===n)return Ge(t,e);t.style[e]=n}}var Ct=/^(webkit|moz|ms|o)[A-Z]/,Pt=ke.prefixElement;if(Pt)for(var zt in Pt.style)if(Ct.test(zt)){var Ft=zt.replace(/^[a-z]+([A-Z])/,function(e,t){return t.toLowerCase()}),Ht=Jt.test(Ft)?"px":void 0;Ve(["Element",Ft,It(zt,Ft),Ht])}else if(!qe(["Element",zt])){var Rt=Jt.test(zt)?"px":void 0;Ve(["Element",zt,jt(zt),Rt])}function Bt(e){return function(t,n){if(void 0===n)return t.getAttribute(e);t.setAttribute(e,n)}}var Wt=document.createElement("div"),$t=/^SVG(.*)Element$/,Gt=/Element$/;function Qt(e){return function(t,n){if(void 0===n)try{return t.getBBox()[e]+"px"}catch(e){return"0px"}t.setAttribute(e,n)}}Object.getOwnPropertyNames(window).forEach(function(e){var t=$t.exec(e);if(t&&"SVG"!==t[1])try{var n=t[1]?document.createElementNS("http://www.w3.org/2000/svg",(t[1]||"svg").toLowerCase()):document.createElement("svg");for(var r in n){var i=n[r];!u(r)||"o"===r[0]&&"n"===r[1]||r===r.toUpperCase()||Gt.test(r)||r in Wt||o(i)||Ve([e,r,Bt(r)])}}catch(t){console.error("VelocityJS: Error when trying to identify SVG attributes on "+e+".",t)}}),Ve(["SVGElement","width",Qt("width")]),Ve(["SVGElement","height",Qt("height")]),Ve(["Element","tween",function(e,t){if(void 0===t)return""}]);var Dt,Ut=an;if(function(e){e.Actions=h,e.Easings=S,e.Sequences=Te,e.State=ke,e.defaults=ve,e.patch=sn,e.debug=!1,e.mock=!1,e.version="2.0.5",e.Velocity=an}(Dt||(Dt={})),function(){if(document.documentMode)return document.documentMode;for(var e=7;e>4;e--){var t=document.createElement("div");if(t.innerHTML="\x3c!--[if IE "+e+"]><span></span><![endif]--\x3e",t.getElementsByTagName("span").length)return t=null,e}}()<=8)throw new Error("VelocityJS cannot run on Internet Explorer 8 or earlier");if(window){var Zt=window.jQuery,Yt=window.Zepto;sn(window,!0),sn(Element&&Element.prototype),sn(NodeList&&NodeList.prototype),sn(HTMLCollection&&HTMLCollection.prototype),sn(Zt,!0),sn(Zt&&Zt.fn),sn(Yt,!0),sn(Yt&&Yt.fn)}var Xt=function(t){if(Dt.hasOwnProperty(t))switch(void 0===t?"undefined":e(t)){case"number":case"boolean":v(Ut,t,{get:function(){return Dt[t]},set:function(e){Dt[t]=e}},!0);break;default:v(Ut,t,Dt[t],!0)}};for(var Kt in Dt)Xt(Kt);Object.freeze(Ut);var en=/(\d*\.\d+|\d+\.?|from|to)/g;function tn(e,t){var n=e.tweens=Object.create(null),r=e.element;for(var i in t.tweens)if(t.tweens.hasOwnProperty(i)){var o=Ne(r,i);if(!o&&"tween"!==i){Ut.debug&&console.log("Skipping ["+i+"] due to a lack of browser support.");continue}n[i]={fn:o,sequence:t.tweens[i]}}}m(["registerSequence",function e(t){if(s(t[0]))for(var n in t[0])t[0].hasOwnProperty(n)&&e([n,t[0][n]]);else if(u(t[0])){var r=t[0],i=t[1];
14351if(u(r))if(s(i)){Te[r]&&console.warn("VelocityJS: Replacing named sequence:",r);var o={},a=new Array(100),c=[],f=Te[r]={},d=B(i.duration);for(var v in f.tweens={},l(d)&&(f.duration=d),i)if(i.hasOwnProperty(v)){var p=String(v).match(en);if(p){var y=!0,g=!1,h=void 0;try{for(var m,b=p[Symbol.iterator]();!(y=(m=b.next()).done);y=!0){var S=m.value,x="from"===S?0:"to"===S?100:parseFloat(S);if(x<0||x>100)console.warn("VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):",r,x);else if(isNaN(x))console.warn("VelocityJS: Trying to use an invalid number as a percentage:",r,v,S);else for(var k in o[String(x)]||(o[String(x)]=[]),o[String(x)].push(v),i[v])c.includes(k)||c.push(k)}}catch(e){g=!0,h=e}finally{try{!y&&b.return&&b.return()}finally{if(g)throw h}}}}var O=Object.keys(o).sort(function(e,t){var n=parseFloat(e),r=parseFloat(t);return n>r?1:n<r?-1:0});O.forEach(function(e){a.push.apply(o[e])});var E=!0,_=!1,T=void 0;try{for(var M,V=c[Symbol.iterator]();!(E=(M=V.next()).done);E=!0){var q=M.value,N=[],A=Ie(q),L=!0,J=!1,I=void 0;try{for(var j,C=O[Symbol.iterator]();!(L=(j=C.next()).done);L=!0){var P=j.value,z=!0,F=!1,H=void 0;try{for(var R,$=o[P][Symbol.iterator]();!(z=(R=$.next()).done);z=!0){var G=i[R.value];G[A]&&N.push(u(G[A])?G[A]:G[A][0])}}catch(e){F=!0,H=e}finally{try{!z&&$.return&&$.return()}finally{if(F)throw H}}}}catch(e){J=!0,I=e}finally{try{!L&&C.return&&C.return()}finally{if(J)throw I}}if(N.length){var Q=Ke(N,A),D=0;if(Q){var U=!0,Z=!1,Y=void 0;try{for(var X,K=O[Symbol.iterator]();!(U=(X=K.next()).done);U=!0){var ee=X.value,te=!0,ne=!1,re=void 0;try{for(var ie,oe=o[ee][Symbol.iterator]();!(te=(ie=oe.next()).done);te=!0){var ae=i[ie.value][A];ae&&(Array.isArray(ae)&&ae.length>1&&(u(ae[1])||Array.isArray(ae[1]))&&(Q[D].easing=W(ae[1],f.duration||w)),Q[D++].percent=parseFloat(ee)/100)}}catch(e){ne=!0,re=e}finally{try{!te&&oe.return&&oe.return()}finally{if(ne)throw re}}}}catch(e){Z=!0,Y=e}finally{try{!U&&K.return&&K.return()}finally{if(Z)throw Y}}f.tweens[A]=Q}}}}catch(e){_=!0,T=e}finally{try{!E&&V.return&&V.return()}finally{if(_)throw T}}}else console.warn("VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:",r,i);else console.warn("VelocityJS: Trying to set 'registerSequence' name to an invalid value:",r)}}],!0);var nn=void 0;
14351try{nn=Promise}catch(e){}var rn=", if that is deliberate then pass `promiseRejectEmpty:false` as an option";function on(e,t){v(t,"promise",e),v(t,"then",e.then.bind(e)),v(t,"catch",e.catch.bind(e)),e.finally&&v(t,"finally",e.finally.bind(e))}function an(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=ve,y=arguments,g=y[0],m=s(g)&&(g.p||s(g.properties)&&!g.properties.names||u(g.properties)),w=0,b=void 0,S=void 0,x=void 0,k=void 0,O=void 0,E=void 0,_=void 0;a(this)?b=[this]:f(this)?(b=d(this),c(this)&&(k=this.velocity.animations)):m?(b=d(g.elements||g.e),w++):a(g)?(b=d([g]),w++):f(g)&&(b=d(g),w++),b&&(v(b,"velocity",an.bind(b)),k&&v(b.velocity,"animations",k));var T="reverse"===(S=m?p(g.properties,g.p):y[w++]),M=!T&&u(S),V=M&&Te[S],q=m?p(g.options,g.o):y[w];if(s(q)&&(x=q),nn&&p(x&&x.promise,r.promise)&&(O=new nn(function(e,t){_=t,E=function(t){c(t)&&t.promise?(delete t.then,delete t.catch,delete t.finally,e(t),on(t.promise,t)):e(t)}}),b&&on(O,b)),O){var N=x&&x.promiseRejectEmpty,A=p(N,r.promiseRejectEmpty);b||M?S||(A?_("Velocity: No properties supplied"+(i(N)?"":rn)+". Aborting."):E()):A?_("Velocity: No elements supplied"+(i(N)?"":rn)+". Aborting."):E()}if(!b&&!M||!S)return O;if(M){for(var L=[],J=O&&{_promise:O,_resolver:E,_rejecter:_};w<y.length;)L.push(y[w++]);var I=S.replace(/\..*$/,""),j=h[I];if(j){var C=j(L,b,J,S);return void 0!==C?C:b||O}if(!V)return void console.error("VelocityJS: First argument ("+S+") was not a property map, a known action, or a registered redirect. Aborting.")}var P=void 0;if(s(S)||T||V){var z={},$=r.sync;if(O&&(v(z,"_promise",O),v(z,"_rejecter",_),v(z,"_resolver",E)),v(z,"_ready",0),v(z,"_started",0),v(z,"_completed",0),v(z,"_total",0),s(x)){var Y=B(x.duration);P=void 0!==Y,z.duration=p(Y,r.duration),z.delay=p(R(x.delay),r.delay),z.easing=W(p(x.easing,r.easing),z.duration)||W(r.easing,z.duration),z.loop=p(G(x.loop),r.loop),z.repeat=z.repeatAgain=p(D(x.repeat),r.repeat),null!=x.speed&&(z.speed=p(U(x.speed),1)),i(x.promise)&&(z.promise=x.promise),z.queue=p(Q(x.queue),r.queue),x.mobileHA&&!ke.isGingerbread&&(z.mobileHA=!0),!0===x.drag&&(z.drag=!0),(l(x.stagger)||o(x.stagger))&&(z.stagger=x.stagger),T||(null!=x.display&&(S.display=x.display,console.error('Deprecated "options.display" used, this is now a property:',x.display)),null!=x.visibility&&(S.visibility=x.visibility,console.error('Deprecated "options.visibility" used, this is now a property:',x.visibility)));var X=F(x.begin),K=H(x.complete),ee=function(e){if(o(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'progress' to an invalid value:",e)}(x.progress),te=Z(x.sync);null!=X&&(z.begin=X),null!=K&&(z.complete=K),null!=ee&&(z.progress=ee),null!=te&&($=te)}else if(!m){var ne=0;if(z.duration=B(y[w],!0),void 0===z.duration?z.duration=r.duration:(P=!0,ne++),!o(y[w+ne])){var re=W(y[w+ne],p(z&&B(z.duration),r.duration),!0);void 0!==re&&(ne++,z.easing=re)}var ie=H(y[w+ne],!0);void 0!==ie&&(z.complete=ie),z.delay=r.delay,z.loop=r.loop,z.repeat=z.repeatAgain=r.repeat}if(T&&!1===z.queue)throw new Error("VelocityJS: Cannot reverse a queue:false animation.");!P&&V&&V.duration&&(z.duration=V.duration);var oe={options:z,elements:b,_prev:void 0,_next:void 0,_flags:$?32:0,percentComplete:0,ellapsedTime:0,timeStart:0};k=[];for(var ae=0;ae<b.length;ae++){var le=b[ae],se=0;if(a(le)){if(T){var ue=be(le).lastAnimationList[z.queue];if(!(S=ue&&ue.tweens)){console.error("VelocityJS: Attempting to reverse an animation on an element with no previous animation:",le);continue}se|=64&~(64&ue._flags)}var ce=Object.assign({},oe,{element:le,_flags:oe._flags|se});if(z._total++,k.push(ce),z.stagger)if(o(z.stagger)){var fe=ln(z.stagger,le,ae,b.length,b,"stagger");l(fe)&&(ce.delay=z.delay+fe)}else ce.delay=z.delay+z.stagger*ae;z.drag&&(ce.duration=z.duration-z.duration*Math.max(1-(ae+1)/b.length,.75)),V?tn(ce,V):T?ce.tweens=S:(ce.tweens=Object.create(null),Ze(ce,S)),Ee(le,ce,z.queue)}}!1===ke.isTicking&&pt(!1),k&&v(b.velocity,"animations",k)}return b||O}function ln(e,t,n,r,i,o){try{return e.call(t,n,r,i,o)}catch(e){console.error("VelocityJS: Exception when calling '"+o+"' callback:",e)}}function sn(e,t){try{v(e,(t?"V":"v")+"elocity",an)}catch(e){console.warn("VelocityJS: Error when trying to add prototype.",e)}}var un,cn=an;if(function(e){e.Actions=h,e.Easings=S,e.Sequences=Te,e.State=ke,e.defaults=ve,e.patch=sn,e.debug=!1,e.mock=!1,e.version="2.0.5",e.Velocity=an}(un||(un={})),function(){if(document.documentMode)return document.documentMode;for(var e=7;e>4;e--){var t=document.createElement("div");if(t.innerHTML="\x3c!--[if IE "+e+"]><span></span><![endif]--\x3e",t.getElementsByTagName("span").length)return t=null,e}}()<=8)throw new Error("VelocityJS cannot run on Internet Explorer 8 or earlier");if(window){var fn=window.jQuery,dn=window.Zepto;sn(window,!0),sn(Element&&Element.prototype),sn(NodeList&&NodeList.prototype),sn(HTMLCollection&&HTMLCollection.prototype),sn(fn,!0),sn(fn&&fn.fn),sn(dn,!0),sn(dn&&dn.fn)}var vn=function(t){if(un.hasOwnProperty(t))switch(void 0===t?"undefined":e(t)){case"number":case"boolean":v(cn,t,{get:function(){return un[t]},set:function(e){un[t]=e}},!0);break;default:v(cn,t,un[t],!0)}};for(var pn in un)vn(pn);return Object.freeze(cn),cn});
14352;
14353/*!
14354 * ScrollMagic v2.0.7 (2019-05-07)
14355 * The javascript library for magical scroll interactions.
14356 * (c) 2019 Jan Paepke (@janpaepke)
14357 * Project Website: http://scrollmagic.io
14358 * 
14359 * @version 2.0.7
14360 * @license Dual licensed under MIT license and GPL.
14361 * @author Jan Paepke - [email protected]
14362 *
14363 * @file ScrollMagic GSAP Animation Plugin.
14364 *
14365 * requires: GSAP ~1.14
14366 * Powered by the Greensock Animation Platform (GSAP): http://www.greensock.com/js
14367 * Greensock License info at http://www.greensock.com/licensing/
14368 */
14369/**
14370 * This plugin is meant to be used in conjunction with the Greensock Animation Plattform.  
14371 * It offers an easy API to trigger Tweens or synchronize them to the scrollbar movement.
14372 *
14373 * Both the `lite` and the `max` versions of the GSAP library are supported.  
14374 * The most basic requirement is `TweenLite`.
14375 * 
14376 * To have access to this extension, please include `plugins/animation.gsap.js`.
14377 * @requires {@link http://greensock.com/gsap|GSAP ~1.14.x}
14378 * @mixin animation.GSAP
14379 */
14380(function (root, factory) {
14381	if (typeof define === 'function' && define.amd) {
14382		// AMD. Register as an anonymous module.
14383		define(['ScrollMagic', 'TweenMax', 'TimelineMax'], factory);
14384	} else if (typeof exports === 'object') {
14385		// CommonJS
14386		// Loads whole gsap package onto global scope.
14387		require('gsap');
14388		factory(require('scrollmagic'), TweenMax, TimelineMax);
14389	} else {
14390		// Browser globals
14391		factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic), root.TweenMax || root.TweenLite, root.TimelineMax || root.TimelineLite);
14392	}
14393}(this, function (ScrollMagic, Tween, Timeline) {
14394	"use strict";
14395	var NAMESPACE = "animation.gsap";
14396
14397	var
14398		console = window.console || {},
14399		err = Function.prototype.bind.call(console.error || console.log || function () {}, console);
14400	if (!ScrollMagic) {
14401		err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs.");
14402	}
14403	if (!Tween) {
14404		err("(" + NAMESPACE + ") -> ERROR: TweenLite or TweenMax could not be found. Please make sure GSAP is loaded before ScrollMagic or use an asynchronous loader like requirejs.");
14405	}
14406
14407	/*
14408	 * ----------------------------------------------------------------
14409	 * Extensions for Scene
14410	 * ----------------------------------------------------------------
14411	 */
14412	/**
14413	 * Every instance of ScrollMagic.Scene now accepts an additional option.  
14414	 * See {@link ScrollMagic.Scene} for a complete list of the standard options.
14415	 * @memberof! animation.GSAP#
14416	 * @method new ScrollMagic.Scene(options)
14417	 * @example
14418	 * var scene = new ScrollMagic.Scene({tweenChanges: true});
14419	 *
14420	 * @param {object} [options] - Options for the Scene. The options can be updated at any time.
14421	 * @param {boolean} [options.tweenChanges=false] - Tweens Animation to the progress target instead of setting it.  
14422	 												  Does not affect animations where duration is `0`.
14423	 */
14424	/**
14425	 * **Get** or **Set** the tweenChanges option value.  
14426	 * This only affects scenes with a duration. If `tweenChanges` is `true`, the progress update when scrolling will not be immediate, but instead the animation will smoothly animate to the target state.  
14427	 * For a better understanding, try enabling and disabling this option in the [Scene Manipulation Example](../examples/basic/scene_manipulation.html).
14428	 * @memberof! animation.GSAP#
14429	 * @method Scene.tweenChanges
14430	 * 
14431	 * @example
14432	 * // get the current tweenChanges option
14433	 * var tweenChanges = scene.tweenChanges();
14434	 *
14435	 * // set new tweenChanges option
14436	 * scene.tweenChanges(true);
14437	 *
14438	 * @fires {@link Scene.change}, when used as setter
14439	 * @param {boolean} [newTweenChanges] - The new tweenChanges setting of the scene.
14440	 * @returns {boolean} `get` -  Current tweenChanges option value.
14441	 * @returns {Scene} `set` -  Parent object for chaining.
14442	 */
14443	// add option (TODO: DOC (private for dev))
14444	ScrollMagic.Scene.addOption(
14445		"tweenChanges", // name
14446		false, // default
14447		function (val) { // validation callback
14448			return !!val;
14449		}
14450	);
14451	// extend scene
14452	ScrollMagic.Scene.extend(function () {
14453		var Scene = this,
14454			_tween;
14455
14456		var log = function () {
14457			if (Scene._log) { // not available, when main source minified
14458				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->");
14459				Scene._log.apply(this, arguments);
14460			}
14461		};
14462
14463		// set listeners
14464		Scene.on("progress.plugin_gsap", function () {
14465			updateTweenProgress();
14466		});
14467		Scene.on("destroy.plugin_gsap", function (e) {
14468			Scene.removeTween(e.reset);
14469		});
14470
14471		/**
14472		 * Update the tween progress to current position.
14473		 * @private
14474		 */
14475		var updateTweenProgress = function () {
14476			if (_tween) {
14477				var
14478					progress = Scene.progress(),
14479					state = Scene.state();
14480				if (_tween.repeat && _tween.repeat() === -1) {
14481					// infinite loop, so not in relation to progress
14482					if (state === 'DURING' && _tween.paused()) {
14483						_tween.play();
14484					} else if (state !== 'DURING' && !_tween.paused()) {
14485						_tween.pause();
14486					}
14487				} else if (progress != _tween.progress()) { // do we even need to update the progress?
14488					// no infinite loop - so should we just play or go to a specific point in t
14488ime?
14489					if (Scene.duration() === 0) {
14490						// play the animation
14491						if (progress > 0) { // play from 0 to 1
14492							_tween.play();
14493						} else { // play from 1 to 0
14494							_tween.reverse();
14495						}
14496					} else {
14497						// go to a specific point in time
14498						if (Scene.tweenChanges() && _tween.tweenTo) {
14499							// go smooth
14500							_tween.tweenTo(progress * _tween.duration());
14501						} else {
14502							// just hard set it
14503							_tween.progress(progress).pause();
14504						}
14505					}
14506				}
14507			}
14508		};
14509
14510		/**
14511		 * Add a tween to the scene.  
14512		 * If you want to add multiple tweens, add them into a GSAP Timeline object and supply it instead (see example below).  
14513		 * 
14514		 * If the scene has a duration, the tween's duration will be projected to the scroll distance of the scene, meaning its progress will be synced to scrollbar movement.  
14515		 * For a scene with a duration of `0`, the tween will be triggered when scrolling forward past the scene's trigger position and reversed, when scrolling back.  
14516		 * To gain better understanding, check out the [Simple Tweening example](../examples/basic/simple_tweening.html).
14517		 *
14518		 * Instead of supplying a tween this method can also be used as a shorthand for `TweenMax.to()` (see example below).
14519		 * @memberof! animation.GSAP#
14520		 *
14521		 * @example
14522		 * // add a single tween directly
14523		 * scene.setTween(TweenMax.to("obj"), 1, {x: 100});
14524		 *
14525		 * // add a single tween via variable
14526		 * var tween = TweenMax.to("obj"), 1, {x: 100};
14527		 * scene.setTween(tween);
14528		 *
14529		 * // add multiple tweens, wrapped in a timeline.
14530		 * var timeline = new TimelineMax();
14531		 * var tween1 = TweenMax.from("obj1", 1, {x: 100});
14532		 * var tween2 = TweenMax.to("obj2", 1, {y: 100});
14533		 * timeline
14534		 *		.add(tween1)
14535		 *		.add(tween2);
14536		 * scene.addTween(timeline);
14537		 *
14538		 * // short hand to add a TweenMax.to() tween
14539		 * scene.setTween("obj3", 0.5, {y: 100});
14540		 *
14541		 * // short hand to add a TweenMax.to() tween for 1 second
14542		 * // this is useful, when the scene has a duration and the tween duration isn't important anyway
14543		 * scene.setTween("obj3", {y: 100});
14544		 *
14545		 * @param {(object|string)} TweenObject - A TweenMax, TweenLite, TimelineMax or TimelineLite object that should be animated in the scene. Can also be a Dom Element or Selector, when using direct tween definition (see examples).
14546		 * @param {(number|object)} duration - A duration for the tween, or tween parameters. If an object containing parameters are supplied, a default duration of 1 will be used.
14547		 * @param {object} params - The parameters for the tween
14548		 * @returns {Scene} Parent object for chaining.
14549		 */
14550		Scene.setTween = function (TweenObject, duration, params) {
14551			var newTween;
14552			if (arguments.length > 1) {
14553				if (arguments.length < 3) {
14554					params = duration;
14555					duration = 1;
14556				}
14557				TweenObject = Tween.to(TweenObject, duration, params);
14558			}
14559			try {
14560				// wrap Tween into a Timeline Object if available to include delay and repeats in the duration and standardize methods.
14561				if (Timeline) {
14562					newTween = new Timeline({
14563							smoothChildTiming: true
14564						})
14565						.add(TweenObject);
14566				} else {
14567					newTween = TweenObject;
14568				}
14569				newTween.pause();
14570			} catch (e) {
14571				log(1, "ERROR calling method 'setTween()': Supplied argument is not a valid TweenObject");
14572				return Scene;
14573			}
14574			if (_tween) { // kill old tween?
14575				Scene.removeTween();
14576			}
14577			_tween = newTween;
14578
14579			// some properties need to be transferred it to the wrapper, otherwise they would get lost.
14580			if (TweenObject.repeat && TweenObject.repeat() === -1) { // TweenMax or TimelineMax Object?
14581				_tween.repeat(-1);
14582				_tween.yoyo(TweenObject.yoyo());
14583			}
14584			// Some tween validations and debugging helpers
14585
14586			if (Scene.tweenChanges() && !_tween.tweenTo) {
14587				log(2, "WARNING: tweenChanges will only work if the TimelineMax object is available for ScrollMagic.");
14588			}
14589
14590			// check if there are position tweens defined for the trigger and warn about it :)
14591			if (_tween && Scene.controller() && Scene.triggerElement() && Scene.loglevel() >= 2) { // controller is needed to know scroll direction.
14592				var
14593					triggerTweens = Tween.getTweensOf(Scene.triggerElement()),
14594					vertical = Scene.controller().info("vertical");
14595				triggerTweens.forEach(function (value, index) {
14596					var
14597						tweenvars = value.vars.css || value.vars,
14598						condition = vertical ? (tweenvars.top !== undefined || tweenvars.bottom !== undefined) : (tweenvars.left !== undefined || tweenvars.right !== undefined);
14599					if (condition) {
14600						log(2, "WARNING: Tweening the position of the trigger element affects the scene timing and should be avoided!");
14601						return false;
14602					}
14603				});
14604			}
14605
14606			// warn about tween overwrites, when an element is tweened multiple times
14607			if (parseFloat(TweenLite.version) >= 1.14) { // onOverwrite only present since GSAP v1.14.0
14608				var
14609					list = _tween.getChildren ? _tween.getChildren(true, true, false) : [_tween], // get all nested tween objects
14610					newCallback = function () {
14611						log(2, "WARNING: tween was overwritten by another. To learn how to avoid this issue see here: https://github.com/janpaepke/ScrollMagic/wiki/WARNING:-tween-was-overwritten-by-another");
14612					};
14613				for (var i = 0, thisTween, oldCallback; i < list.length; i++) {
14614					/*jshint loopfunc: true */
14615					thisTween = list[i];
14616					if (oldCallback !== newCallback) { // if tweens is added more than once
14617						oldCallback = thisTween.vars.onOverwrite;
14618						thisTween.vars.onOverwrite = function () {
14619							if (oldCallback) {
14620								oldCallback.apply(this, arguments);
14621							}
14622							newCallback.apply(this, arguments);
14623						};
14624					}
14625				}
14626			}
14627			log(3, "added tween");
14628
14629			updateTweenProgress();
14630			return Scene;
14631		};
14632
14633		/**
14634		 * Remove the tween from the scene.  
14635		 * This will terminate the control of the Scene over the tween.
14636		 *
14637		 * Using the reset option you can decide if the tween should remain in the current state or be rewound to set the target elements back to the state they were in before the tween was added to the scene.
14638		 * @memberof! animation.GSAP#
14639		 *
14640		 * @example
14641		 * // remove the tween from the scene without resetting it
14642		 * scene.removeTween();
14643		 *
14644		 * // remove the tween from the scene and reset it to initial position
14645		 * scene.removeTween(true);
14646		 *
14647		 * @param {boolean} [reset=false] - If `true` the tween will be reset to its initial values.
14648		 * @returns {Scene} Parent object for chaining.
14649		 */
14650		Scene.removeTween = function (reset) {
14651			if (_tween) {
14652				if (reset) {
14653					_tween.progress(0).pause();
14654				}
14655				_tween.kill();
14656				_tween = undefined;
14657				log(3, "removed tween (reset: " + (reset ? "true" : "false") + ")");
14658			}
14659			return Scene;
14660		};
14661
14662	});
14663}));;
14664/*!
14665 * ScrollMagic v2.0.7 (2019-05-07)
14666 * The javascript library for magical scroll interactions.
14667 * (c) 2019 Jan Paepke (@janpaepke)
14668 * Project Website: http://scrollmagic.io
14669 * 
14670 * @version 2.0.7
14671 * @license Dual licensed under MIT license and GPL.
14672 * @author Jan Paepke - [email protected]
14673 *
14674 * @file ScrollMagic Velocity Animation Plugin.
14675 *
14676 * requires: velocity ~1.2
14677 * Powered by VelocityJS: http://VelocityJS.org
14678 * Velocity is published under MIT license.
14679 */
14680/**
14681 * This plugin is meant to be used in conjunction with the Velocity animation framework.  
14682 * It offers an easy API to __trigger__ Velocity animations.
14683 *
14684 * With the current version of Velocity scrollbound animations (scenes with duration) are not supported.  
14685 * This feature will be added as soon as Velocity provides the appropriate API.
14686 * 
14687 * To have access to this extension, please include `plugins/animation.velocity.js`.
14688 * @requires {@link http://julian.com/research/velocity/|Velocity ~1.2.0}
14689 * @mixin animation.Velocity
14690 */
14691(function (root, factory) {
14692	if (typeof define === 'function' && define.amd) {
14693		// AMD. Register as an anonymous module.
14694		define(['ScrollMagic', 'velocity'], factory);
14695	} else if (typeof exports === 'object') {
14696		// CommonJS
14697		factory(require('scrollmagic'), require('velocity'));
14698	} else {
14699		// Browser globals
14700		factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic), root.Velocity || (root.jQuery && root.jQuery.Velocity));
14701	}
14702}(this, function (ScrollMagic, velocity) {
14703	"use strict";
14704	var NAMESPACE = "animation.velocity";
14705
14706	var
14707		console = window.console || {},
14708		err = Function.prototype.bind.call(console.error || console.log || function () {}, console);
14709	if (!ScrollMagic) {
14710		err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs.");
14711	}
14712	if (!velocity) {
14713		err("(" + NAMESPACE + ") -> ERROR: Velocity could not be found. Please make sure it's loaded before ScrollMagic or use an asynchronous loader like requirejs.");
14714	}
14715
14716	var autoindex = 0;
14717
14718	ScrollMagic.Scene.extend(function () {
14719		var
14720			Scene = this,
14721			_util = ScrollMagic._util,
14722			_currentProgress = 0,
14723			_elems,
14724			_properties,
14725			_options,
14726			_dataID; // used to identify element data related to this scene, will be defined everytime a new velocity animation is added
14727
14728		var log = function () {
14729			if (Scene._log) { // not available, when main source minified
14730				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->");
14731				Scene._log.apply(this, arguments);
14732			}
14733		};
14734
14735		// set listeners
14736		Scene.on("progress.plugin_velocity", function () {
14737			updateAnimationProgress();
14738		});
14739		Scene.on("destroy.plugin_velocity", function (e) {
14740			Scene.off("*.plugin_velocity");
14741			Scene.removeVelocity(e.reset);
14742		});
14743
14744		var animate = function (elem, properties, options) {
14745			if (_util.type.Array(elem)) {
14746				elem.forEach(function (elem) {
14747					animate(elem, properties, options);
14748				});
14749			} else {
14750				// set reverse values
14751				if (!velocity.Utilities.data(elem, _dataID)) {
14752					velocity.Utilities.data(elem, _dataID, {
14753						reverseProps: _util.css(elem, Object.keys(_properties))
14754					});
14755				}
14756				// animate
14757				velocity(elem, properties, options);
14758				if (options.queue !== undefined) {
14759					velocity.Utilities.dequeue(elem, options.queue);
14760				}
14761			}
14762		};
14763		var reverse = function (elem, options) {
14764			if (_util.type.Array(elem)) {
14765				elem.forEach(function (elem) {
14766					reverse(elem, options);
14767				});
14768			} else {
14769				var data = velocity.Utilities.data(elem, _dataID);
14770				if (data && data.reverseProps) {
14771					velocity(elem, data.reverseProps, options);
14772					if (options.queue !== undefined) {
14773						velocity.Utilities.dequeue(elem, options.queue);
14774					}
14775				}
14776			}
14777		};
14778
14779		/**
14780		 * Update the tween progress to current position.
14781		 * @private
14782		 */
14783		var updateAnimationProgress = function () {
14784			if (_elems) {
14785				var progress = Scene.progress();
14786				if (progress != _currentProgress) { // do we even need to update the progress?
14787					if (Scene.duration() === 0) {
14788						// play the animation
14789						if (progress > 0) { // play forward
14790							animate(_elems, _properties, _options);
14791						} else { // play reverse
14792							reverse(_elems, _options);
14793							// velocity(_elems, _propertiesReverse, _options);
14794							// velocity("reverse");
14795						}
14796					} else {
14797						// TODO: Scrollbound animations not supported yet...
14798					}
14799					_currentProgress = progress;
14800				}
14801			}
14802		};
14803
14804		/**
14805		 * Add a Velocity animation to the scene.  
14806		 * The method accepts the same parameters as Velocity, with the first parameter being the target element.
14807		 *
14808		 * To gain better understanding, check out the [Velocity example](../examples/basic/simple_velocity.html).
14809		 * @memberof! animation.Velocity#
14810		 *
14811		 * @example
14812		 * // trigger a Velocity animation
14813		 * scene.setVelocity("#myElement", {opacity: 0.5}, {duration: 1000, easing: "linear"});
14814		 *
14815		 * @param {(object|string)} elems - One or more Dom Elements or a Selector that should be used as the target of the animation.
14816		 * @param {object} properties - The CSS properties that should be animated.
14817		 * @param {object} options - Options for the animation, like duration or easing.
14818		 * @returns {Scene} Parent object for chaining.
14819		 */
14820		Scene.setVelocity = function (elems, properties, options) {
14821			if (_elems) { // kill old ani?
14822				Scene.removeVelocity();
14823			}
14824
14825			_elems = _util.get.elements(elems);
14826			_properties = properties || {};
14827			_options = options || {};
14828			_dataID = "ScrollMagic." + NAMESPACE + "[" + (autoindex++) + "]";
14829
14830			if (_options.queue !== undefined) {
14831				// we'll use the queue to identify the animation. When defined it will always stop the previously running one.
14832				// if undefined the animation will always fully run, as is expected.
14833				// defining anything other than 'false' as the que doesn't make much sense, because ScrollMagic takes control over the trigger.
14834				// thus it is also overwritten.
14835				_options.queue = _dataID + "_queue";
14836			}
14837
14838			var checkDuration = function () {
14839				if (Scene.duration() !== 0) {
14840					log(1, "ERROR: The Velocity animation plugin does not support scrollbound animations (scenes with duration) yet.");
14841				}
14842			};
14843			Scene.on("change.plugin_velocity", function (e) {
14844				if (e.what == 'duration') {
14845					checkDuration();
14846				}
14847			});
14848			checkDuration();
14849			log(3, "added animation");
14850
14851			updateAnimationProgress();
14852			return Scene;
14853		};
14854		/**
14855		 * Remove the animation from the scene.  
14856		 * This will stop the scene from triggering the animation.
14857		 *
14858		 * Using the reset option you can decide if the animation should remain in the current state or be rewound to set the target elements back to the state they were in before the animation was added to the scene.
14859		 * @memberof! animation.Velocity#
14860		 *
14861		 * @example
14862		 * // remove the animation from the scene without resetting it
14863		 * scene.removeVelocity();
14864		 *
14865		 * // remove the animation from the scene and reset the elements to initial state
14866		 * scene.removeVelocity(true);
14867		 *
14868		 * @param {boolean} [reset=false] - If `true` the animation will rewound.
14869		 * @returns {Scene} Parent object for chaining.
14870		 */
14871		Scene.removeVelocity = function (reset) {
14872			if (_elems) {
14873				// stop running animations
14874				if (_options.queue !== undefined) {
14875					velocity(_elems, "stop", _options.queue);
14876				}
14877				if (reset) {
14878					reverse(_elems, {
14879						duration: 0
14880					});
14881				}
14882
14883				_elems.forEach(function (elem) {
14884					velocity.Utilities.removeData(elem, _dataID);
14885				});
14886				_elems = _properties = _options = _dataID = undefined;
14887			}
14888			return Scene;
14889		};
14890	});
14891}));;
14892/*!
14893 * ScrollMagic v2.0.7 (2019-05-07)
14894 * The javascript library for magical scroll interactions.
14895 * (c) 2019 Jan Paepke (@janpaepke)
14896 * Project Website: http://scrollmagic.io
14897 * 
14898 * @version 2.0.7
14899 * @license Dual licensed under MIT license and GPL.
14900 * @author Jan Paepke - [email protected]
14901 *
14902 * @file Debug Extension for ScrollMagic.
14903 */
14904/**
14905 * This plugin was formerly known as the ScrollMagic debug extension.
14906 *
14907 * It enables you to add visual indicators to your page, to be able to see exactly when a scene is triggered.
14908 *
14909 * To have access to this extension, please include `plugins/debug.addIndicators.js`.
14910 * @mixin debug.addIndicators
14911 */
14912(function (root, factory) {
14913	if (typeof define === 'function' && define.amd) {
14914		// AMD. Register as an anonymous module.
14915		define(['ScrollMagic'], factory);
14916	} else if (typeof exports === 'object') {
14917		// CommonJS
14918		factory(require('scrollmagic'));
14919	} else {
14920		// no browser global export needed, just execute
14921		factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic));
14922	}
14923}(this, function (ScrollMagic) {
14924	"use strict";
14925	var NAMESPACE = "debug.addIndicators";
14926
14927	var
14928		console = window.console || {},
14929		err = Function.prototype.bind.call(console.error || console.log || function () {}, console);
14930	if (!ScrollMagic) {
14931		err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs.");
14932	}
14933
14934	// plugin settings
14935	var
14936		FONT_SIZE = "0.85em",
14937		ZINDEX = "9999",
14938		EDGE_OFFSET = 15; // minimum edge distance, added to indentation
14939
14940	// overall vars
14941	var
14942		_util = ScrollMagic._util,
14943		_autoindex = 0;
14944
14945
14946
14947	ScrollMagic.Scene.extend(function () {
14948		var
14949			Scene = this,
14950			_indicator;
14951
14952		var log = function () {
14953			if (Scene._log) { // not available, when main source minified
14954				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->");
14955				Scene._log.apply(this, arguments);
14956			}
14957		};
14958
14959		/**
14960		 * Add visual indicators for a ScrollMagic.Scene.  
14961		 * @memberof! debug.addIndicators#
14962		 *
14963		 * @example
14964		 * // add basic indicators
14965		 * scene.addIndicators()
14966		 *
14967		 * // passing options
14968		 * scene.addIndicators({name: "pin scene", colorEnd: "#FFFFFF"});
14969		 *
14970		 * @param {object} [options] - An object containing one or more options for the indicators.
14971		 * @param {(string|object)} [options.parent] - A selector, DOM Object or a jQuery object that the indicators should be added to.  
14972		 														 														 If undefined, the controller's container will be used.
14973		 * @param {number} [options.name=""] - This string will be displayed at the start and end indicators of the scene for identification purposes. If no name is supplied an automatic index will be used.
14974		 * @param {number} [options.indent=0] - Additional position offset for the indicators (useful, when having multiple scenes starting at the same position).
14975		 * @param {string} [options.colorStart=green] - CSS color definition for the start indicator.
14976		 * @param {string} [options.colorEnd=red] - CSS color definition for the end indicator.
14977		 * @param {string} [options.colorTrigger=blue] - CSS color definition for the trigger indicator.
14978		 */
14979		Scene.addIndicators = function (options) {
14980			if (!_indicator) {
14981				var
14982					DEFAULT_OPTIONS = {
14983						name: "",
14984						indent: 0,
14985						parent: undefined,
14986						colorStart: "green",
14987						colorEnd: "red",
14988						colorTrigger: "blue",
14989					};
14990
14991				options = _util.extend({}, DEFAULT_OPTIONS, options);
14992
14993				_autoindex++;
14994				_indicator = new Indicator(Scene, options);
14995
14996				Scene.on("add.plugin_addIndicators", _indicator.add);
14997				Scene.on("remove.plugin_addIndicators", _indicator.remove);
14998				Scene.on("destroy.plugin_addIndicators", Scene.removeIndicators);
14999
15000				// it the scene already has a controller we can start right away.
15001				if (Scene.controller()) {
15002					_indicator.add();
15003				}
15004			}
15005			return Scene;
15006		};
15007
15008		/**
15009		 * Removes visual indicators from a ScrollMagic.Scene.
15010		 * @memberof! debug.addIndicators#
15011		 *
15012		 * @example
15013		 * // remove previously added indicators
15014		 * scene.removeIndicators()
15015		 *
15016		 */
15017		Scene.removeIndicators = function () {
15018			if (_indicator) {
15019				_indicator.remove();
15020				this.off("*.plugin_addIndicators");
15021				_indicator = undefined;
15022			}
15023			return Scene;
15024		};
15025
15026	});
15027
15028
15029	/*
15030	 * ----------------------------------------------------------------
15031	 * Extension for controller to store and update related indicators
15032	 * ----------------------------------------------------------------
15033	 */
15034	// add option to globally auto-add indicators to scenes
15035	/**
15036	 * Every ScrollMagic.Controller instance now accepts an additional option.  
15037	 * See {@link ScrollMagic.Controller} for a complete list of the standard options.
15038	 * @memberof! debug.addIndicators#
15039	 * @method new ScrollMagic.Controller(options)
15040	 * @example
15041	 * // make a controller and add indicators to all scenes attached
15042	 * var controller = new ScrollMagic.Controller({addIndicators: true});
15043	 * // this scene will automatically have indicators added to it
15044	 * new ScrollMagic.Scene()
15045	 *                .addTo(controller);
15046	 *
15047	 * @param {object} [options] - Options for the Controller.
15048	 * @param {boolean} [options.addIndicators=false] - If set to `true` every scene that is added to the controller will automatically get indicators added to it.
15049	 */
15050	ScrollMagic.Controller.addOption("addIndicators", false);
15051	// extend Controller
15052	ScrollMagic.Controller.extend(function () {
15053		var
15054			Controller = this,
15055			_info = Controller.info(),
15056			_container = _info.container,
15057			_isDocument = _info.isDocument,
15058			_vertical = _info.vertical,
15059			_indicators = { // container for all indicators and methods
15060				groups: []
15061			};
15062
15063		var log = function () {
15064			if (Controller._log) { // not available, when main source minified
15065				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->");
15066				Controller._log.apply(this, arguments);
15067			}
15068		};
15069		if (Controller._indicators) {
15070			log(2, "WARNING: Scene already has a property '_indicators', which will be overwritten by plugin.");
15071		}
15072
15073		// add indicators container
15074		this._indicators = _indicators;
15075		/*
15076			needed updates:
15077			+++++++++++++++
15078			start/end position on scene shift (handled in Indicator class)
15079			trigger parameters on triggerHook value change (handled in Indicator class)
15080			bounds position on container scroll or resize (to keep alignment to bottom/right)
15081			trigger position on container resize, window resize (if container isn't document) and window scroll (if container isn't document)
15082		*/
15083
15084		// event handler for when associated bounds markers need to be repositioned
15085		var handleBoundsPositionChange = function () {
15086			_indicators.updateBoundsPositions();
15087		};
15088
15089		// event handler for when associated trigger groups need to be repositioned
15090		var handleTriggerPositionChange = function () {
15091			_indicators.updateTriggerGroupPositions();
15092		};
15093
15094		_container.addEventListener("resize", handleTriggerPositionChange);
15095		if (!_isDocument) {
15096			window.addEventListener("resize", handleTriggerPositionChange);
15097			window.addEventListener("scroll", handleTriggerPositionChange);
15098		}
15099		// update all related bounds containers
15100		_container.addEventListener("resize", handleBoundsPositionChange);
15101		_container.addEventListener("scroll", handleBoundsPositionChange);
15102
15103
15104		// updates the position of the bounds container to aligned to the right for vertical containers and to the bottom for horizontal
15105		this._indicators.updateBoundsPositions = function (specificIndicator) {
15106			var // constant for all bounds
15107				groups = specificIndicator ? [_util.extend({}, specificIndicator.triggerGroup, {
15108					members: [specificIndicator]
15109				})] : // create a group with only one element
15110				_indicators.groups, // use all
15111				g = groups.length,
15112				css = {},
15113				paramPos = _vertical ? "left" : "top",
15114				paramDimension = _vertical ? "width" : "height",
15115				edge = _vertical ?
15116				_util.get.scrollLeft(_container) + _util.get.width(_container) - EDGE_OFFSET :
15117				_util.get.scrollTop(_container) + _util.get.height(_container) - EDGE_OFFSET,
15118				b, triggerSize, group;
15119			while (g--) { // group loop
15120				group = groups[g];
15121				b = group.members.length;
15122				triggerSize = _util.get[paramDimension](group.element.firstChild);
15123				while (b--) { // indicators loop
15124					css[paramPos] = edge - triggerSize;
15125					_util.css(group.members[b].bounds, css);
15126				}
15127			}
15128		};
15129
15130		// updates the positions of all trigger groups attached to a controller or a specific one, if provided
15131		this._indicators.updateTriggerGroupPositions = function (specificGroup) {
15132			var // constant vars
15133				groups = specificGroup ? [specificGroup] : _indicators.groups,
15134				i = groups.length,
15135				container = _isDocument ? document.body : _container,
15136				containerOffset = _isDocument ? {
15137					top: 0,
15138					left: 0
15139				} : _util.get.offset(container, true),
15140				edge = _vertical ?
15141				_util.get.width(_container) - EDGE_OFFSET :
15142				_util.get.height(_container) - EDGE_OFFSET,
15143				paramDimension = _vertical ? "width" : "height",
15144				paramTransform = _vertical ? "Y" : "X";
15145			var // changing vars
15146				group,
15147				elem,
15148				pos,
15149				elemSize,
15150				transform;
15151			while (i--) {
15152				group = groups[i];
15153				elem = group.element;
15154				pos = group.triggerHook * Controller.info("size");
15155				elemSize = _util.get[paramDimension](elem.firstChild.firstChild);
15156				transform = pos > elemSize ? "translate" + paramTransform + "(-100%)" : "";
15157
15158				_util.css(elem, {
15159					top: containerOffset.top + (_vertical ? pos : edge - group.members[0].options.indent),
15160					left: containerOffset.left + (_vertical ? edge - group.members[0].options.indent : pos)
15161				});
15162				_util.css(elem.firstChild.firstChild, {
15163					"-ms-transform": transform,
15164					"-webkit-transform": transform,
15165					"transform": transform
15166				});
15167			}
15168		};
15169
15170		// updates the label for the group to contain the name, if it only has one member
15171		this._indicators.updateTriggerGroupLabel = function (group) {
15172			var
15173				text = "trigger" + (group.members.length > 1 ? "" : " " + group.members[0].options.name),
15174				elem = group.element.firstChild.firstChild,
15175				doUpdate = elem.textContent !== text;
15176			if (doUpdate) {
15177				elem.textContent = text;
15178				if (_vertical) { // bounds position is dependent on text length, so update
15179					_indicators.updateBoundsPositions();
15180				}
15181			}
15182		};
15183
15184		// add indicators if global option is set
15185		this.addScene = function (newScene) {
15186
15187			if (this._options.addIndicators && newScene instanceof ScrollMagic.Scene && newScene.controller() === Controller) {
15188				newScene.addIndicators();
15189			}
15190			// call original destroy method
15191			this.$super.addScene.apply(this, arguments);
15192		};
15193
15194		// remove all previously set listeners on destroy
15195		this.destroy = function () {
15196			_container.removeEventListener("resize", handleTriggerPositionChange);
15197			if (!_isDocument) {
15198				window.removeEventListener("resize", handleTriggerPositionChange);
15199				window.removeEventListener("scroll", handleTriggerPositionChange);
15200			}
15201			_container.removeEventListener("resize", handleBoundsPositionChange);
15202			_container.removeEventListener("scroll", handleBoundsPositionChange);
15203			// call original destroy method
15204			this.$super.destroy.apply(this, arguments);
15205		};
15206		return Controller;
15207
15208	});
15209
15210	/*
15211	 * ----------------------------------------------------------------
15212	 * Internal class for the construction of Indicators
15213	 * ----------------------------------------------------------------
15214	 */
15215	var Indicator = function (Scene, options) {
15216		var
15217			Indicator = this,
15218			_elemBounds = TPL.bounds(),
15219			_elemStart = TPL.start(options.colorStart),
15220			_elemEnd = TPL.end(options.colorEnd),
15221			_boundsContainer = options.parent && _util.get.elements(options.parent)[0],
15222			_vertical,
15223			_ctrl;
15224
15225		var log = function () {
15226			if (Scene._log) { // not available, when main source minified
15227				Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->");
15228				Scene._log.apply(this, arguments);
15229			}
15230		};
15231
15232		options.name = options.name || _autoindex;
15233
15234		// prepare bounds elements
15235		_elemStart.firstChild.textContent += " " + options.name;
15236		_elemEnd.textContent += " " + options.name;
15237		_elemBounds.appendChild(_elemStart);
15238		_elemBounds.appendChild(_elemEnd);
15239
15240		// set public variables
15241		Indicator.options = options;
15242		Indicator.bounds = _elemBounds;
15243		// will be set later
15244		Indicator.triggerGroup = undefined;
15245
15246		// add indicators to DOM
15247		this.add = function () {
15248			_ctrl = Scene.controller();
15249			_vertical = _ctrl.info("vertical");
15250
15251			var isDocument = _ctrl.info("isDocument");
15252
15253			if (!_boundsContainer) {
15254				// no parent supplied or doesnt exist
15255				_boundsContainer = isDocument ? document.body : _ctrl.info("container"); // check if window/document (then use body)
15256			}
15257			if (!isDocument && _util.css(_boundsContainer, "position") === 'static') {
15258				// position mode needed for correct positioning of indicators
15259				_util.css(_boundsContainer, {
15260					position: "relative"
15261				});
15262			}
15263
15264			// add listeners for updates
15265			Scene.on("change.plugin_addIndicators", handleTriggerParamsChange);
15266			Scene.on("shift.plugin_addIndicators", handleBoundsParamsChange);
15267
15268			// updates trigger & bounds (will add elements if needed)
15269			updateTriggerGroup();
15270			updateBounds();
15271
15272			setTimeout(function () { // do after all execution is finished otherwise sometimes size calculations are off
15273				_ctrl._indicators.updateBoundsPositions(Indicator);
15274			}, 0);
15275
15276			log(3, "added indicators");
15277		};
15278
15279		// remove indicators from DOM
15280		this.remove = function () {
15281			if (Indicator.triggerGroup) { // if not set there's nothing to remove
15282				Scene.off("change.plugin_addIndicators", handleTriggerParamsChange);
15283				Scene.off("shift.plugin_addIndicators", handleBoundsParamsChange);
15284
15285				if (Indicator.triggerGroup.members.length > 1) {
15286					// just remove from memberlist of old group
15287					var group = Indicator.triggerGroup;
15288					group.members.splice(group.members.indexOf(Indicator), 1);
15289					_ctrl._indicators.updateTriggerGroupLabel(group);
15290					_ctrl._indicators.updateTriggerGroupPositions(group);
15291					Indicator.triggerGroup = undefined;
15292				} else {
15293					// remove complete group
15294					removeTriggerGroup();
15295				}
15296				removeBounds();
15297
15298				log(3, "removed indicators");
15299			}
15300		};
15301
15302		/*
15303		 * ----------------------------------------------------------------
15304		 * internal Event Handlers
15305		 * ----------------------------------------------------------------
15306		 */
15307
15308		// event handler for when bounds params change
15309		var handleBoundsParamsChange = function () {
15310			updateBounds();
15311		};
15312
15313		// event handler for when trigger params change
15314		var handleTriggerParamsChange = function (e) {
15315			if (e.what === "triggerHook") {
15316				updateTriggerGroup();
15317			}
15318		};
15319
15320		/*
15321		 * ----------------------------------------------------------------
15322		 * Bounds (start / stop) management
15323		 * ----------------------------------------------------------------
15324		 */
15325
15326		// adds an new bounds elements to the array and to the DOM
15327		var addBounds = function () {
15328			var v = _ctrl.info("vertical");
15329			// apply stuff we didn't know before...
15330			_util.css(_elemStart.firstChild, {
15331				"border-bottom-width": v ? 1 : 0,
15332				"border-right-width": v ? 0 : 1,
15333				"bottom": v ? -1 : options.indent,
15334				"right": v ? options.indent : -1,
15335				"padding": v ? "0 8px" : "2px 4px",
15336			});
15337			_util.css(_elemEnd, {
15338				"border-top-width": v ? 1 : 0,
15339				"border-left-width": v ? 0 : 1,
15340				"top": v ? "100%" : "",
15341				"right": v ? options.indent : "",
15342				"bottom": v ? "" : options.indent,
15343				"left": v ? "" : "100%",
15344				"padding": v ? "0 8px" : "2px 4px"
15345			});
15346			// append
15347			_boundsContainer.appendChild(_elemBounds);
15348		};
15349
15350		// remove bounds from list and DOM
15351		var removeBounds = function () {
15352			_elemBounds.parentNode.removeChild(_elemBounds);
15353		};
15354
15355		// update the start and end positions of the scene
15356		var updateBounds = function () {
15357			if (_elemBounds.parentNode !== _boundsContainer) {
15358				addBounds(); // Add Bounds elements (start/end)
15359			}
15360			var css = {};
15361			css[_vertical ? "top" : "left"] = Scene.triggerPosition();
15362			css[_vertical ? "height" : "width"] = Scene.duration();
15363			_util.css(_elemBounds, css);
15364			_util.css(_elemEnd, {
15365				display: Scene.duration() > 0 ? "" : "none"
15366			});
15367		};
15368
15369		/*
15370		 * ----------------------------------------------------------------
15371		 * trigger and trigger group management
15372		 * ----------------------------------------------------------------
15373		 */
15374
15375		// adds an new trigger group to the array and to the DOM
15376		var addTriggerGroup = function () {
15377			var triggerElem = TPL.trigger(options.colorTrigger); // new trigger element
15378			var css = {};
15379			css[_vertical ? "right" : "bottom"] = 0;
15380			css[_vertical ? "border-top-width" : "border-left-width"] = 1;
15381			_util.css(triggerElem.firstChild, css);
15382			_util.css(triggerElem.firstChild.firstChild, {
15383				padding: _vertical ? "0 8px 3px 8px" : "3px 4px"
15384			});
15385			document.body.appendChild(triggerElem); // directly add to body
15386			var newGroup = {
15387				triggerHook: Scene.triggerHook(),
15388				element: triggerElem,
15389				members: [Indicator]
15390			};
15391			_ctrl._indicators.groups.push(newGroup);
15392			Indicator.triggerGroup = newGroup;
15393			// update right away
15394			_ctrl._indicators.updateTriggerGroupLabel(newGroup);
15395			_ctrl._indicators.updateTriggerGroupPositions(newGroup);
15396		};
15397
15398		var removeTriggerGroup = function () {
15399			_ctrl._indicators.groups.splice(_ctrl._indicators.groups.indexOf(Indicator.triggerGroup), 1);
15400			Indicator.triggerGroup.element.parentNode.removeChild(Indicator.triggerGroup.element);
15401			Indicator.triggerGroup = undefined;
15402		};
15403
15404		// updates the trigger group -> either join existing or add new one
15405		/*	
15406		 * Logic:
15407		 * 1 if a trigger group exist, check if it's in sync with Scene settings – if so, nothing else needs to happen
15408		 * 2 try to find an existing one that matches Scene parameters
15409		 * 	 2.1 If a match is found check if already assigned to an existing group
15410		 *			 If so:
15411		 *       A: it was the last member of existing group -> kill whole group
15412		 *       B: the existing group has other members -> just remove from member list
15413		 *	 2.2 Assign to matching group
15414		 * 3 if no new match could be found, check if assigned to existing group
15415		 *   A: yes, and it's the only member -> just update parameters and positions and keep using this group
15416		 *   B: yes but there are other members -> remove from member list and create a new one
15417		 *   C: no, so create a new one
15418		 */
15419		var updateTriggerGroup = function () {
15420			var
15421				triggerHook = Scene.triggerHook(),
15422				closeEnough = 0.0001;
15423
15424			// Have a group, check if it still matches
15425			if (Indicator.triggerGroup) {
15426				if (Math.abs(Indicator.triggerGroup.triggerHook - triggerHook) < closeEnough) {
15427					// _util.log(0, "trigger", options.name, "->", "no need to change, still in sync");
15428					return; // all good
15429				}
15430			}
15431			// Don't have a group, check if a matching one exists
15432			// _util.log(0, "trigger", options.name, "->", "out of sync!");
15433			var
15434				groups = _ctrl._indicators.groups,
15435				group,
15436				i = groups.length;
15437			while (i--) {
15438				group = groups[i];
15439				if (Math.abs(group.triggerHook - triggerHook) < closeEnough) {
15440					// found a match!
15441					// _util.log(0, "trigger", options.name, "->", "found match");
15442					if (Indicator.triggerGroup) { // do I have an old group that is out of sync?
15443						if (Indicator.triggerGroup.members.length === 1) { // is it the only remaining group?
15444							// _util.log(0, "trigger", options.name, "->", "kill");
15445							// was the last member, remove the whole group
15446							removeTriggerGroup();
15447						} else {
15448							Indicator.triggerGroup.members.splice(Indicator.triggerGroup.members.indexOf(Indicator), 1); // just remove from memberlist of old group
15449							_ctrl._indicators.updateTriggerGroupLabel(Indicator.triggerGroup);
15450							_ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup);
15451							// _util.log(0, "trigger", options.name, "->", "removing from previous member list");
15452						}
15453					}
15454					// join new group
15455					group.members.push(Indicator);
15456					Indicator.triggerGroup = group;
15457					_ctrl._indicators.updateTriggerGroupLabel(group);
15458					return;
15459				}
15460			}
15461
15462			// at this point I am obviously out of sync and don't match any other group
15463			if (Indicator.triggerGroup) {
15464				if (Indicator.triggerGroup.members.length === 1) {
15465					// _util.log(0, "trigger", options.name, "->", "updating existing");
15466					// out of sync but i'm the only member => just change and update
15467					Indicator.triggerGroup.triggerHook = triggerHook;
15468					_ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup);
15469					return;
15470				} else {
15471					// _util.log(0, "trigger", options.name, "->", "removing from previous member list");
15472					Indicator.triggerGroup.members.splice(Indicator.triggerGroup.members.indexOf(Indicator), 1); // just remove from memberlist of old group
15473					_ctrl._indicators.updateTriggerGroupLabel(Indicator.triggerGroup);
15474					_ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup);
15475					Indicator.triggerGroup = undefined; // need a brand new group...
15476				}
15477			}
15478			// _util.log(0, "trigger", options.name, "->", "add a new one");
15479			// did not find any match, make new trigger group
15480			addTriggerGroup();
15481		};
15482	};
15483
15484	/*
15485	 * ----------------------------------------------------------------
15486	 * Templates for the indicators
15487	 * ----------------------------------------------------------------
15488	 */
15489	var TPL = {
15490		start: function (color) {
15491			// inner element (for bottom offset -1, while keeping top position 0)
15492			var inner = document.createElement("div");
15493			inner.textContent = "start";
15494			_util.css(inner, {
15495				position: "absolute",
15496				overflow: "visible",
15497				"border-width": 0,
15498				"border-style": "solid",
15499				color: color,
15500				"border-color": color
15501			});
15502			var e = document.createElement('div');
15503			// wrapper
15504			_util.css(e, {
15505				position: "absolute",
15506				overflow: "visible",
15507				width: 0,
15508				height: 0
15509			});
15510			e.appendChild(inner);
15511			return e;
15512		},
15513		end: function (color) {
15514			var e = document.createElement('div');
15515			e.textContent = "end";
15516			_util.css(e, {
15517				position: "absolute",
15518				overflow: "visible",
15519				"border-width": 0,
15520				"border-style": "solid",
15521				color: color,
15522				"border-color": color
15523			});
15524			return e;
15525		},
15526		bounds: function () {
15527			var e = document.createElement('div');
15528			_util.css(e, {
15529				position: "absolute",
15530				overflow: "visible",
15531				"white-space": "nowrap",
15532				"pointer-events": "none",
15533				"font-size": FONT_SIZE
15534			});
15535			e.style.zIndex = ZINDEX;
15536			return e;
15537		},
15538		trigger: function (color) {
15539			// inner to be above or below line but keep position
15540			var inner = document.createElement('div');
15541			inner.textContent = "trigger";
15542			_util.css(inner, {
15543				position: "relative",
15544			});
15545			// inner wrapper for right: 0 and main element has no size
15546			var w = document.createElement('div');
15547			_util.css(w, {
15548				position: "absolute",
15549				overflow: "visible",
15550				"border-width": 0,
15551				"border-style": "solid",
15552				color: color,
15553				"border-color": color
15554			});
15555			w.appendChild(inner);
15556			// wrapper
15557			var e = document.createElement('div');
15558			_util.css(e, {
15559				position: "fixed",
15560				overflow: "visible",
15561				"white-space": "nowrap",
15562				"pointer-events": "none",
15563				"font-size": FONT_SIZE
15564			});
15565			e.style.zIndex = ZINDEX;
15566			e.appendChild(w);
15567			return e;
15568		},
15569	};
15570
15571}));;
15572/*!
15573 * ScrollMagic v2.0.7 (2019-05-07)
15574 * The javascript library for magical scroll interactions.
15575 * (c) 2019 Jan Paepke (@janpaepke)
15576 * Project Website: http://scrollmagic.io
15577 * 
15578 * @version 2.0.7
15579 * @license Dual licensed under MIT license and GPL.
15580 * @author Jan Paepke - [email protected]
15581 *
15582 * @file ScrollMagic jQuery plugin.
15583 *
15584 * requires: jQuery >=1.11
15585 */
15586/**
15587 * This plugin is meant to be used in conjunction with jQuery.  
15588 * It enables ScrollMagic to make use of jQuery's advanced selector engine (sizzle) for all elements supplied to ScrollMagic objects, like scroll containers or trigger elements.  
15589 * ScrollMagic also accepts jQuery elements for all methods that expect references to DOM elements. Please note, that in most cases the first element of the matched set will be used.
15590 * 
15591 * Additionally it provides the ScrollMagic object within the jQuery namespace, so it can be accessed using `$.ScrollMagic`.
15592 *
15593 * In contrast to most other plugins it does not offer new API additions for ScrollMagic.
15594 *
15595 * To have access to this extension, please include `plugins/jquery.ScrollMagic.js`.
15596 * @example
15597 * // create a new scene making use of jQuery's advanced selector engine
15598 * var scene = new $.ScrollMagic.Scene({
15599 *   triggerElement: "#parent div.trigger[attr='thisone']:not(.notthisone)"
15600 * });
15601 * @requires {@link http://jquery.com/|jQuery >=1.11}
15602 * @mixin framework.jQuery
15603 */
15604(function (root, factory) {
15605	if (typeof define === 'function' && define.amd) {
15606		// AMD. Register as an anonymous module.
15607		define(['ScrollMagic', 'jquery'], factory);
15608	} else if (typeof exports === 'object') {
15609		// CommonJS
15610		factory(require('scrollmagic'), require('jquery'));
15611	} else {
15612		// Browser global
15613		factory(root.ScrollMagic, root.jQuery);
15614	}
15615}(this, function (ScrollMagic, $) {
15616	"use strict";
15617	var NAMESPACE = "jquery.ScrollMagic";
15618
15619	var
15620		console = window.console || {},
15621		err = Function.prototype.bind.call(console.error || console.log || function () {}, console);
15622	if (!ScrollMagic) {
15623		err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs.");
15624	}
15625	if (!$) {
15626		err("(" + NAMESPACE + ") -> ERROR: jQuery could not be found. Please make sure it's loaded before ScrollMagic or use an asynchronous loader like requirejs.");
15627	}
15628
15629	ScrollMagic._util.get.elements = function (selector) {
15630		return $(selector).toArray();
15631	};
15632	ScrollMagic._util.addClass = function (elem, classname) {
15633		$(elem).addClass(classname);
15634	};
15635	ScrollMagic._util.removeClass = function (elem, classname) {
15636		$(elem).removeClass(classname);
15637	};
15638	$.ScrollMagic = ScrollMagic;
15639}));;
15640/*!
15641 * pickadate.js v3.6.4, 2019/05/25
15642 * By Amsul, http://amsul.ca
15643 * Hosted on http://amsul.github.io/pickadate.js
15644 * Licensed under MIT
15645 */
15646
15647(function ( factory ) {
15648
15649    // AMD.
15650    if ( typeof define == 'function' && define.amd )
15651        define( 'picker', ['jquery'], factory )
15652
15653    // Node.js/browserify.
15654    else if ( typeof exports == 'object' )
15655        module.exports = factory( require('jquery') )
15656
15657    // Browser globals.
15658    else if ( typeof window == 'object' )
15659        window.Picker = factory( jQuery )
15660    
15661    else this.Picker = factory( jQuery )
15662
15663}(function( $ ) {
15664
15665var $window = $( window )
15666var $document = $( document )
15667var $html = $( document.documentElement )
15668var supportsTransitions = document.documentElement.style.transition != null
15669
15670
15671/**
15672 * The picker constructor that creates a blank picker.
15673 */
15674function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
15675
15676    // If there’s no element, return the picker constructor.
15677    if ( !ELEMENT ) return PickerConstructor
15678
15679
15680    var
15681        IS_DEFAULT_THEME = false,
15682
15683
15684        // The state of the picker.
15685        STATE = {
15686            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ),
15687            handlingOpen: false,
15688        },
15689
15690
15691        // Merge the defaults and options passed.
15692        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},
15693
15694
15695        // Merge the default classes with the settings classes.
15696        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),
15697
15698
15699        // The element node wrapper into a jQuery object.
15700        $ELEMENT = $( ELEMENT ),
15701
15702
15703        // Pseudo picker constructor.
15704        PickerInstance = function() {
15705            return this.start()
15706        },
15707
15708
15709        // The picker prototype.
15710        P = PickerInstance.prototype = {
15711
15712            constructor: PickerInstance,
15713
15714            $node: $ELEMENT,
15715
15716
15717            /**
15718             * Initialize everything
15719             */
15720            start: function() {
15721
15722                // If it’s already started, do nothing.
15723                if ( STATE && STATE.start ) return P
15724
15725
15726                // Update the picker states.
15727                STATE.methods = {}
15728                STATE.start = true
15729                STATE.open = false
15730                STATE.type = ELEMENT.type
15731
15732
15733                // Confirm focus state, convert into text input to remove UA stylings,
15734                // and set as readonly to prevent keyboard popup.
15735                ELEMENT.autofocus = ELEMENT == getActiveElement()
15736                ELEMENT.readOnly = !SETTINGS.editable
15737                SETTINGS.id = ELEMENT.id = ELEMENT.id || STATE.id
15738                if ( ELEMENT.type != 'text' ) {
15739                    ELEMENT.type = 'text'
15740                }
15741
15742                // Create a new picker component with the settings.
15743                P.component = new COMPONENT(P, SETTINGS)
15744
15745
15746                // Create the picker root and then prepare it.
15747                P.$root = $( '<div class="' + CLASSES.picker + '" id="' + ELEMENT.id + '_root" />' )
15748                prepareElementRoot()
15749
15750
15751                // Create the picker holder and then prepare it.
15752                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )
15753                prepareElementHolder()
15754
15755
15756                // If there’s a format for the hidden input element, create the element.
15757                if ( SETTINGS.formatSubmit ) {
15758                    prepareElementHidden()
15759                }
15760
15761
15762                // Prepare the input element.
15763                prepareElement()
15764
15765
15766                // Insert the hidden input as specified in the settings.
15767                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )
15768                else $ELEMENT.after( P._hidden )
15769
15770
15771                // Insert the root as specified in the settings.
15772                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )
15773                else $ELEMENT.after( P.$root )
15774
15775
15776                // Bind the default component and settings events.
15777                P.on({
15778                    start: P.component.onStart,
15779                    render: P.component.onRender,
15780                    stop: P.component.onStop,
15781                    open: P.component.onOpen,
15782                    close: P.component.onClose,
15783                    set: P.component.onSet
15784                }).on({
15785                    start: SETTINGS.onStart,
15786                    render: SETTINGS.onRender,
15787                    stop: SETTINGS.onStop,
15788                    open: SETTINGS.onOpen,
15789                    close: SETTINGS.onClose,
15790                    set: SETTINGS.onSet
15791                })
15792
15793
15794                // Once we’re all set, check the theme in use.
15795                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )
15796
15797
15798                // If the element has autofocus, open the picker.
15799                if ( ELEMENT.autofocus ) {
15800                    P.open()
15801                }
15802
15803
15804                // Trigger queued the “start” and “render” events.
15805                return P.trigger( 'start' ).trigger( 'render' )
15806            }, //start
15807
15808
15809            /**
15810             * Render a new picker
15811             */
15812            render: function( entireComponent ) {
15813
15814                // Insert a new component holder in the root or box.
15815                if ( entireComponent ) {
15816                    P.$holder = $( createWrappedComponent() )
15817                    prepareElementHolder()
15818                    P.$root.html( P.$holder )
15819                }
15820                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )
15821
15822                // Trigger the queued “render” events.
15823                return P.trigger( 'render' )
15824            }, //render
15825
15826
15827            /**
15828             * Destroy everything
15829             */
15830            stop: function() {
15831
15832                // If it’s already stopped, do nothing.
15833                if ( !STATE.start ) return P
15834
15835                // Then close the picker.
15836                P.close()
15837
15838                // Remove the hidden field.
15839                if ( P._hidden ) {
15840                    P._hidden.parentNode.removeChild( P._hidden )
15841                }
15842
15843                // Remove the root.
15844                P.$root.remove()
15845
15846                // Remove the input class, remove the stored data, and unbind
15847                // the events (after a tick for IE - see `P.close`).
15848                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )
15849                setTimeout( function() {
15850                    $ELEMENT.off( '.' + STATE.id )
15851                }, 0)
15852
15853                // Restore the element state
15854                ELEMENT.type = STATE.type
15855                ELEMENT.readOnly = false
15856
15857                // Trigger the queued “stop” events.
15858                P.trigger( 'stop' )
15859
15860                // Reset the picker states.
15861                STATE.methods = {}
15862                STATE.start = false
15863
15864                return P
15865            }, //stop
15866
15867
15868            /**
15869             * Open up the picker
15870             */
15871            open: function( dontGiveFocus ) {
15872
15873                // If it’s already open, do nothing.
15874                if ( STATE.open ) return P
15875
15876                // Add the “active” class.
15877                $ELEMENT.addClass( CLASSES.active )
15878
15879                // * A Firefox bug, when `html` has `overflow:hidden`, results in
15880                //   killing transitions :(. So add the “opened” state on the next tick.
15881                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
15882                setTimeout( function() {
15883
15884                    // Add the “opened” class to the picker root.
15885                    P.$root.addClass( CLASSES.opened )
15886                    aria( P.$root[0], 'hidden', false )
15887
15888                }, 0 )
15889
15890                // If we have to give focus, bind the element and doc events.
15891                if ( dontGiveFocus !== false ) {
15892
15893                    // Set it as open.
15894                    STATE.open = true
15895
15896                    // Prevent the page from scrolling.
15897                    if ( IS_DEFAULT_THEME ) {
15898                        $('body').
15899                            css( 'overflow', 'hidden' ).
15900                            css( 'padding-right', '+=' + getScrollbarWidth() )
15901                    }
15902
15903                    // Pass focus to the root element’s jQuery object.
15904                    focusPickerOnceOpened()
15905
15906                    // Bind the document events.
15907                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {
15908                        // If the picker is currently midway through processing
15909                        // the opening sequence of events then don't handle clicks
15910                        // on any part of the DOM. This is caused by a bug in Chrome 73
15911                        // where a click event is being generated with the incorrect
15912                        // path in it.
15913                        // In short, if someone does a click that finishes after the
15914                        // new element is created then the path contains only the
15915                        // parent element and not the input element itself.
15916                        if (STATE.handlingOpen) {
15917                          return;
15918                        }
15919
15920                        var target = getRealEventTarget( event, ELEMENT )
15921
15922                        // If the target of the event is not the element, close the picker picker.
15923                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.
15924                        //   Also, for Firefox, a click on an `option` element bubbles up directly
15925                        //   to the doc. So make sure the target wasn't the doc.
15926                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,
15927                        //   which causes the picker to unexpectedly close when right-clicking it. So make
15928                        //   sure the event wasn’t a right-click.
15929                        // * In Chrome 62 and up, password autofill causes a simulated focusin event which
15930                        //   closes the picker.
15931                        if ( ! event.isSimulated && target != ELEMENT && target != document && event.which != 3 ) {
15932
15933                            // If the target was the holder that c
15933overs the screen,
15934                            // keep the element focused to maintain tabindex.
15935                            P.close( target === P.$holder[0] )
15936                        }
15937
15938                    }).on( 'keydown.' + STATE.id, function( event ) {
15939
15940                        var
15941                            // Get the keycode.
15942                            keycode = event.keyCode,
15943
15944                            // Translate that to a selection change.
15945                            keycodeToMove = P.component.key[ keycode ],
15946
15947                            // Grab the target.
15948                            target = getRealEventTarget( event, ELEMENT )
15949
15950
15951                        // On escape, close the picker and give focus.
15952                        if ( keycode == 27 ) {
15953                            P.close( true )
15954                        }
15955
15956
15957                        // Check if there is a key movement or “enter” keypress on the element.
15958                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {
15959
15960                            // Prevent the default action to stop page movement.
15961                            event.preventDefault()
15962
15963                            // Trigger the key movement action.
15964                            if ( keycodeToMove ) {
15965                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )
15966                            }
15967
15968                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.
15969                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {
15970                                P.set( 'select', P.component.item.highlight )
15971                                if ( SETTINGS.closeOnSelect ) {
15972                                    P.close( true )
15973                                }
15974                            }
15975                        }
15976
15977
15978                        // If the target is within the root and “enter” is pressed,
15979                        // prevent the default action and trigger a click on the target instead.
15980                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {
15981                            event.preventDefault()
15982                            target.click()
15983                        }
15984                    })
15985                }
15986
15987                // Trigger the queued “open” events.
15988                return P.trigger( 'open' )
15989            }, //open
15990
15991
15992            /**
15993             * Close the picker
15994             */
15995            close: function( giveFocus ) {
15996
15997                // If we need to give focus, do it before changing states.
15998                if ( giveFocus ) {
15999                    if ( SETTINGS.editable ) {
16000                        ELEMENT.focus()
16001                    }
16002                    else {
16003                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|
16004                        // The focus is triggered *after* the close has completed - causing it
16005                        // to open again. So unbind and rebind the event at the next tick.
16006                        P.$holder.off( 'focus.toOpen' ).focus()
16007                        setTimeout( function() {
16008                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )
16009                        }, 0 )
16010                    }
16011                }
16012
16013                // Remove the “active” class.
16014                $ELEMENT.removeClass( CLASSES.active )
16015
16016                // * A Firefox bug, when `html` has `overflow:hidden`, results in
16017                //   killing transitions :(. So remove the “opened” state on the next tick.
16018                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
16019                setTimeout( function() {
16020
16021                    // Remove the “opened” and “focused” class from the picker root.
16022                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )
16023                    aria( P.$root[0], 'hidden', true )
16024
16025                }, 0 )
16026
16027                // If it’s already closed, do nothing more.
16028                if ( !STATE.open ) return P
16029
16030                // Set it as closed.
16031                STATE.open = false
16032
16033                // Allow the page to scroll.
16034                if ( IS_DEFAULT_THEME ) {
16035                    $('body').
16036                        css( 'overflow', '' ).
16037                        css( 'padding-right', '-=' + getScrollbarWidth() )
16038                }
16039
16040                // Unbind the document events.
16041                $document.off( '.' + STATE.id )
16042
16043                // Trigger the queued “close” events.
16044                return P.trigger( 'close' )
16045            }, //close
16046
16047
16048            /**
16049             * Clear the values
16050             */
16051            clear: function( options ) {
16052                return P.set( 'clear', null, options )
16053            }, //clear
16054
16055
16056            /**
16057             * Set something
16058             */
16059            set: function( thing, value, options ) {
16060
16061                var thingItem, thingValue,
16062                    thingIsObject = $.isPlainObject( thing ),
16063                    thingObject = thingIsObject ? thing : {}
16064
16065                // Make sure we have usable options.
16066                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}
16067
16068                if ( thing ) {
16069
16070                    // If the thing isn’t an object, make it one.
16071                    if ( !thingIsObject ) {
16072                        thingObject[ thing ] = value
16073                    }
16074
16075                    // Go through the things of items to set.
16076                    for ( thingItem in thingObject ) {
16077
16078                        // Grab the value of the thing.
16079                        thingValue = thingObject[ thingItem ]
16080
16081                        // First, if the item exists and there’s a value, set it.
16082                        if ( thingItem in P.component.item ) {
16083                            if ( thingValue === undefined ) thingValue = null
16084                            P.component.set( thingItem, thingValue, options )
16085                        }
16086
16087                        // Then, check to update the element value and broadcast a change.
16088                        if ( ( thingItem == 'select' || thingItem == 'clear' ) && SETTINGS.updateInput ) {
16089                            $ELEMENT.
16090                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).
16091                                trigger( 'change' )
16092                        }
16093                    }
16094
16095                    // Render a new picker.
16096                    P.render()
16097                }
16098
16099                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.
16100                return options.muted ? P : P.trigger( 'set', thingObject )
16101            }, //set
16102
16103
16104            /**
16105             * Get something
16106             */
16107            get: function( thing, format ) {
16108
16109                // Make sure there’s something to get.
16110                thing = thing || 'value'
16111
16112                // If a picker state exists, return that.
16113                if ( STATE[ thing ] != null ) {
16114                    return STATE[ thing ]
16115                }
16116
16117                // Return the submission value, if that.
16118                if ( thing == 'valueSubmit' ) {
16119                    if ( P._hidden ) {
16120                        return P._hidden.value
16121                    }
16122                    thing = 'value'
16123                }
16124
16125                // Return the value, if that.
16126                if ( thing == 'value' ) {
16127                    return ELEMENT.value
16128                }
16129
16130                // Check if a component item exists, return that.
16131                if ( thing in P.component.item ) {
16132                    if ( typeof format == 'string' ) {
16133                        var thingValue = P.component.get( thing )
16134                        return thingValue ?
16135                            PickerConstructor._.trigger(
16136                                P.component.formats.toString,
16137                                P.component,
16138                                [ format, thingValue ]
16139                            ) : ''
16140                    }
16141                    return P.component.get( thing )
16142                }
16143            }, //get
16144
16145
16146
16147            /**
16148             * Bind events on the things.
16149             */
16150            on: function( thing, method, internal ) {
16151
16152                var thingName, thingMethod,
16153                    thingIsObject = $.isPlainObject( thing ),
16154                    thingObject = thingIsObject ? thing : {}
16155
16156                if ( thing ) {
16157
16158                    // If the thing isn’t an object, make it one.
16159                    if ( !thingIsObject ) {
16160                        thingObject[ thing ] = method
16161                    }
16162
16163                    // Go through the things to bind to.
16164                    for ( thingName in thingObject ) {
16165
16166                        // Grab the method of the thing.
16167                        thingMethod = thingObject[ thingName ]
16168
16169                        // If it was an internal binding, prefix it.
16170                        if ( internal ) {
16171                            thingName = '_' + thingName
16172                        }
16173
16174                        // Make sure the thing methods collection exists.
16175                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []
16176
16177                        // Add the method to the relative method collection.
16178                        STATE.methods[ thingName ].push( thingMethod )
16179                    }
16180                }
16181
16182                return P
16183            }, //on
16184
16185
16186
16187            /**
16188             * Unbind events on the things.
16189             */
16190            off: function() {
16191                var i, thingName,
16192                    names = arguments;
16193                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {
16194                    thingName = names[i]
16195                    if ( thingName in STATE.methods ) {
16196                        delete STATE.methods[thingName]
16197                    }
16198                }
16199                return P
16200            },
16201
16202
16203            /**
16204             * Fire off method events.
16205             */
16206            trigger: function( name, data ) {
16207                var _trigger = function( name ) {
16208                    var methodList = STATE.methods[ name ]
16209                    if ( methodList ) {
16210                        methodList.map( function( method ) {
16211                            PickerConstructor._.trigger( method, P, [ data ] )
16212                        })
16213                    }
16214                }
16215                _trigger( '_' + name )
16216                _trigger( name )
16217                return P
16218            }
16218 //trigger
16219        } //PickerInstance.prototype
16220
16221
16222    /**
16223     * Wrap the picker holder components together.
16224     */
16225    function createWrappedComponent() {
16226
16227        // Create a picker wrapper holder
16228        return PickerConstructor._.node( 'div',
16229
16230            // Create a picker wrapper node
16231            PickerConstructor._.node( 'div',
16232
16233                // Create a picker frame
16234                PickerConstructor._.node( 'div',
16235
16236                    // Create a picker box node
16237                    PickerConstructor._.node( 'div',
16238
16239                        // Create the components nodes.
16240                        P.component.nodes( STATE.open ),
16241
16242                        // The picker box class
16243                        CLASSES.box
16244                    ),
16245
16246                    // Picker wrap class
16247                    CLASSES.wrap
16248                ),
16249
16250                // Picker frame class
16251                CLASSES.frame
16252            ),
16253
16254            // Picker holder class
16255            CLASSES.holder,
16256
16257            'tabindex="-1"'
16258        ) //endreturn
16259    } //createWrappedComponent
16260
16261    /**
16262     * Prepare the input element with all bindings.
16263     */
16264    function prepareElement() {
16265
16266        $ELEMENT.
16267
16268            // Store the picker data by component name.
16269            data(NAME, P).
16270
16271            // Add the “input” class name.
16272            addClass(CLASSES.input).
16273
16274            // If there’s a `data-value`, update the value of the element.
16275            val( $ELEMENT.data('value') ?
16276                P.get('select', SETTINGS.format) :
16277                ELEMENT.value
16278            ).
16279
16280            // On focus/click, open the picker.
16281            on( 'focus.' + STATE.id + ' click.' + STATE.id,
16282                function(event) {
16283                    event.preventDefault()
16284                    P.open()
16285                }
16286            )
16287
16288            // Mousedown handler to capture when the user starts interacting
16289            // with the picker. This is used in working around a bug in Chrome 73.
16290            .on('mousedown', function() {
16291              STATE.handlingOpen = true;
16292              var handler = function() {
16293                // By default mouseup events are fired before a click event.
16294                // By using a timeout we can force the mouseup to be handled
16295                // after the corresponding click event is handled.
16296                setTimeout(function() {
16297                  $(document).off('mouseup', handler);
16298                  STATE.handlingOpen = false;
16299                }, 0);
16300              };
16301              $(document).on('mouseup', handler);
16302            });
16303
16304
16305        // Only bind keydown events if the element isn’t editable.
16306        if ( !SETTINGS.editable ) {
16307
16308            $ELEMENT.
16309
16310                // Handle keyboard event based on the picker being opened or not.
16311                on( 'keydown.' + STATE.id, handleKeydownEvent )
16312        }
16313
16314
16315        // Update the aria attributes.
16316        aria(ELEMENT, {
16317            haspopup: true,
16318            readonly: false,
16319            owns: ELEMENT.id + '_root'
16320        })
16321    }
16322
16323
16324    /**
16325     * Prepare the root picker element with all bindings.
16326     */
16327    function prepareElementRoot() {
16328        aria( P.$root[0], 'hidden', true )
16329    }
16330
16331
16332     /**
16333      * Prepare the holder picker element with all bindings.
16334      */
16335    function prepareElementHolder() {
16336
16337        P.$holder.
16338
16339            on({
16340
16341                // For iOS8.
16342                keydown: handleKeydownEvent,
16343
16344                'focus.toOpen': handleFocusToOpenEvent,
16345
16346                blur: function() {
16347                    // Remove the “target” class.
16348                    $ELEMENT.removeClass( CLASSES.target )
16349                },
16350
16351                // When something within the holder is focused, stop from bubbling
16352                // to the doc and remove the “focused” state from the root.
16353                focusin: function( event ) {
16354                    P.$root.removeClass( CLASSES.focused )
16355                    event.stopPropagation()
16356                },
16357
16358                // When something within the holder is clicked, stop it
16359                // from bubbling to the doc.
16360                'mousedown click': function( event ) {
16361
16362                    var target = getRealEventTarget( event, ELEMENT )
16363
16364                    // Make sure the target isn’t the root holder so it can bubble up.
16365                    if ( target != P.$holder[0] ) {
16366
16367                        event.stopPropagation()
16368
16369                        // * For mousedown events, cancel the default action in order to
16370                        //   prevent cases where focus is shifted onto external elements
16371                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).
16372                        //   Also, for Firefox, don’t prevent action on the `option` element.
16373                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {
16374
16375                            event.preventDefault()
16376
16377                            // Re-focus onto the holder so that users can click away
16378                            // from elements focused within the picker.
16379                            P.$holder.eq(0).focus()
16380                        }
16381                    }
16382                }
16383
16384            }).
16385
16386            // If there’s a click on an actionable element, carry out the actions.
16387            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {
16388
16389                var $target = $( this ),
16390                    targetData = $target.data(),
16391                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),
16392
16393                    // * For IE, non-focusable elements can be active elements as well
16394                    //   (http://stackoverflow.com/a/2684561).
16395                    activeElement = getActiveElement()
16396                    activeElement = activeElement && ( (activeElement.type || activeElement.href ) ? activeElement : null);
16397
16398                // If it’s disabled or nothing inside is actively focused, re-focus the element.
16399                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {
16400                    P.$holder.eq(0).focus()
16401                }
16402
16403                // If something is superficially changed, update the `highlight` based on the `nav`.
16404                if ( !targetDisabled && targetData.nav ) {
16405                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )
16406                }
16407
16408                // If something is picked, set `select` then close with focus.
16409                else if ( !targetDisabled && 'pick' in targetData ) {
16410                    P.set( 'select', targetData.pick )
16411                    if ( SETTINGS.closeOnSelect ) {
16412                        P.close( true )
16413                    }
16414                }
16415
16416                // If a “clear” button is pressed, empty the values and close with focus.
16417                else if ( targetData.clear ) {
16418                    P.clear()
16419                    if ( SETTINGS.closeOnClear ) {
16420                        P.close( true )
16421                    }
16422                }
16423
16424                else if ( targetData.close ) {
16425                    P.close( true )
16426                }
16427
16428            }) //P.$holder
16429
16430    }
16431
16432
16433     /**
16434      * Prepare the hidden input element along with all bindings.
16435      */
16436    function prepareElementHidden() {
16437
16438        var name
16439
16440        if ( SETTINGS.hiddenName === true ) {
16441            name = ELEMENT.name
16442            ELEMENT.name = ''
16443        }
16444        else {
16445            name = [
16446                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',
16447                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'
16448            ]
16449            name = name[0] + ELEMENT.name + name[1]
16450        }
16451
16452        P._hidden = $(
16453            '<input ' +
16454            'type=hidden ' +
16455
16456            // Create the name using the original input’s with a prefix and suffix.
16457            'name="' + name + '"' +
16458
16459            // If the element has a value, set the hidden value as well.
16460            (
16461                $ELEMENT.data('value') || ELEMENT.value ?
16462                    ' value="' + P.get('select', SETTINGS.formatSubmit) + '"' :
16463                    ''
16464            ) +
16465            '>'
16466        )[0]
16467
16468        $ELEMENT.
16469
16470            // If the value changes, update the hidden input with the correct format.
16471            on('change.' + STATE.id, function() {
16472                P._hidden.value = ELEMENT.value ?
16473                    P.get('select', SETTINGS.formatSubmit) :
16474                    ''
16475            })
16476    }
16477
16478
16479    // Wait for transitions to end before focusing the holder. Otherwise, while
16480    // using the `container` option, the view jumps to the container.
16481    function focusPickerOnceOpened() {
16482
16483        if (IS_DEFAULT_THEME && supportsTransitions) {
16484            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {
16485                P.$holder.eq(0).focus()
16486            })
16487        }
16488        else {
16489            setTimeout(function() {
16490                P.$holder.eq(0).focus()
16491            }, 0)
16492        }
16493    }
16494
16495
16496    function handleFocusToOpenEvent(event) {
16497
16498        // Stop the event from propagating to the doc.
16499        event.stopPropagation()
16500
16501        // Add the “target” class.
16502        $ELEMENT.addClass( CLASSES.target )
16503
16504        // Add the “focused” class to the root.
16505        P.$root.addClass( CLASSES.focused )
16506
16507        // And then finally open the picker.
16508        P.open()
16509    }
16510
16511
16512    // For iOS8.
16513    function handleKeydownEvent( event ) {
16514
16515        var keycode = event.keyCode,
16516
16517            // Check if one of the delete keys was pressed.
16518            isKeycodeDelete = /^(8|46)$/.test(keycode)
16519
16520        // For some reason IE clears the input value on “escape”.
16521        if ( keycode == 27 ) {
16522            P.close( true )
16523            return false
16524        }
16525
16526        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.
16527        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {
16528
16529            // Prevent it from moving the page and bubbling to doc.
16530            event.preventDefault()
16531            event.stopPropagation()
16532
16533            // If `delete` was pressed, clear the values and close the picker.
16534            // Otherwise open the picker.
16535            if ( isKeycodeDelete ) { P.clear().close() }
16536            else { P.open() }
16537        }
16538    }
16539
16540
16541    // Return a new picker instance.
16542    return new PickerInstance()
16543} //PickerConstructor
16544
16545
16546
16547/**
16548 * The default classes and prefix to use for the HTML classes.
16549 */
16550PickerConstructor.klasses = function( prefix ) {
16551    prefix = prefix || 'picker'
16552    return {
16553
16554        picker: prefix,
16555        opened: prefix + '--opened',
16556        focused: prefix + '--focused',
16557
16558        input: prefix + '__input',
16559        active: prefix + '__input--active',
16560        target: prefix + '__input--target',
16561
16562        holder: prefix + '__holder',
16563
16564        frame: prefix + '__frame',
16565        wrap: prefix + '__wrap',
16566
16567        box: prefix + '__box'
16568    }
16569} //PickerConstructor.klasses
16570
16571
16572
16573/**
16574 * Check if the default theme is being used.
16575 */
16576function isUsingDefaultTheme( element ) {
16577
16578    var theme,
16579        prop = 'position'
16580
16581    // For IE.
16582    if ( element.currentStyle ) {
16583        theme = element.currentStyle[prop]
16584    }
16585
16586    // For normal browsers.
16587    else if ( window.getComputedStyle ) {
16588        theme = getComputedStyle( element )[prop]
16589    }
16590
16591    return theme == 'fixed'
16592}
16593
16594
16595
16596/**
16597 * Get the width of the browser’s scrollbar.
16598 * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js
16599 */
16600function getScrollbarWidth() {
16601
16602    if ( $html.height() <= $window.height() ) {
16603        return 0
16604    }
16605
16606    var $outer = $( '<div style="visibility:hidden;width:100px" />' ).
16607        appendTo( 'body' )
16608
16609    // Get the width without scrollbars.
16610    var widthWithoutScroll = $outer[0].offsetWidth
16611
16612    // Force adding scrollbars.
16613    $outer.css( 'overflow', 'scroll' )
16614
16615    // Add the inner div.
16616    var $inner = $( '<div style="width:100%" />' ).appendTo( $outer )
16617
16618    // Get the width with scrollbars.
16619    var widthWithScroll = $inner[0].offsetWidth
16620
16621    // Remove the divs.
16622    $outer.remove()
16623
16624    // Return the difference between the widths.
16625    return widthWithoutScroll - widthWithScroll
16626}
16627
16628
16629
16630/**
16631 * Get the target element from the event.
16632 * If ELEMENT is supplied and present in the event path (ELEMENT is ancestor of the target),
16633 * returns ELEMENT instead
16634 */
16635function getRealEventTarget( event, ELEMENT ) {
16636
16637    var path = []
16638
16639    if ( event.path ) {
16640        path = event.path
16641    }
16642
16643    if ( event.originalEvent && event.originalEvent.path ) {
16644        path = event.originalEvent.path
16645    }
16646
16647    if ( path && path.length > 0 ) {
16648        if ( ELEMENT && path.indexOf( ELEMENT ) >= 0 ) {
16649            return ELEMENT
16650        } else {
16651            return path[0]
16652        }
16653    }
16654
16655    return event.target
16656}
16657
16658/**
16659 * PickerConstructor helper methods.
16660 */
16661PickerConstructor._ = {
16662
16663    /**
16664     * Create a group of nodes. Expects:
16665     * `
16666        {
16667            min:    {Integer},
16668            max:    {Integer},
16669            i:      {Integer},
16670            node:   {String},
16671            item:   {Function}
16672        }
16673     * `
16674     */
16675    group: function( groupObject ) {
16676
16677        var
16678            // Scope for the looped object
16679            loopObjectScope,
16680
16681            // Create the nodes list
16682            nodesList = '',
16683
16684            // The counter starts from the `min`
16685            counter = PickerConstructor._.trigger( groupObject.min, groupObject )
16686
16687
16688        // Loop from the `min` to `max`, incrementing by `i`
16689        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {
16690
16691            // Trigger the `item` function within scope of the object
16692            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )
16693
16694            // Splice the subgroup and create nodes out of the sub nodes
16695            nodesList += PickerConstructor._.node(
16696                groupObject.node,
16697                loopObjectScope[ 0 ],   // the node
16698                loopObjectScope[ 1 ],   // the classes
16699                loopObjectScope[ 2 ]    // the attributes
16700            )
16701        }
16702
16703        // Return the list of nodes
16704        return nodesList
16705    }, //group
16706
16707
16708    /**
16709     * Create a dom node string
16710     */
16711    node: function( wrapper, item, klass, attribute ) {
16712
16713        // If the item is false-y, just return an empty string
16714        if ( !item ) return ''
16715
16716        // If the item is an array, do a join
16717        item = $.isArray( item ) ? item.join( '' ) : item
16718
16719        // Check for the class
16720        klass = klass ? ' class="' + klass + '"' : ''
16721
16722        // Check for any attributes
16723        attribute = attribute ? ' ' + attribute : ''
16724
16725        // Return the wrapped item
16726        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'
16727    }, //node
16728
16729
16730    /**
16731     * Lead numbers below 10 with a zero.
16732     */
16733    lead: function( number ) {
16734        return ( number < 10 ? '0': '' ) + number
16735    },
16736
16737
16738    /**
16739     * Trigger a function otherwise return the value.
16740     */
16741    trigger: function( callback, scope, args ) {
16742        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback
16743    },
16744
16745
16746    /**
16747     * If the second character is a digit, length is 2 otherwise 1.
16748     */
16749    digits: function( string ) {
16750        return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1
16751    },
16752
16753
16754    /**
16755     * Tell if something is a date object.
16756     */
16757    isDate: function( value ) {
16758        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )
16759    },
16760
16761
16762    /**
16763     * Tell if something is an integer.
16764     */
16765    isInteger: function( value ) {
16766        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0
16767    },
16768
16769
16770    /**
16771     * Create ARIA attribute strings.
16772     */
16773    ariaAttr: ariaAttr
16774} //PickerConstructor._
16775
16776
16777
16778/**
16779 * Extend the picker with a component and defaults.
16780 */
16781PickerConstructor.extend = function( name, Component ) {
16782
16783    // Extend jQuery.
16784    $.fn[ name ] = function( options, action ) {
16785
16786        // Grab the component data.
16787        var componentData = this.data( name )
16788
16789        // If the picker is requested, return the data object.
16790        if ( options == 'picker' ) {
16791            return componentData
16792        }
16793
16794        // If the component data exists and `options` is a string, carry out the action.
16795        if ( componentData && typeof options == 'string' ) {
16796            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )
16797        }
16798
16799        // Otherwise go through each matched element and if the component
16800        // doesn’t exist, create a new picker using `this` element
16801        // and merging the defaults and options with a deep copy.
16802        return this.each( function() {
16803            var $this = $( this )
16804            if ( !$this.data( name ) ) {
16805                new PickerConstructor( this, name, Component, options )
16806            }
16807        })
16808    }
16809
16810    // Set the defaults.
16811    $.fn[ name ].defaults = Component.defaults
16812} //PickerConstructor.extend
16813
16814
16815
16816function aria(element, attribute, value) {
16817    if ( $.isPlainObject(attribute) ) {
16818        for ( var key in attribute ) {
16819            ariaSet(element, key, attribute[key])
16820        }
16821    }
16822    else {
16823        ariaSet(element, attribute, value)
16824    }
16825}
16826function ariaSet(element, attribute, value) {
16827    element.setAttribute(
16828        (attribute == 'role' ? '' : 'aria-') + attribute,
16829        value
16830    )
16831}
16832function ariaAttr(attribute, data) {
16833    if ( !$.isPlainObject(attribute) ) {
16834        attribute = { attribute: data }
16835    }
16836    data = ''
16837    for ( var key in attribute ) {
16838        var attr = (key == 'role' ? '' : 'aria-') + key,
16839            attrVal = attribute[key]
16840        data += attrVal == null ? '' : attr + '="' + attribute[key] + '"'
16841    }
16842    return data
16843}
16844
16845// IE8 bug throws an error for activeElements within iframes.
16846function getActiveElement() {
16847    try {
16848        return document.activeElement
16849    } catch ( err ) { }
16850}
16851
16852
16853
16854// Expose the picker constructor.
16855return PickerConstructor
16856
16857
16858}));
16859;
16860
16861/*jshint
16862   asi: true,
16863   unused: true,
16864   boss: true,
16865   loopfunc: true,
16866   eqnull: true
16867 */
16868
16869
16870/*!
16871 * Legacy browser support
16872 */
16873
16874
16875// Map array support
16876if ( ![].map ) {
16877    Array.prototype.map = function ( callback, self ) {
16878        var array = this, len = array.length, newArray = new Array( len )
16879        for ( var i = 0; i < len; i++ ) {
16880            if ( i in array ) {
16881                newArray[ i ] = callback.call( self, array[ i ], i, array )
16882            }
16883        }
16884        return newArray
16885    }
16886}
16887
16888
16889// Filter array support
16890if ( ![].filter ) {
16891    Array.prototype.filter = function( callback ) {
16892        if ( this == null ) throw new TypeError()
16893        var t = Object( this ), len = t.length >>> 0
16894        if ( typeof callback != 'function' ) throw new TypeError()
16895        var newArray = [], thisp = arguments[ 1 ]
16896        for ( var i = 0; i < len; i++ ) {
16897          if ( i in t ) {
16898            var val = t[ i ]
16899            if ( callback.call( thisp, val, i, t ) ) newArray.push( val )
16900          }
16901        }
16902        return newArray
16903    }
16904}
16905
16906
16907// Index of array support
16908if ( ![].indexOf ) {
16909    Array.prototype.indexOf = function( searchElement ) {
16910        if ( this == null ) throw new TypeError()
16911        var t = Object( this ), len = t.length >>> 0
16912        if ( len === 0 ) return -1
16913        var n = 0
16914        if ( arguments.length > 1 ) {
16915            n = Number( arguments[ 1 ] )
16916            if ( n != n ) {
16917                n = 0
16918            }
16919            else if ( n !== 0 && n != Infinity && n != -Infinity ) {
16920                n = ( n > 0 || -1 ) * Math.floor( Math.abs( n ) )
16921            }
16922        }
16923        if ( n >= len ) return -1
16924        var k = n >= 0 ? n : Math.max( len - Math.abs( n ), 0 )
16925        for ( ; k < len; k++ ) {
16926            if ( k in t && t[ k ] === searchElement ) return k
16927        }
16928        return -1
16929    }
16930}
16931
16932
16933/*!
16934 * Cross-Browser Split 1.1.1
16935 * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
16936 * Available under the MIT License
16937 * http://blog.stevenlevithan.com/archives/cross-browser-split
16938 */
16939var nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec('')[1] === undefined
16940String.prototype.split = function(separator, limit) {
16941    var str = this
16942    if (Object.prototype.toString.call(separator) !== '[object RegExp]') {
16943        return nativeSplit.call(str, separator, limit)
16944    }
16945    var output = [],
16946        flags = (separator.ignoreCase ? 'i' : '') +
16947                (separator.multiline  ? 'm' : '') +
16948                (separator.extended   ? 'x' : '') +
16949                (separator.sticky     ? 'y' : ''),
16950        lastLastIndex = 0,
16951        separator2, match, lastIndex, lastLength
16952    separator = new RegExp(separator.source, flags + 'g')
16953    str += ''
16954    if (!compliantExecNpcg) {
16955        separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags)
16956    }
16957    limit = limit === undefined ? -1 >>> 0 : limit >>> 0
16958    while (match = separator.exec(str)) {
16959        lastIndex = match.index + match[0].length
16960        if (lastIndex > lastLastIndex) {
16961            output.push(str.slice(lastLastIndex, match.index))
16962            if (!compliantExecNpcg && match.length > 1) {
16963                match[0].replace(separator2, function () {
16964                    for (var i = 1; i < arguments.length - 2; i++) {
16965                        if (arguments[i] === undefined) {
16966                            match[i] = undefined
16967                        }
16968                    }
16969                })
16970            }
16971            if (match.length > 1 && match.index < str.length) {
16972                Array.prototype.push.apply(output, match.slice(1))
16973            }
16974            lastLength = match[0].length
16975            lastLastIndex = lastIndex
16976            if (output.length >= limit) {
16977                break
16978            }
16979        }
16980        if (separator.lastIndex === match.index) {
16981            separator.lastIndex++
16982        }
16983    }
16984    if (lastLastIndex === str.length) {
16985        if (lastLength || !separator.test('')) {
16986            output.push('')
16987        }
16988    } else {
16989        output.push(str.slice(lastLastIndex))
16990    }
16991    return output.length > limit ? output.slice(0, limit) : output
16992};
16993;
16994/*!
16995 * Date picker for pickadate.js v3.6.4
16996 * http://amsul.github.io/pickadate.js/date.htm
16997 */
16998
16999(function ( factory ) {
17000
17001    // AMD.
17002    if ( typeof define == 'function' && define.amd )
17003        define( ['../picker', 'jquery'], factory )
17004
17005    // Node.js/browserify.
17006    else if ( typeof exports == 'object' )
17007        module.exports = factory( require('../picker.js'), require('jquery') )
17008
17009    // Browser globals.
17010    else factory( Picker, jQuery )
17011
17012}(function( Picker, $ ) {
17013
17014
17015/**
17016 * Globals and constants
17017 */
17018var DAYS_IN_WEEK = 7,
17019    WEEKS_IN_CALENDAR = 6,
17020    _ = Picker._
17021
17022
17023
17024/**
17025 * The date picker constructor
17026 */
17027function DatePicker( picker, settings ) {
17028
17029    var calendar = this,
17030        element = picker.$node[ 0 ],
17031        elementValue = element.value,
17032        elementDataValue = picker.$node.data( 'value' ),
17033        valueString = elementDataValue || elementValue,
17034        formatString = elementDataValue ? settings.formatSubmit : settings.format,
17035        isRTL = function() {
17036
17037            return element.currentStyle ?
17038
17039                // For IE.
17040                element.currentStyle.direction == 'rtl' :
17041
17042                // For normal browsers.
17043                getComputedStyle( picker.$root[0] ).direction == 'rtl'
17044        }
17045
17046    calendar.settings = settings
17047    calendar.$node = picker.$node
17048
17049    // The queue of methods that will be used to build item objects.
17050    calendar.queue = {
17051        min: 'measure create',
17052        max: 'measure create',
17053        now: 'now create',
17054        select: 'parse create validate',
17055        highlight: 'parse navigate create validate',
17056        view: 'parse create validate viewset',
17057        disable: 'deactivate',
17058        enable: 'activate'
17059    }
17060
17061    // The component's item object.
17062    calendar.item = {}
17063
17064    calendar.item.clear = null
17065    calendar.item.disable = ( settings.disable || [] ).slice( 0 )
17066    calendar.item.enable = -(function( collectionDisabled ) {
17067        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1
17068    })( calendar.item.disable )
17069
17070    calendar.
17071        set( 'min', settings.min ).
17072        set( 'max', settings.max ).
17073        set( 'now' )
17074
17075    // When there’s a value, set the `select`, which in turn
17076    // also sets the `highlight` and `view`.
17077    if ( valueString ) {
17078        calendar.set( 'select', valueString, {
17079            format: formatString,
17080            defaultValue: true
17081        })
17082    }
17083
17084    // If there’s no value, default to highlighting “today”.
17085    else {
17086        calendar.
17087            set( 'select', null ).
17088            set( 'highlight', calendar.item.now )
17089    }
17090
17091
17092    // The keycode to movement mapping.
17093    calendar.key = {
17094        40: 7, // Down
17095        38: -7, // Up
17096        39: function() { return isRTL() ? -1 : 1 }, // Right
17097        37: function() { return isRTL() ? 1 : -1 }, // Left
17098        go: function( timeChange ) {
17099            var highlightedObject = calendar.item.highlight,
17100                targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )
17101            calendar.set(
17102                'highlight',
17103                targetDate,
17104                { interval: timeChange }
17105            )
17106            this.render()
17107        }
17108    }
17109
17110
17111    // Bind some picker events.
17112    picker.
17113        on( 'render', function() {
17114            picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {
17115                var value = this.value
17116                if ( value ) {
17117                    picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )
17118                    picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )
17119                }
17120            })
17121            picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {
17122                var value = this.value
17123                if ( value ) {
17124                    picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )
17125                    picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )
17126                }
17127            })
17128        }, 1 ).
17129        on( 'open', function() {
17130            var includeToday = ''
17131            if ( calendar.disabled( calendar.get('now') ) ) {
17132                includeToday = ':not(.' + settings.klass.buttonToday + ')'
17133            }
17134            picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )
17135        }, 1 ).
17136        on( 'close', function() {
17137            picker.$root.find( 'button, select' ).attr( 'disabled', true )
17138        }, 1 )
17139
17140} //DatePicker
17141
17142
17143/**
17144 * Set a datepicker item object.
17145 */
17146DatePicker.prototype.set = function( type, value, options ) {
17147
17148    var calendar = this,
17149        calendarItem = calendar.item
17150
17151    // If the value is `null` just set it immediately.
17152    if ( value === null ) {
17153        if ( type == 'clear' ) type = 'select'
17154        calendarItem[ type ] = value
17155        return calendar
17156    }
17157
17158    // Otherwise go through the queue of methods, and invoke the functions.
17159    // Update this as the time unit, and set the final value as this item.
17160    // * In the case of `enable`, keep the queue but set `disable` instead.
17161    //   And in the case of `flip`, keep the queue but set `enable` instead.
17162    calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {
17163        value = calendar[ method ]( type, value, options )
17164        return value
17165    }).pop()
17166
17167    // Check if we need to cascade through more updates.
17168    if ( type == 'select' ) {
17169        calendar.set( 'highlight', calendarItem.select, options )
17170    }
17171    else if ( type == 'highlight' ) {
17172        calendar.set( 'view', calendarItem.highlight, options )
17173    }
17174    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {
17175        if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {
17176            calendar.set( 'select', calendarItem.select, options )
17177        }
17178        if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {
17179            calendar.set( 'highlight', calendarItem.highlight, options )
17180        }
17181    }
17182
17183    return calendar
17184} //DatePicker.prototype.set
17185
17186
17187/**
17188 * Get a datepicker item object.
17189 */
17190DatePicker.prototype.get = function( type ) {
17191    return this.item[ type ]
17192} //DatePicker.prototype.get
17193
17194
17195/**
17196 * Create a picker date object.
17197 */
17198DatePicker.prototype.create = function( type, value, options ) {
17199
17200    var isInfiniteValue,
17201        calendar = this
17202
17203    // If there’s no value, use the type as the value.
17204    value = value === undefined ? type : value
17205
17206
17207    // If it’s infinity, update the value.
17208    if ( value == -Infinity || value == Infinity ) {
17209        isInfiniteValue = value
17210    }
17211
17212    // If it’s an object, use the native date object.
17213    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {
17214        value = value.obj
17215    }
17216
17217    // If it’s an array, convert it into a date and make sure
17218    // that it’s a valid date – otherwise default to today.
17219    else if ( $.isArray( value ) ) {
17220        value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )
17221        value = _.isDate( value ) ? value : calendar.create().obj
17222    }
17223
17224    // If it’s a number or date object, make a normalized date.
17225    else if ( _.isInteger( value ) || _.isDate( value ) ) {
17226        value = calendar.normalize( new Date( value ), options )
17227    }
17228
17229    // If it’s a literal true or any other case, set it to now.
17230    else /*if ( value === true )*/ {
17231        value = calendar.now( type, value, options )
17232    }
17233
17234    // Return the compiled object.
17235    return {
17236        year: isInfiniteValue || value.getFullYear(),
17237        month: isInfiniteValue || value.getMonth(),
17238        date: isInfiniteValue || value.getDate(),
17239        day: isInfiniteValue || value.getDay(),
17240        obj: isInfiniteValue || value,
17241        pick: isInfiniteValue || value.getTime()
17242    }
17243} //DatePicker.prototype.create
17244
17245
17246/**
17247 * Create a range limit object using an array, date object,
17248 * literal “true”, or integer relative to another time.
17249 */
17250DatePicker.prototype.createRange = function( from, to ) {
17251
17252    var calendar = this,
17253        createDate = function( date ) {
17254            if ( date === true || $.isArray( date ) || _.isDate( date ) ) {
17255                return calendar.create( date )
17256            }
17257            return date
17258        }
17259
17260    // Create objects if possible.
17261    if ( !_.isInteger( from ) ) {
17262        from = createDate( from )
17263    }
17264    if ( !_.isInteger( to ) ) {
17265        to = createDate( to )
17266    }
17267
17268    // Create relative dates.
17269    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {
17270        from = [ to.year, to.month, to.date + from ];
17271    }
17272    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {
17273        to = [ from.year, from.month, from.date + to ];
17274    }
17275
17276    return {
17277        from: createDate( from ),
17278        to: createDate( to )
17279    }
17280} //DatePicker.prototype.createRange
17281
17282
17283/**
17284 * Check if a date unit falls within a date range object.
17285 */
17286DatePicker.prototype.withinRange = function( range, dateUnit ) {
17287    range = this.createRange(range.from, range.to)
17288    return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick
17289}
17290
17291
17292/**
17293 * Check if two date range objects overlap.
17294 */
17295DatePicker.prototype.overlapRanges = function( one, two ) {
17296
17297    var calendar = this
17298
17299    // Convert the ranges into comparable dates.
17300    one = calendar.createRange( one.from, one.to )
17301    two = calendar.createRange( two.from, two.to )
17302
17303    return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||
17304        calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )
17305}
17306
17307
17308/**
17309 * Get the date today.
17310 */
17311DatePicker.prototype.now = function( type, value, options ) {
17312    value = new Date()
17313    if ( options && options.rel ) {
17314        value.setDate( value.getDate() + options.rel )
17315    }
17316    return this.normalize( value, options )
17317}
17318
17319
17320/**
17321 * Navigate to next/prev month.
17322 */
17323DatePicker.prototype.navigate = function( type, value, options ) {
17324
17325    var targetDateObject,
17326        targetYear,
17327        targetMonth,
17328        targetDate,
17329        isTargetArray = $.isArray( value ),
17330        isTargetObject = $.isPlainObject( value ),
17331        viewsetObject = this.item.view/*,
17332        safety = 100*/
17333
17334
17335    if ( isTargetArray || isTargetObject ) {
17336
17337        if ( isTargetObject ) {
17338            targetYear = value.year
17339            targetMonth = value.month
17340            targetDate = value.date
17341        }
17342        else {
17343            targetYear = +value[0]
17344            targetMonth = +value[1]
17345            targetDate = +value[2]
17346        }
17347
17348        // If we’re navigating months but the view is in a different
17349        // month, navigate to the view’s year and month.
17350        if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {
17351            targetYear = viewsetObject.year
17352            targetMonth = viewsetObject.month
17353        }
17354
17355        // Figure out the expected target year and month.
17356        targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )
17357        targetYear = targetDateObject.getFullYear()
17358        targetMonth = targetDateObject.getMonth()
17359
17360        // If the month we’re going to doesn’t have enough days,
17361        // keep decreasing the date until we reach the month’s last date.
17362        while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {
17363            targetDate -= 1
17364            /*safety -= 1
17365            if ( !safety ) {
17366                throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'
17367            }*/
17368        }
17369
17370        value = [ targetYear, targetMonth, targetDate ]
17371    }
17372
17373    return value
17374} //DatePicker.prototype.navigate
17375
17376
17377/**
17378 * Normalize a date by setting the hours to midnight.
17379 */
17380DatePicker.prototype.normalize = function( value/*, options*/ ) {
17381    value.setHours( 0, 0, 0, 0 )
17382    return value
17383}
17384
17385
17386/**
17387 * Measure the range of dates.
17388 */
17389DatePicker.prototype.measure = function( type, value/*, options*/ ) {
17390
17391    var calendar = this
17392    
17393    // If it's an integer, get a date relative to today.
17394    if ( _.isInteger( value ) ) {
17395        value = calendar.now( type, value, { rel: value } )
17396    }
17397
17398    // If it’s anything false-y,
17398 remove the limits.
17399    else if ( !value ) {
17400        value = type == 'min' ? -Infinity : Infinity
17401    }
17402
17403    // If it’s a string, parse it.
17404    else if ( typeof value == 'string' ) {
17405        value = calendar.parse( type, value )
17406    }
17407
17408    return value
17409} ///DatePicker.prototype.measure
17410
17411
17412/**
17413 * Create a viewset object based on navigation.
17414 */
17415DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {
17416    return this.create([ dateObject.year, dateObject.month, 1 ])
17417}
17418
17419
17420/**
17421 * Validate a date as enabled and shift if needed.
17422 */
17423DatePicker.prototype.validate = function( type, dateObject, options ) {
17424
17425    var calendar = this,
17426
17427        // Keep a reference to the original date.
17428        originalDateObject = dateObject,
17429
17430        // Make sure we have an interval.
17431        interval = options && options.interval ? options.interval : 1,
17432
17433        // Check if the calendar enabled dates are inverted.
17434        isFlippedBase = calendar.item.enable === -1,
17435
17436        // Check if we have any enabled dates after/before now.
17437        hasEnabledBeforeTarget, hasEnabledAfterTarget,
17438
17439        // The min & max limits.
17440        minLimitObject = calendar.item.min,
17441        maxLimitObject = calendar.item.max,
17442
17443        // Check if we’ve reached the limit during shifting.
17444        reachedMin, reachedMax,
17445
17446        // Check if the calendar is inverted and at least one weekday is enabled.
17447        hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {
17448
17449            // If there’s a date, check where it is relative to the target.
17450            if ( $.isArray( value ) ) {
17451                var dateTime = calendar.create( value ).pick
17452                if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true
17453                else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true
17454            }
17455
17456            // Return only integers for enabled weekdays.
17457            return _.isInteger( value )
17458        }).length/*,
17459
17460        safety = 100*/
17461
17462
17463
17464    // Cases to validate for:
17465    // [1] Not inverted and date disabled.
17466    // [2] Inverted and some dates enabled.
17467    // [3] Not inverted and out of range.
17468    //
17469    // Cases to **not** validate for:
17470    // • Navigating months.
17471    // • Not inverted and date enabled.
17472    // • Inverted and all dates disabled.
17473    // • ..and anything else.
17474    if ( !options || (!options.nav && !options.defaultValue) ) if (
17475        /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||
17476        /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||
17477        /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )
17478    ) {
17479
17480
17481        // When inverted, flip the direction if there aren’t any enabled weekdays
17482        // and there are no enabled dates in the direction of the interval.
17483        if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {
17484            interval *= -1
17485        }
17486
17487
17488        // Keep looping until we reach an enabled date.
17489        while ( /*safety &&*/ calendar.disabled( dateObject ) ) {
17490
17491            /*safety -= 1
17492            if ( !safety ) {
17493                throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'
17494            }*/
17495
17496
17497            // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.
17498            if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {
17499                dateObject = originalDateObject
17500                interval = interval > 0 ? 1 : -1
17501            }
17502
17503
17504            // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.
17505            if ( dateObject.pick <= minLimitObject.pick ) {
17506                reachedMin = true
17507                interval = 1
17508                dateObject = calendar.create([
17509                    minLimitObject.year,
17510                    minLimitObject.month,
17511                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)
17512                ])
17513            }
17514            else if ( dateObject.pick >= maxLimitObject.pick ) {
17515                reachedMax = true
17516                interval = -1
17517                dateObject = calendar.create([
17518                    maxLimitObject.year,
17519                    maxLimitObject.month,
17520                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)
17521                ])
17522            }
17523
17524
17525            // If we’ve reached both limits, just break out of the loop.
17526            if ( reachedMin && reachedMax ) {
17527                break
17528            }
17529
17530
17531            // Finally, create the shifted date using the interval and keep looping.
17532            dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])
17533        }
17534
17535    } //endif
17536
17537
17538    // Return the date object settled on.
17539    return dateObject
17540} //DatePicker.prototype.validate
17541
17542
17543/**
17544 * Check if a date is disabled.
17545 */
17546DatePicker.prototype.disabled = function( dateToVerify ) {
17547
17548    var
17549        calendar = this,
17550
17551        // Filter through the disabled dates to check if this is one.
17552        isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {
17553
17554            // If the date is a number, match the weekday with 0index and `firstDay` check.
17555            if ( _.isInteger( dateToDisable ) ) {
17556                return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7
17557            }
17558
17559            // If it’s an array or a native JS date, create and match the exact date.
17560            if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {
17561                return dateToVerify.pick === calendar.create( dateToDisable ).pick
17562            }
17563
17564            // If it’s an object, match a date within the “from” and “to” range.
17565            if ( $.isPlainObject( dateToDisable ) ) {
17566                return calendar.withinRange( dateToDisable, dateToVerify )
17567            }
17568        })
17569
17570    // If this date matches a disabled date, confirm it’s not inverted.
17571    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {
17572        return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||
17573            $.isPlainObject( dateToDisable ) && dateToDisable.inverted
17574    }).length
17575
17576    // Check the calendar “enabled” flag and respectively flip the
17577    // disabled state. Then also check if it’s beyond the min/max limits.
17578    return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
17579        dateToVerify.pick < calendar.item.min.pick ||
17580        dateToVerify.pick > calendar.item.max.pick
17581
17582} //DatePicker.prototype.disabled
17583
17584
17585/**
17586 * Parse a string into a usable type.
17587 */
17588DatePicker.prototype.parse = function( type, value, options ) {
17589
17590    var calendar = this,
17591        parsingObject = {}
17592
17593    // If it’s already parsed, we’re good.
17594    if ( !value || typeof value != 'string' ) {
17595        return value
17596    }
17597
17598    // We need a `.format` to parse the value with.
17599    if ( !( options && options.format ) ) {
17600        options = options || {}
17601        options.format = calendar.settings.format
17602    }
17603
17604    // Convert the format into an array and then map through it.
17605    calendar.formats.toArray( options.format ).map( function( label ) {
17606
17607        var
17608            // Grab the formatting label.
17609            formattingLabel = calendar.formats[ label ],
17610
17611            // The format length is from the formatting label function or the
17612            // label length without the escaping exclamation (!) mark.
17613            formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length
17614
17615        // If there's a format label, split the value up to the format length.
17616        // Then add it to the parsing object with appropriate label.
17617        if ( formattingLabel ) {
17618            parsingObject[ label ] = value.substr( 0, formatLength )
17619        }
17620
17621        // Update the value as the substring from format length to end.
17622        value = value.substr( formatLength )
17623    })
17624
17625    // Compensate for month 0index.
17626    return [
17627        parsingObject.yyyy || parsingObject.yy,
17628        +( parsingObject.mm || parsingObject.m ) - 1,
17629        parsingObject.dd || parsingObject.d
17630    ]
17631} //DatePicker.prototype.parse
17632
17633
17634/**
17635 * Various formats to display the object in.
17636 */
17637DatePicker.prototype.formats = (function() {
17638
17639    // Return the length of the first word in a collection.
17640    function getWordLengthFromCollection( string, collection, dateObject ) {
17641
17642        // Grab the first word from the string.
17643        // Regex pattern from http://stackoverflow.com/q/150033
17644        var word = string.match( /[^\x00-\x7F]+|[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ]
17645
17646        // If there's no month index, add it to the date object
17647        if ( !dateObject.mm && !dateObject.m ) {
17648            dateObject.m = collection.indexOf( word ) + 1
17649        }
17650
17651        // Return the length of the word.
17652        return word.length
17653    }
17654
17655    // Get the length of the first word in a string.
17656    function getFirstWordLength( string ) {
17657        return string.match( /[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ].length
17658    }
17659
17660    return {
17661
17662        d: function( string, dateObject ) {
17663
17664            // If there's string, then get the digits length.
17665            // Otherwise return the selected date.
17666            return string ? _.digits( string ) : dateObject.date
17667        },
17668        dd: function( string, dateObject ) {
17669
17670            // If there's a string, then the length is always 2.
17671            // Otherwise return the selected date with a leading zero.
17672            return string ? 2 : _.lead( dateObject.date )
17673        },
17674        ddd: function( string, dateObject ) {
17675
17676            // If there's a string, then get the length of the first word.
17677            // Otherwise return the short selected weekday.
17678            return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]
17679        },
17680        dddd: function( string, dateObject ) {
17681
17682            // If there's a string, then get the length of the first word.
17683            // Otherwise return the full selected weekday.
17684            return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]
17685        },
17686        m: function( string, dateObject ) {
17687
17688            // If there's a string, then get the length of the digits
17689            // Otherwise return the selected month with 0index compensation.
17690            return string ? _.digits( string ) : dateObject.month + 1
17691        },
17692        mm: function( string, dateObject ) {
17693
17694            // If there's a string, then the length is always 2.
17695            // Otherwise return the selected month with 0index and leading zero.
17696            return string ? 2 : _.lead( dateObject.month + 1 )
17697        },
17698        mmm: function( string, dateObject ) {
17699
17700            var collection = this.settings.monthsShort
17701
17702            // If there's a string, get length of the relevant month from the short
17703            // months collection. Otherwise return the selected month from that c
17703ollection.
17704            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
17705        },
17706        mmmm: function( string, dateObject ) {
17707
17708            var collection = this.settings.monthsFull
17709
17710            // If there's a string, get length of the relevant month from the full
17711            // months collection. Otherwise return the selected month from that collection.
17712            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
17713        },
17714        yy: function( string, dateObject ) {
17715
17716            // If there's a string, then the length is always 2.
17717            // Otherwise return the selected year by slicing out the first 2 digits.
17718            return string ? 2 : ( '' + dateObject.year ).slice( 2 )
17719        },
17720        yyyy: function( string, dateObject ) {
17721
17722            // If there's a string, then the length is always 4.
17723            // Otherwise return the selected year.
17724            return string ? 4 : dateObject.year
17725        },
17726
17727        // Create an array by splitting the formatting string passed.
17728        toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },
17729
17730        // Format an object into a string using the formatting options.
17731        toString: function ( formatString, itemObject ) {
17732            var calendar = this
17733            return calendar.formats.toArray( formatString ).map( function( label ) {
17734                return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )
17735            }).join( '' )
17736        }
17737    }
17738})() //DatePicker.prototype.formats
17739
17740
17741
17742
17743/**
17744 * Check if two date units are the exact.
17745 */
17746DatePicker.prototype.isDateExact = function( one, two ) {
17747
17748    var calendar = this
17749
17750    // When we’re working with weekdays, do a direct comparison.
17751    if (
17752        ( _.isInteger( one ) && _.isInteger( two ) ) ||
17753        ( typeof one == 'boolean' && typeof two == 'boolean' )
17754     ) {
17755        return one === two
17756    }
17757
17758    // When we’re working with date representations, compare the “pick” value.
17759    if (
17760        ( _.isDate( one ) || $.isArray( one ) ) &&
17761        ( _.isDate( two ) || $.isArray( two ) )
17762    ) {
17763        return calendar.create( one ).pick === calendar.create( two ).pick
17764    }
17765
17766    // When we’re working with range objects, compare the “from” and “to”.
17767    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
17768        return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )
17769    }
17770
17771    return false
17772}
17773
17774
17775/**
17776 * Check if two date units overlap.
17777 */
17778DatePicker.prototype.isDateOverlap = function( one, two ) {
17779
17780    var calendar = this,
17781        firstDay = calendar.settings.firstDay ? 1 : 0
17782
17783    // When we’re working with a weekday index, compare the days.
17784    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {
17785        one = one % 7 + firstDay
17786        return one === calendar.create( two ).day + 1
17787    }
17788    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {
17789        two = two % 7 + firstDay
17790        return two === calendar.create( one ).day + 1
17791    }
17792
17793    // When we’re working with range objects, check if the ranges overlap.
17794    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
17795        return calendar.overlapRanges( one, two )
17796    }
17797
17798    return false
17799}
17800
17801
17802/**
17803 * Flip the “enabled” state.
17804 */
17805DatePicker.prototype.flipEnable = function(val) {
17806    var itemObject = this.item
17807    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)
17808}
17809
17810
17811/**
17812 * Mark a collection of dates as “disabled”.
17813 */
17814DatePicker.prototype.deactivate = function( type, datesToDisable ) {
17815
17816    var calendar = this,
17817        disabledItems = calendar.item.disable.slice(0)
17818
17819
17820    // If we’re flipping, that’s all we need to do.
17821    if ( datesToDisable == 'flip' ) {
17822        calendar.flipEnable()
17823    }
17824
17825    else if ( datesToDisable === false ) {
17826        calendar.flipEnable(1)
17827        disabledItems = []
17828    }
17829
17830    else if ( datesToDisable === true ) {
17831        calendar.flipEnable(-1)
17832        disabledItems = []
17833    }
17834
17835    // Otherwise go through the dates to disable.
17836    else {
17837
17838        datesToDisable.map(function( unitToDisable ) {
17839
17840            var matchFound
17841
17842            // When we have disabled items, check for matches.
17843            // If something is matched, immediately break out.
17844            for ( var index = 0; index < disabledItems.length; index += 1 ) {
17845                if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {
17846                    matchFound = true
17847                    break
17848                }
17849            }
17850
17851            // If nothing was found, add the validated unit to the collection.
17852            if ( !matchFound ) {
17853                if (
17854                    _.isInteger( unitToDisable ) ||
17855                    _.isDate( unitToDisable ) ||
17856                    $.isArray( unitToDisable ) ||
17857                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )
17858                ) {
17859                    disabledItems.push( unitToDisable )
17860                }
17861            }
17862        })
17863    }
17864
17865    // Return the updated collection.
17866    return disabledItems
17867} //DatePicker.prototype.deactivate
17868
17869
17870/**
17871 * Mark a collection of dates as “enabled”.
17872 */
17873DatePicker.prototype.activate = function( type, datesToEnable ) {
17874
17875    var calendar = this,
17876        disabledItems = calendar.item.disable,
17877        disabledItemsCount = disabledItems.length
17878
17879    // If we’re flipping, that’s all we need to do.
17880    if ( datesToEnable == 'flip' ) {
17881        calendar.flipEnable()
17882    }
17883
17884    else if ( datesToEnable === true ) {
17885        calendar.flipEnable(1)
17886        disabledItems = []
17887    }
17888
17889    else if ( datesToEnable === false ) {
17890        calendar.flipEnable(-1)
17891        disabledItems = []
17892    }
17893
17894    // Otherwise go through the disabled dates.
17895    else {
17896
17897        datesToEnable.map(function( unitToEnable ) {
17898
17899            var matchFound,
17900                disabledUnit,
17901                index,
17902                isExactRange
17903
17904            // Go through the disabled items and try to find a match.
17905            for ( index = 0; index < disabledItemsCount; index += 1 ) {
17906
17907                disabledUnit = disabledItems[index]
17908
17909                // When an exact match is found, remove it from the collection.
17910                if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {
17911                    matchFound = disabledItems[index] = null
17912                    isExactRange = true
17913                    break
17914                }
17915
17916                // When an overlapped match is found, add the “inverted” state to it.
17917                else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {
17918                    if ( $.isPlainObject( unitToEnable ) ) {
17919                        unitToEnable.inverted = true
17920                        matchFound = unitToEnable
17921                    }
17922                    else if ( $.isArray( unitToEnable ) ) {
17923                        matchFound = unitToEnable
17924                        if ( !matchFound[3] ) matchFound.push( '
17924inverted' )
17925                    }
17926                    else if ( _.isDate( unitToEnable ) ) {
17927                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]
17928                    }
17929                    break
17930                }
17931            }
17932
17933            // If a match was found, remove a previous duplicate entry.
17934            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
17935                if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {
17936                    disabledItems[index] = null
17937                    break
17938                }
17939            }
17940
17941            // In the event that we’re dealing with an exact range of dates,
17942            // make sure there are no “inverted” dates because of it.
17943            if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
17944                if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {
17945                    disabledItems[index] = null
17946                    break
17947                }
17948            }
17949
17950            // If something is still matched, add it into the collection.
17951            if ( matchFound ) {
17952                disabledItems.push( matchFound )
17953            }
17954        })
17955    }
17956
17957    // Return the updated collection.
17958    return disabledItems.filter(function( val ) { return val != null })
17959} //DatePicker.prototype.activate
17960
17961
17962/**
17963 * Create a string for the nodes in the picker.
17964 */
17965DatePicker.prototype.nodes = function( isOpen ) {
17966
17967    var
17968        calendar = this,
17969        settings = calendar.settings,
17970        calendarItem = calendar.item,
17971        nowObject = calendarItem.now,
17972        selectedObject = calendarItem.select,
17973        highlightedObject = calendarItem.highlight,
17974        viewsetObject = calendarItem.view,
17975        disabledCollection = calendarItem.disable,
17976        minLimitObject = calendarItem.min,
17977        maxLimitObject = calendarItem.max,
17978
17979
17980        // Create the calendar table head using a copy of weekday labels collection.
17981        // * We do a copy so we don't mutate the original array.
17982        tableHead = (function( collection, fullCollection ) {
17983
17984            // If the first day should be Monday, move Sunday to the end.
17985            if ( settings.firstDay ) {
17986                collection.push( collection.shift() )
17987                fullCollection.push( fullCollection.shift() )
17988            }
17989
17990            // Create and return the table head group.
17991            return _.node(
17992                'thead',
17993                _.node(
17994                    'tr',
17995                    _.group({
17996                        min: 0,
17997                        max: DAYS_IN_WEEK - 1,
17998                        i: 1,
17999                        node: 'th',
18000                        item: function( counter ) {
18001                            return [
18002                                collection[ counter ],
18003                                settings.klass.weekdays,
18004                                'scope=col title="' + fullCollection[ counter ] + '"'
18005                            ]
18006                        }
18007                    })
18008                )
18009            ) //endreturn
18010        })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead
18011
18012
18013        // Create the nav for next/prev month.
18014        createMonthNav = function( next ) {
18015
18016            // Otherwise, return the created month tag.
18017            return _.node(
18018                'div',
18019                ' ',
18020                settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (
18021
18022                    // If the focused month is outside the range, disabled the button.
18023                    ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||
18024                    ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?
18025                    ' ' + settings.klass.navDisabled : ''
18026                ),
18027                'data-nav=' + ( next || -1 ) + ' ' + 'tabindex="0" ' +
18028                _.ariaAttr({
18029                    role: 'button',
18030                    controls: calendar.$node[0].id + '_table'
18031                }) + ' ' +
18032                'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"'
18033            ) //endreturn
18034        }, //createMonthNav
18035
18036
18037        // Create the month label.
18038        createMonthLabel = function() {
18039
18040            var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull
18041
18042            // If there are months to select, add a dropdown menu.
18043            if ( settings.selectMonths ) {
18044
18045                return _.node( 'select',
18046                    _.group({
18047                        min: 0,
18048                        max: 11,
18049                        i: 1,
18050                        node: 'option',
18051                        item: function( loopedMonth ) {
18052
18053                            return [
18054
18055                                // The looped month and no classes.
18056                                monthsCollection[ loopedMonth ], 0,
18057
18058                                // Set the value and selected index.
18059                                'value=' + loopedMonth +
18060                                ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +
18061                                (
18062                                    (
18063                                        ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||
18064                                        ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )
18065                                    ) ?
18066                                    ' disabled' : ''
18067                                )
18068                            ]
18069                        }
18070                    }),
18071                    settings.klass.selectMonth,
18072                    ( isOpen ? '' : 'disabled' ) + ' ' +
18073                    _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
18074                    'title="' + settings.labelMonthSelect + '"'
18075                )
18076            }
18077
18078            // If there's a need for a month selector
18079            return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )
18080        }, //createMonthLabel
18081
18082
18083        // Create the year label.
18084        createYearLabel = function() {
18085
18086            var focusedYear = viewsetObject.year,
18087
18088            // If years selector is set to a literal "true", set it to 5. Otherwise
18089            // divide in half to get half before and half after focused year.
18090            numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )
18091
18092            // If there are years to select, add a dropdown menu.
18093            if ( numberYears ) {
18094
18095                var
18096                    minYear = minLimitObject.year,
18097                    maxYear = maxLimitObject.year,
18098                    lowestYear = focusedYear - numberYears,
18099                    highestYear = focusedYear + numberYears
18100
18101                // If the min year is greater than the lowest year, increase the highest year
18102                // by the difference and set the lowest year to the min year.
18103                if ( minYear > lowestYear ) {
18104                    highestYear += minYear - lowestYear
18105                    lowestYear = minYear
18106                }
18107
18108                // If the max year is less than the highest year, decrease the lowest year
18109                // by the lower of the two: available and needed years. Then set the
18110                // highest year to the max year.
18111                if ( maxYear < highestYear ) {
18112
18113                    var availableYears = lowestYear - minYear,
18114                        neededYears = highestYear - maxYear
18115
18116                    lowestYear -= availableYears > neededYears ? neededYears : availableYears
18117                    highestYear = maxYear
18118                }
18119
18120                return _.node( 'select',
18121                    _.group({
18122                        min: lowestYear,
18123                        max: highestYear,
18124                        i: 1,
18125                        node: 'option',
18126                        item: function( loopedYear ) {
18127                            return [
18128
18129                                // The looped year and no classes.
18130                                loopedYear, 0,
18131
18132                                // Set the value and selected index.
18133                                'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )
18134                            ]
18135                        }
18136                    }),
18137                    settings.klass.selectYear,
18138                    ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
18139                    'title="' + settings.labelYearSelect + '"'
18140                )
18141            }
18142
18143            // Otherwise just return the year focused
18144            return _.node( 'div', focusedYear, settings.klass.year )
18145        } //createYearLabel
18146
18147
18148    // Create and return the entire calendar.
18149    return _.node(
18150        'div',
18151        ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +
18152        createMonthNav() + createMonthNav( 1 ),
18153        settings.klass.header
18154    ) + _.node(
18155        'table',
18156        tableHead +
18157        _.node(
18158            'tbody',
18159            _.group({
18160                min: 0,
18161                max: WEEKS_IN_CALENDAR - 1,
18162                i: 1,
18163                node: 'tr',
18164                item: function( rowCounter ) {
18165
18166                    // If Monday is the first day and the month starts on Sunday, shift the date back a week.
18167                    var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0
18168
18169                    return [
18170                        _.group({
18171                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index
18172                            max: function() {
18173                                return this.min + DAYS_IN_WEEK - 1
18174                            },
18175                            i: 1,
18176                            node: 'td',
18177                            item: function( targetDate ) {
18178
18179                                // Convert the time date from a relative date to a target date.
18180                                targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])
18181
18182                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,
18183                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,
18184                                    isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,
18185                                    formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ),
18186                                    calendarNodeUniqueId = settings.id + '_' + targetDate.pick
18187
18188                                return [
18189                                    _.node(
18190                                        'div',
18191                                        targetDate.date,
18192                                        (function( klasses ) {
18193
18194                                            // Add the `infocus` or `outfocus` classes based on month in view.
18195                                            klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )
18196
18197                                            // Add the `today` class if needed.
18198                                            if ( nowObject.pick == targetDate.pick ) {
18199                                                klasses.push( settings.klass.now )
18200                                            }
18201
18202                                            // Add the `selected` class if something's selected and the time matches.
18203                                            if ( isSelected ) {
18204                                                klasses.push( settings.klass.selected )
18205                                            }
18206
18207                                            // Add the `highlighted` class if something's highlighted and the time matches.
18208                                            if ( isHighlighted ) {
18209                                                klasses.push( settings.klass.highlighted )
18210                                            }
18211
18212                                            // Add the `disabled` class if something's disabled and the object matches.
18213                                            if ( isDisabled ) {
18214                                                klasses.push( settings.klass.disabled )
18215                                            }
18216
18217                                            return klasses.join( ' ' )
18218                                        })([ settings.klass.day ]),
18219                                        'data-pick=' + targetDate.pick + ' id=' + calendarNodeUniqueId + ' tabindex="0" ' + _.ariaAttr({
18220                                            role: 'gridcell',
18221                                            label: formattedDate,
18222                                            selected: isSelected && calendar.$node.val() === formattedDate ? true : null,
18223                                            activedescendant: isHighlighted ? targetDate.pick : null,
18224                                            disabled: isDisabled ? true : null
18225                                        })
18226                                    ),
18227                                    ''
18228                                ] //endreturn
18229                            }
18230                        })
18231                    ] //endreturn
18232                }
18233            })
18234        ),
18235        settings.klass.table,
18236        'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({
18237            role: 'grid',
18238            controls: calendar.$node[0].id,
18239            readonly: true
18240        })
18241    ) +
18242
18243    // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.
18244    _.node(
18245        'div',
18246        _.node( 'button', settings.today, settings.klass.buttonToday,
18247            'type=button data-pick=' + nowObject.pick +
18248            ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +
18249            _.ariaAttr({ controls: calendar.$node[0].id }) ) +
18250        _.node( 'button', settings.clear, settings.klass.buttonClear,
18251            'type=button data-clear=1' +
18252            ( isOpen ? '' : ' disabled' ) + ' ' +
18253            _.ariaAttr({ controls: calendar.$node[0].id }) ) +
18254        _.node('button', settings.close, settings.klass.buttonClose,
18255            'type=button data-close=true ' +
18256            ( isOpen ? '' : ' disabled' ) + ' ' +
18257            _.ariaAttr({ controls: calendar.$node[0].id }) ),
18258        settings.klass.footer
18259    ) //endreturn
18260} //DatePicker.prototype.nodes
18261
18262
18263
18264
18265/**
18266 * The date picker defaults.
18267 */
18268DatePicker.defaults = (function( prefix ) {
18269
18270    return {
18271
18272        // The title label to use for the month nav buttons
18273        labelMonthNext: 'Next month',
18274        labelMonthPrev: 'Previous month',
18275
18276        // The title label to use for the dropdown selectors
18277        labelMonthSelect: 'Select a month',
18278        labelYearSelect: 'Select a year',
18279
18280        // Months and weekdays
18281        monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
18282        monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
18283        weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
18284        weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
18285
18286        // Today and clear
18287        today: 'Today',
18288        clear: 'Clear',
18289        close: 'Close',
18290
18291        // Picker close behavior
18292        closeOnSelect: true,
18293        closeOnClear: true,
18294
18295        // Update input value on select/clear
18296        updateInput: true,
18297
18298        // The format to show on the `input` element
18299        format: 'd mmmm, yyyy',
18300
18301        // Classes
18302        klass: {
18303
18304            table: prefix + 'table',
18305
18306            header: prefix + 'header',
18307
18308            navPrev: prefix + 'nav--prev',
18309            navNext: prefix + 'nav--next',
18310            navDisabled: prefix + 'nav--disabled',
18311
18312            month: prefix + 'month',
18313            year: prefix + 'year',
18314
18315            selectMonth: prefix + 'select--month',
18316            selectYear: prefix + 'select--year',
18317
18318            weekdays: prefix + 'weekday',
18319
18320            day: prefix + 'day',
18321            disabled: prefix + 'day--disabled',
18322            selected: prefix + 'day--selected',
18323            highlighted: prefix + 'day--highlighted',
18324            now: prefix + 'day--today',
18325            infocus: prefix + 'day--infocus',
18326            outfocus: prefix + 'day--outfocus',
18327
18328            footer: prefix + 'footer',
18329
18330            buttonClear: prefix + 'button--clear',
18331            buttonToday: prefix + 'button--today',
18332            buttonClose: prefix + 'button--close'
18333        }
18334    }
18335})( Picker.klasses().picker + '__' )
18336
18337
18338
18339
18340
18341/**
18342 * Extend the picker to add the date picker.
18343 */
18344Picker.extend( 'pickadate', DatePicker )
18345
18346
18347}));
18348
18349
18350
18351;
18352
18353Date.prototype.addDays = function(days) {
18354    this.setDate(this.getDate() + days);
18355    return this;
18356};;
18357(function (global, factory) {
18358	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
18359	typeof define === 'function' && define.amd ? define(factory) :
18360	(global.Splitting = factory());
18361}(this, (function () { 'use strict';
18362
18363var root = document;
18364var createText = root.createTextNode.bind(root);
18365
18366/**
18367 * # setProperty
18368 * Apply a CSS var
18369 * @param {HTMLElement} el
18370 * @param {string} varName 
18371 * @param {string|number} value 
18372 */
18373function setProperty(el, varName, value) {
18374    el.style.setProperty(varName, value);
18375} 
18376
18377/**
18378 * 
18379 * @param {!HTMLElement} el 
18380 * @param {!HTMLElement} child 
18381 */
18382function appendChild(el, child) {
18383  return el.appendChild(child);
18384}
18385
18386/**
18387 * 
18388 * @param {!HTMLElement} parent 
18389 * @param {string} key 
18390 * @param {string} text 
18391 * @param {boolean} whitespace 
18392 */
18393function createElement(parent, key, text, whitespace) {
18394  var el = root.createElement('span');
18395  key && (el.className = key); 
18396  if (text) { 
18397      !whitespace && el.setAttribute("data-" + key, text);
18398      el.textContent = text; 
18399  }
18400  return (parent && appendChild(parent, el)) || el;
18401}
18402
18403/**
18404 * 
18405 * @param {!HTMLElement} el 
18406 * @param {string} key 
18407 */
18408function getData(el, key) {
18409  return el.getAttribute("data-" + key)
18410}
18411
18412/**
18413 * 
18414 * @param {import('../types').Target} e 
18415 * @param {!HTMLElement} parent
18416 * @returns {!Array<!HTMLElement>}
18417 */
18418function $(e, parent) {
18419    return !e || e.length == 0
18420        ? // null or empty string returns empty array
18421          []
18422        : e.nodeName
vendor: 3,274 bytes, lines 18423-18562
18423            ? // a single element is wrapped in an array
18424              [e]
18425            : // selector and NodeList are converted to Element[]
18426              [].slice.call(e[0].nodeName ? e : (parent || root).querySelectorAll(e));
18427}
18428
18429/**
18430 * Creates and fills an array with the value provided
18431 * @param {number} len
18432 * @param {() => T} valueProvider
18433 * @return {T}
18434 * @template T
18435 */
18436function Array2D(len) {
18437    var a = [];
18438    for (; len--; ) {
18439        a[len] = [];
18440    }
18441    return a;
18442}
18443
18444/**
18445 * A for loop wrapper used to reduce js minified size.
18446 * @param {!Array<T>} items 
18447 * @param {function(T):void} consumer
18448 * @template T
18449 */
18450function each(items, consumer) {
18451    items && items.some(consumer);
18452}
18453
18454/**
18455 * @param {T} obj 
18456 * @return {function(string):*}
18457 * @template T
18458 */
18459function selectFrom(obj) {
18460    return function (key) {
18461        return obj[key];
18462    }
18463}
18464
18465/**
18466 * # Splitting.index
18467 * Index split elements and add them to a Splitting instance.
18468 *
18469 * @param {HTMLElement} element
18470 * @param {string} key 
18471 * @param {!Array<!HTMLElement> | !Array<!Array<!HTMLElement>>} items 
18472 */
18473function index(element, key, items) {
18474    var prefix = '--' + key;
18475    var cssVar = prefix + "-index";
18476
18477    each(items, function (items, i) {
18478        if (Array.isArray(items)) {
18479            each(items, function(item) {
18480                setProperty(item, cssVar, i);
18481            });
18482        } else {
18483            setProperty(items, cssVar, i);
18484        }
18485    });
18486
18487    setProperty(element, prefix + "-total", items.length);
18488}
18489
18490/**
18491 * @type {Record<string, import('./types').ISplittingPlugin>}
18492 */
18493var plugins = {};
18494
18495/**
18496 * @param {string} by
18497 * @param {string} parent
18498 * @param {!Array<string>} deps
18499 * @return {!Array<string>}
18500 */
18501function resolvePlugins(by, parent, deps) {
18502    // skip if already visited this dependency
18503    var index = deps.indexOf(by);
18504    if (index == -1) {
18505        // if new to dependency array, add to the beginning
18506        deps.unshift(by);
18507
18508        // recursively call this function for all dependencies
18509        var plugin = plugins[by];
18510        if (!plugin) {
18511            throw new Error("plugin not loaded: " + by);
18512        }
18513        each(plugin.depends, function(p) {
18514            resolvePlugins(p, by, deps);
18515        });
18516    } else {
18517        // if this dependency was added already move to the left of
18518        // the parent dependency so it gets loaded in order
18519        var indexOfParent = deps.indexOf(parent);
18520        deps.splice(index, 1);
18521        deps.splice(indexOfParent, 0, by);
18522    }
18523    return deps;
18524}
18525
18526/**
18527 * Internal utility for creating plugins... essentially to reduce
18528 * the size of the library
18529 * @param {string} by 
18530 * @param {string} key 
18531 * @param {string[]} depends 
18532 * @param {Function} split 
18533 * @returns {import('./types').ISplittingPlugin}
18534 */
18535function createPlugin(by, depends, key, split) {
18536    return {
18537        by: by,
18538        depends: depends,
18539        key: key,
18540        split: split
18541    }
18542}
18543
18544/**
18545 *
18546 * @param {string} by
18547 * @returns {import('./types').ISplittingPlugin[]}
18548 */
18549function resolve(by) {
18550    return resolvePlugins(by, 0, []).map(selectFrom(plugins));
18551}
18552
18553/**
18554 * Adds a new plugin to splitting
18555 * @param {import('./types').ISplittingPlugin} opts
18556 */
18557function add(opts) {
18558    plugins[opts.by] = opts;
18559}
18560
18561/**
18562 * # Splitting.split
18563 * Split an element's textContent into individual elements
18564 * @param {!HTMLElement} el  Element to split
18565 * @param {string} key 
18566 * @param {string} splitOn 
18567 * @param {boolean} includePrevious 
18568 * @param {boolean} preserveWhitespace
18569 * @return {!Array<!HTMLElement>}
18570 */
18571function splitText(el, key, splitOn, includePrevious, preserveWhitespace) {
18572    // Combine any strange text nodes or empty whitespace.
18573    el.normalize();
18574
18575    // Use fragment to prevent unnecessary DOM thrashing.
18576    var elements = [];
18577    var F = document.createDocumentFragment();
18578
18579    if (includePrevious) {
18580        elements.push(el.previousSibling);
18581    }
18582
18583    var allElements = [];
18584    $(el.childNodes).some(function(next) {
18585        if (next.tagName && !next.hasChildNodes()) {
18586            // keep elements without child nodes (no text and no children)
18587            allElements.push(next);
18588            return;
18589        }
18590        // Recursively run through child nodes
18591        if (next.childNodes && next.childNodes.length) {
18592            allElements.push(next);
18593            elements.push.apply(elements, splitText(next, key, splitOn, includePrevious, preserveWhitespace));
18594            return;
18595        }
18596
18597        // Get the text to split, trimming out the whitespace
18598        /** @type {string} */
18599        var wholeText = next.wholeText || '';
18600        var contents = wholeText.trim();
18601
18602        // If there's no text left after trimming whitespace, continue the loop
18603        if (contents.length) {
18604            // insert leading space if there was one
18605            if (wholeText[0] === ' ') {
18606                allElements.push(createText(' '));
18607            }
18608            // Concatenate the split text children back into the full array
18609            each(contents.split(splitOn), function
vendor: 6,836 bytes, lines 18609-18897
18609(splitText, i) {
18610                if (i && preserveWhitespace) {
18611                    allElements.push(createElement(F, "whitespace", " ", preserveWhitespace));
18612                }
18613                var splitEl = createElement(F, key, splitText);
18614                elements.push(splitEl);
18615                allElements.push(splitEl);
18616            }); 
18617            // insert trailing space if there was one
18618            if (wholeText[wholeText.length - 1] === ' ') {
18619                allElements.push(createText(' '));
18620            }
18621        }
18622    });
18623
18624    each(allElements, function(el) {
18625        appendChild(F, el);
18626    });
18627
18628    // Clear out the existing element
18629    el.innerHTML = "";
18630    appendChild(el, F);
18631    return elements;
18632}
18633
18634/** an empty value */
18635var _ = 0;
18636
18637function copy(dest, src) {
18638    for (var k in src) {
18639        dest[k] = src[k];
18640    }
18641    return dest;
18642}
18643
18644var WORDS = 'words';
18645
18646var wordPlugin = createPlugin(
18647    /* by= */ WORDS,
18648    /* depends= */ _,
18649    /* key= */ 'word', 
18650    /* split= */ function(el) {
18651        return splitText(el, 'word', /\s+/, 0, 1)
18652    }
18653);
18654
18655var CHARS = "chars";
18656
18657var charPlugin = createPlugin(
18658    /* by= */ CHARS,
18659    /* depends= */ [WORDS],
18660    /* key= */ "char", 
18661    /* split= */ function(el, options, ctx) {
18662        var results = [];
18663
18664        each(ctx[WORDS], function(word, i) {
18665            results.push.apply(results, splitText(word, "char", "", options.whitespace && i));
18666        });
18667
18668        return results;
18669    }
18670);
18671
18672/**
18673 * # Splitting
18674 * 
18675 * @param {import('./types').ISplittingOptions} opts
18676 * @return {!Array<*>}
18677 */
18678function Splitting (opts) {
18679  opts = opts || {};
18680  var key = opts.key;
18681
18682  return $(opts.target || '[data-splitting]').map(function(el) {
18683    var ctx = el['🍌'];  
18684    if (!opts.force && ctx) {
18685      return ctx;
18686    }
18687
18688    ctx = el['🍌'] = { el: el };
18689    var by = opts.by || getData(el, 'splitting');
18690    if (!by || by == 'true') {
18691      by = CHARS;
18692    }
18693    var items = resolve(by);
18694    var opts2 = copy({}, opts);
18695    each(items, function(plugin) {
18696      if (plugin.split) {
18697        var pluginBy = plugin.by;
18698        var key2 = (key ? '-' + key : '') + plugin.key;
18699        var results = plugin.split(el, opts2, ctx);
18700        key2 && index(el, key2, results);
18701        ctx[pluginBy] = results;
18702        el.classList.add(pluginBy);
18703      } 
18704    });
18705
18706    el.classList.add('splitting');
18707    return ctx;
18708  })
18709}
18710
18711/**
18712 * # Splitting.html
18713 * 
18714 * @param {import('./types').ISplittingOptions} opts
18715 */
18716function html(opts) {
18717  opts = opts || {};
18718  var parent = opts.target =  createElement();
18719  parent.innerHTML = opts.content;
18720  Splitting(opts);
18721  return parent.outerHTML
18722}
18723
18724Splitting.html = html;
18725Splitting.add = add;
18726
18727/**
18728 * Detects the grid by measuring which elements align to a side of it.
18729 * @param {!HTMLElement} el 
18730 * @param {import('../core/types').ISplittingOptions} options
18731 * @param {*} side 
18732 */
18733function detectGrid(el, options, side) {
18734    var items = $(options.matching || el.children, el);
18735    var c = {};
18736
18737    each(items, function(w) {
18738        var val = Math.round(w[side]);
18739        (c[val] || (c[val] = [])).push(w);
18740    });
18741
18742    return Object.keys(c).map(Number).sort(byNumber).map(selectFrom(c));
18743}
18744
18745/**
18746 * Sorting function for numbers.
18747 * @param {number} a 
18748 * @param {number} b
18749 * @return {number} 
18750 */
18751function byNumber(a, b) {
18752    return a - b;
18753}
18754
18755var linePlugin = createPlugin(
18756    /* by= */ 'lines',
18757    /* depends= */ [WORDS],
18758    /* key= */ 'line',
18759    /* split= */ function(el, options, ctx) {
18760      return detectGrid(el, { matching: ctx[WORDS] }, 'offsetTop')
18761    }
18762);
18763
18764var itemPlugin = createPlugin(
18765    /* by= */ 'items',
18766    /* depends= */ _,
18767    /* key= */ 'item', 
18768    /* split= */ function(el, options) {
18769        return $(options.matching || el.children, el)
18770    }
18771);
18772
18773var rowPlugin = createPlugin(
18774    /* by= */ 'rows',
18775    /* depends= */ _,
18776    /* key= */ 'row', 
18777    /* split= */ function(el, options) {
18778        return detectGrid(el, options, "offsetTop");
18779    }
18780);
18781
18782var columnPlugin = createPlugin(
18783    /* by= */ 'cols',
18784    /* depends= */ _,
18785    /* key= */ "col", 
18786    /* split= */ function(el, options) {
18787        return detectGrid(el, options, "offsetLeft");
18788    }
18789);
18790
18791var gridPlugin = createPlugin(
18792    /* by= */ 'grid',
18793    /* depends= */ ['rows', 'cols']
18794);
18795
18796var LAYOUT = "layout";
18797
18798var layoutPlugin = createPlugin(
18799    /* by= */ LAYOUT,
18800    /* depends= */ _,
18801    /* key= */ _,
18802    /* split= */ function(el, opts) {
18803        // detect and set options
18804        var rows =  opts.rows = +(opts.rows || getData(el, 'rows') || 1);
18805        var columns = opts.columns = +(opts.columns || getData(el, 'columns') || 1);
18806
18807        // Seek out the first <img> if the value is true 
18808        opts.image = opts.image || getData(el, 'image') || el.currentSrc || el.src;
18809        if (opts.image) {
18810            var img = $("img", el)[0];
18811            opts.image = img && (img.currentSrc || img.src);
18812        }
18813
18814        // add optional image to background
18815        if (opts.image) {
18816            setProperty(el, "background-image", "url(" + opts.image + ")");
18817        }
18818
18819        var totalCells = rows * columns;
18820        var elements = [];
18821
18822        var container = createElement(_, "cell-grid");
18823        while (totalCells--) {
18824            // Create a span
18825            var cell = createElement(container, "cell");
18826            createElement(cell, "cell-inner");
18827            elements.push(cell);
18828        }
18829
18830        // Append elements back into the parent
18831        appendChild(el, container);
18832
18833        return elements;
18834    }
18835);
18836
18837var cellRowPlugin = createPlugin(
18838    /* by= */ "cellRows",
18839    /* depends= */ [LAYOUT],
18840    /* key= */ "row",
18841    /* split= */ function(el, opts, ctx) {
18842        var rowCount = opts.rows;
18843        var result = Array2D(rowCount);
18844
18845        each(ctx[LAYOUT], function(cell, i, src) {
18846            result[Math.floor(i / (src.length / rowCount))].push(cell);
18847        });
18848
18849        return result;
18850    }
18851);
18852
18853var cellColumnPlugin = createPlugin(
18854    /* by= */ "cellColumns",
18855    /* depends= */ [LAYOUT],
18856    /* key= */ "col",
18857    /* split= */ function(el, opts, ctx) {
18858        var columnCount = opts.columns;
18859        var result = Array2D(columnCount);
18860
18861        each(ctx[LAYOUT], function(cell, i) {
18862            result[i % columnCount].push(cell);
18863        });
18864
18865        return result;
18866    }
18867);
18868
18869var cellPlugin = createPlugin(
18870    /* by= */ "cells",
18871    /* depends= */ ['cellRows', 'cellColumns'],
18872    /* key= */ "cell", 
18873    /* split= */ function(el, opt, ctx) { 
18874        // re-index the layout as the cells
18875        return ctx[LAYOUT];
18876    }
18877);
18878
18879// install plugins
18880// word/char plugins
18881add(wordPlugin);
18882add(charPlugin);
18883add(linePlugin);
18884// grid plugins
18885add(itemPlugin);
18886add(rowPlugin);
18887add(columnPlugin);
18888add(gridPlugin);
18889// cell-layout plugins
18890add(layoutPlugin);
18891add(cellRowPlugin);
18892add(cellColumnPlugin);
18893add(cellPlugin);
18894
18895return Splitting;
18896
18897})));
vendor: 3,972 bytes, lines 18898-18905
18898;
18899/*!
18900 * imagesLoaded PACKAGED v4.1.4
18901 * JavaScript is all like "You images are done yet or what?"
18902 * MIT License
18903 */
18904
18905!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(e,r),delete n[r]),r.apply(this,t)}return this}},t.allOff=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){if(Array.isArray(e))return e;var t="object"==typeof e&&"number"==typeof e.length;return t?d.call(e):[e]}function o(e,t,r){if(!(this instanceof o))return new o(e,t,r);var s=e;return"string"==typeof e&&(s=document.querySelectorAll(e)),s?(this.elements=n(s),this.options=i({},this.options),"function"==typeof t?r=t:i(this.options,t),r&&this.on("always",r),this.getImages(),h&&(this.jqDeferred=new h.Deferred),void setTimeout(this.check.bind(this))):void a.error("Bad element for imagesLoaded "+(s||e))}function r(e){this.img=e}function s(e,t){this.url=e,this.element=t,this.img=new Image}var h=e.jQuery,a=e.console,d=Array.prototype.slice;o.prototype=Object.create(t.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(e){"IMG"==e.nodeName&&this.addImage(e),this.options.background===!0&&this.addElementBackgroundImages(e);var t=e.nodeType;if(t&&u[t]){for(var i=e.querySelectorAll("img"),n=0;n<i.length;n++){var o=i[n];this.addImage(o)}if("string"==typeof this.options.background){var r=e.querySelectorAll(this.options.background);for(n=0;n<r.length;n++){var s=r[n];this.addElementBackgroundImages(s)}}}};var u={1:!0,9:!0,11:!0};return o.prototype.addElementBackgroundImages=function(e){var t=getComputedStyle(e);if(t)for(var i=/url\((['"])?(.*?)\1\)/gi,n=i.exec(t.backgroundImage);null!==n;){var o=n&&n[2];o&&this.addBackground(o,e),n=i.exec(t.backgroundImage)}},o.prototype.addImage=function(e){var t=new r(e);this.images.push(t)},o.prototype.addBackground=function(e,t){var i=new s(e,t);this.images.push(i)},o.prototype.check=function(){function e(e,i,n){setTimeout(function(){t.progress(e,i,n)})}var t=this;return this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?void this.images.forEach(function(t){t.once("progress",e),t.check()}):void this.complete()},o.prototype.progress=function(e,t,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&a&&a.log("progress: "+i,e,t)},o.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){var t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},r.prototype=Object.create(t.prototype),r.prototype.check=function(){var e=this.getIsImageComplete();
vendor: 1,626 bytes, line 18905
18905return e?void this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),void(this.proxyImage.src=this.img.src))},r.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},r.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.img,t])},r.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},r.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},r.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},r.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype=Object.create(r.prototype),s.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url;var e=this.getIsImageComplete();e&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},s.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},o.makeJQueryPlugin=function(t){t=t||e.jQuery,t&&(h=t,h.fn.imagesLoaded=function(e,t){var i=new o(this,e,t);return i.jqDeferred.promise(h(this))})},o.makeJQueryPlugin(),o});;
vendor: 24,103 bytes, lines 18906-18914
18906/*!
18907 * Masonry PACKAGED v4.2.2
18908 * Cascading grid layout library
18909 * https://masonry.desandro.com
18910 * MIT License
18911 * by David DeSandro
18912 */
18913
18914!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,a){function h(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var d=u[e];if(!d||"_"==e.charAt(0))return void s(r+" is not a valid method");var l=d.apply(u,n);o=void 0===o?l:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(t,r),delete n[r]),r.apply(this,e)}return this}},e.allOff=function(){delete this._events,delete this._onceEvents},t}),function(t,e){"function"==typeof define&&define.amd?define("get-size/get-size",e):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e};var n=Array.prototype.slice;i.makeArray=function(t){if(Array.isArray(t))return t;if(null===t||void 0===t)return[];var e="object"==typeof t&&"number"==typeof t.length;return e?n.call(t):[t]},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t.parentNode&&t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),r=0;r<i.length;r++)o.push(i[r])}}),o},i.debounceMethod=function(t,e,i){i=i||100;var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];clearTimeout(t);var e=arguments,r=this;this[o]=setTimeout(function(){n.apply(r,e),delete r[o]},i)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?setTimeout(t):document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var o=t.console;return i.htmlInit=function(e,n){i.docReady(function(){var r=i.toDashed(n),s="data-"+r,a=document.querySelectorAll("["+s+"]"),h=document.querySelectorAll(".js-"+r),u=i.makeArray(a).concat(i.makeArray(h)),d=s+"-options",l=t.jQuery;u.forEach(function(t){var i,r=t.getAttribute(s)||t.getAttribute(d);try{i=r&&JSON.parse(r)}catch(a){return void(o&&o.error("Error parsing "+s+" on "+t.className+": "+a))}var h=new e(t,i);l&&l.data(t,n,h)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var r=document.documentElement.style,s="string"==typeof r.transition?"transition":"WebkitTransition",a="string"==typeof r.transform?"transform":"WebkitTransform",h={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[s],u={transform:a,transition:s,transitionDuration:s+"Duration",transitionProperty:s+"Property",transitionDelay:s+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=u[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],r=parseFloat(n),s=parseFloat(o),a=this.layout.size;-1!=n.indexOf("%")&&(r=r/100*a.width),-1!=o.indexOf("%")&&(s=s/100*a.height),r=isNaN(r)?0:r,s=isNaN(s)?0:s,r-=e?a.paddingLeft:a.paddingRight,s-=i?a.paddingTop:a.paddingBottom,this.position.x=r,this.position.y=s},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",r=i?"left":"right",s=i?"right":"left",a=this.position.x+t[o];e[r]=this.getXValue(a),e[s]="";var h=n?"paddingTop":"paddingBottom",u=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[h];e[u]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=t==this.position.x&&e==this.position.y;if(this.setPosition(t,e),o&&!this.isTransitioning)return void this.layoutPosition();var r=t-i,s=e-n,a={};a.transform=this.getTranslate(r,s),this.transition({to:a,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseFloat(t),this.position.y=parseFloat(e)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(h,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var c={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=c[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(h,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var f={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(f)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return s&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,r){return e(t,i,n,o,r)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function r(t,e){var i=n.getQueryElement(t);if(!i)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,u&&(this.$element=u(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,c[o]=this,this._create();var r=this._getOption("initLayout");r&&this.layout()}function s(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var h=t.console,u=t.jQuery,d=function(){},l=0,c={};r.namespace="outlayer",r.Item=o,r.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var f=r.prototype;n.extend(f,e.prototype),f.option=function(t){n.extend(this.options,t)},f._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},r.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},f._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},f.reloadItems=function(){this.items=this._itemize(this.element.children)},f._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var r=e[o],s=new i(r,this);n.push(s)}return n},f._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},f.getItemElements=function(){return this.items.map(function(t){return t.element})},f.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},f._init=f.layout,f._resetLayout=function(){this.getSize()},f.getSize=function(){this.size=i(this.element)},f._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},f.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},f._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},f._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},f._getItemLayoutPosition=function(){return{x:0,y:0}},f._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},f.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},f._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},f._postLayout=function(){this.resizeContainer()},f.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},f._getContainerSize=d,f._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},f._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){s++,s==r&&i()}var o=this,r=e.length;if(!e||!r)return void i();var s=0;e.forEach(function(e){e.once(t,n)})},f.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),u)if(this.$element=this.$element||u(this.element),e){var o=u.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},f.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},f.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},f.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},f.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},f._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},f._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},f._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},f._manageStamp=d,f._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),r={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return r},f.handleEvent=n.handleEvent,f.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},f.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},f.onresize=function(){this.resize()},n.debounceMethod(r,"onresize",100),f.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},f.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},f.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},f.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},f.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},f.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},f.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},f.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},f.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},f.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},f.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},f.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},f.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete c[e],delete this.element.outlayerGUID,u&&u.removeData(this.element,this.constructor.namespace)},r.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&c[e]},r.create=function(t,e){var i=s(r);return i.defaults=n.extend({},r.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},r.compatOptions),i.namespace=t,i.data=r.data,i.Item=s(o),n.htmlInit(i,t),u&&u.bridget&&u.bridget(t,i),i};var m={ms:1,s:1e3};return r.Item=o,r}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");i.compatOptions.fitWidth="isFitWidth";var n=i.prototype;return n._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0,this.horizontalColIndex=0},n.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,r=o/n,s=n-o%n,a=s&&1>s?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i});
18914;
18915/**
18916 * @author Sotiris
18917 * @since 2023-04-20
18918 * Class called Menu that handles the opening and closing of a modal menu.
18919 * It takes an app parameter and provides methods to open and close the menu and update its state.
18920 * This code provides a simple and effective way to control the state of a modal menu in a web application.
18921 */
18922
18923class Menu {
18924    //menuBtn = document.getElementById('menuOpen');
18925  //  menuBtnClose = document.getElementById('menuClose');
18926    constructor(app) {
18927        console.log('Menu');
18928        this._app = app;
18929        this.menuState = false;
18930        this.menuBtn = document.getElementById('menuOpen');
18931        this.menuBtnClose = document.getElementById('menuClose');
18932
18933        this.menuBtn.addEventListener('click', () => {
18934            if(this.menuState){
18935                this.menuClose();
18936            }else{
18937                this.menuOpen();
18938            }
18939        });
18940        this.menuBtnClose.addEventListener('click',() => {
18941                this.menuClose();
18942        });
18943    }
18944
18945    menuClose(){
18946        this._app.modalClose();
18947        document.getElementById('menu-modal-area').classList.remove('open');
18948        this.menuBtn.classList.remove('open');
18949        this.menuState=false;
18950        this._app.ModalStateName = ModalList.REMOVE;
18951    }
18952    menuOpen(){
18953        this._app.modalOpen();
18954        this.menuState=true;
18955        document.getElementById('menu-modal-area').classList.add('open');
18956        this.menuBtn.classList.add('open');
18957        this._app.ModalStateName = ModalList.MENU;
18958    }
18959
18960}
18961
18962;
18963/**
18964 * @author Sotiris
18965 * @since 2023
18966 * Class called Tour that handles the favorites Tours.
18967 */
18968
18969class Tour {
18970
18971    constructor() {
18972        this.favorites = [];
18973        this.recent = [];
18974        this.favoriteButtons=[];
18975
18976        this.getRecent();
18977        this.getFavorites();
18978        this.setCountFavorites();
18979        this.favoriteButtons =   Array.from(document.querySelectorAll("[data-favorite-btn]"));
18980        this.favoriteButtons.forEach((elem,idx)=> {
18981            let nodeId = elem.getAttribute('data-favorite-btn');
18982            elem.addEventListener('click', () => {
18983                if (this.isFavorite(nodeId)) {
18984                    this.removeFavorite(nodeId);
18985                } else {
18986                    this.addToFavorites(nodeId);
18987                }
18988            });
18989        });
18990       this.checkFavoritesButtons();
18991
18992        const pathname = window.location.pathname;
18993        //fix path on favourites share Btns
18994        if(pathname==='/favourites') {
18995
18996            let btnRemoveAllFavorites = document.getElementById('removeAllFavorites');
18997            btnRemoveAllFavorites.addEventListener('click',()=>{
18998                this.favorites = [];
18999                this.saveFavorites();
19000                window.location='/';
19001
19002            });
19003
19004            if (window.location.search) {
19005                let elemsShare = document.body.querySelectorAll('.social-sharing-buttons a');
19006                Array.from(elemsShare).forEach((item) => {
19007                    item.href = item.href.replace('/favourites', '/favourites' + window.location.search);
19008                });
19009            }
19010        }
19011    }
19012
19013
19014
19015    checkFavoritesButtons(){
19016
19017        this.favoriteButtons.forEach((elem,idx)=>{
19018            let nodeId  = elem.getAttribute('data-favorite-btn');
19019            if(this.isFavorite(nodeId)){
19020                elem.classList.add('is-favorite');
19021            }else{
19022                elem.classList.remove('is-favorite');
19023            }
19024           // console.log(idx,nodeId,this.isFavorite(nodeId));
19025        });
19026
19027    }
19028
19029
19030    /**
19031     * Change the dom element id #favoritesCount with the length of the list (count)
19032     */
19033    setCountFavorites(){
19034
19035
19036        //console.log(this.favorites);
19037
19038
19039
19040        let LocationFav =  ()=>{
19041            if(this.favorites.length >0) {
19042                location.href = '/favourites?id=' + this.favorites.join(',');
19043            }
19044        }
19045
19046        Array.from(document.getElementsByClassName('btn-header-favorite')).forEac
19046h((elem)=>{
19047               if(this.favorites.length >0) {
19048                   elem.classList.add('active');
19049                    elem.addEventListener('click',LocationFav);
19050               }else{
19051                   elem.classList.remove('active');
19052                   elem.removeEventListener('click',LocationFav);
19053               }
19054           });
19055        Array.from(document.getElementsByClassName('favoritesCount')).forEach((elem)=>{
19056            if(this.favorites.length >0) {
19057                elem.innerText = this.favorites.length + "";
19058            }else{
19059                elem.innerText = "";
19060            }
19061        });
19062
19063    }
19064
19065
19066    /**
19067     * Add Node to Favorites list
19068     *
19069     * @param id
19070     */
19071    addToFavorites(id){
19072        if (!this.favorites.includes(id)) {
19073            this.favorites.push(id);
19074        }
19075        this.saveFavorites();
19076    }
19077
19078
19079    /**
19080     * Save Favorites Nodes to local storage
19081     */
19082    saveFavorites(){
19083        localStorage.setItem("favorites",JSON.stringify(this.favorites));
19084        this.setCountFavorites();
19085        this.checkFavoritesButtons();
19086    }
19087
19088
19089    /**
19090     * Check if the Node is on favorites list
19091     *
19092     * @param id
19093     */
19094    isFavorite(id){
19095        const index = this.favorites.indexOf(id);
19096        if (index > -1) {
19097           return true;
19098        }else{
19099           return false;
19100        }
19101    }
19102
19103    /**
19104     * Remove Node id from favorite list nad save to local storage
19105     *
19106      * @param id
19107     */
19108    removeFavorite(id){
19109        const index = this.favorites.indexOf(id);
19110        if (index > -1) {
19111            this.favorites.splice(index, 1);
19112        }
19113        this.saveFavorites();
19114    }
19115
19116
19117    /**
19118     * Save Node on recent list save to local storage this action triggers every time to visit tour page
19119     *
19120     * @param id
19121     */
19122    saveRecent(id){
19123        localStorage.setItem("recent",JSON.stringify(this.recent));
19124    }
19125
19126
19127    /**
19128     * Get the list of recent
19129     */
19130    getRecent(){
19131        this.recent =  JSON.parse(localStorage.getItem('recent')) || [];
19132    }
19133
19134
19135    /**
19136     * Get the favorites list
19137     */
19138    getFavorites() {
19139        this.favorites =  JSON.parse(localStorage.getItem('favorites')) || [];
19140    }
19141}
19142window.addEventListener('load',()=>{
19143    setTimeout(()=> {
19144        let tour = new Tour();
19145    },500);
19146});
19147
19148
19149;
19150/**
19151 * @author Sotiris
19152 * @since 2023-04-24
19153 * Class called GalleryModal that handles the opening and closing of a gallery modal.
19154 * It takes an app parameter and provides methods to open and close the menu and update its state.
19155 */
19156
19157class GalleryModal {
19158
19159    constructor(app) {
19160        this._app = app;
19161        this.galleryCloseBtn = document.getElementById('close-gallery');
19162        this.galleryOpenBtn = document.getElementsByClassName('open-gallery');
19163        this.galleryState = false;
19164
19165        //if(document.getElementsByTagName('body').item(0).classList.contains('gallery')) {
19166       // console.log(document.getElementById("block-gallery"));
19167        if(document.getElementById("block-gallery")) {
19168
19169            this.galleryCloseBtn.addEventListener('click', () => {
19170                this.galleryClose();
19171            })
19172
19173            Array.from(this.galleryOpenBtn).forEach((element, index) => {
19174               // console.log(element);
19175                element.addEventListener('click', (Ev) => {
19176                    this.galleryOpen(index);
19177                });
19178            })
19179        }
19180    }
19181
19182    galleryClose(){
19183        this._app.modalClose();
19184        this.galleryState=false;
19185        document.getElementById('modal-gallery').classList.remove('open');
19186        this._app.ModalStateName = ModalList.REMOVE;
19187       // jQuery('video').each(function (){
19188       //     jQuery(this).get(0).pause();
19189       // });
19190    }
19191
19192
19193
19194
19195
19196    galleryOpen(index){
19197       // console.log('galleryOpen',index);
19198        this._app.modalOpen();
19199        this.galleryState=true;
19200        document.getElementById('modal-gallery').classList.add('open');
19201        this._app.ModalStateName = ModalList.GALLERY;
19202        let swiperGalleryModal = document.querySelector('.modal-gallery-images').swiper;
19203        swiperGalleryModal.slideTo(Number(index)+1);
19204    }
19205
19206}
19207
19208;
19209
19210class appMoblac {
19211
19212    constructor() {
19213        this.elemBody = document.getElementsByTagName('body')[0];
19214        this.ModalStateName = '';  // name from modal list to remember to close if keydown press.
19215    }
19216    modalState(){
19217        return this.elemBody.classList.contains('modal-open');
19218    }
19219    modalToggle(){
19220        if (this.modalState()) {
19221            this.modalClose();
19222        }else{
19223            this.modalOpen();
19224        }
19225    }
19226
19227    modalOpen(){
19228      this.elemBody.classList.add('modal-open');
19229    }
19230
19231    modalClose(){
19232      this.elemBody.classList.remove('modal-open');
19233    }
19234}
19235
19236
19237ModalList = {
19238    REMOVE :'',
19239    MENU :'MENU',
19240    POPUP:'POPUP',
19241    MODAL:'MODAL',
19242    GALLERY:'GALLERY'
19243}
19244
19245
19246
19247
19248function init() {
19249    let app =  new appMoblac();
19250    let menu =  new Menu(app);
19251    let galleryModal =  new GalleryModal(app);
19252  //  console.log('Init');
19253
19254
19255
19256    document.onkeydown = function (evt) {
19257        evt = evt || window.event;
19258        var isEscape = false;
19259        if ("key" in evt) {
19260            isEscape = (evt.key === "Escape" || evt.key === "Esc");
19261        } else {
19262            isEscape = (evt.keyCode === 27);
19263        }
19264        if (isEscape) {
19265
19266            switch (app.ModalStateName){
19267                case ModalList.MENU:
19268                    menu.menuClose();
19269                    break;
19270                case ModalList.MODAL:
19271                    modal.Close();
19272                    break;
19273                case ModalList.GALLERY:
19274                    galleryModal.galleryClose();
19275                    break;
19276                default:
19277                    break;
19278
19279            }
19280
19281        }
19282    };
19283}
19284
19285
19286
19287
19288(function ($) {
19289    $(document).ready(function () {
19290//window.addEventListener('load',()=>{
19291    //console.log('load');
19292    init();
19293        var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
19294        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
19295            return new bootstrap.Tooltip(tooltipTriggerEl)
19296        });
19297
19298//});
19299
19300
19301    });
19302})(jQuery);
19303
19304
19305;
19306(function ($) {
19307    $(document).ready(function () {
19308
19309        setTimeout(function (){
19310
19311        let BlockVideo =  $('.block-type-video-slider');
19312        if(BlockVideo.length>0) {
19313           // console.log('BlockVideo');
19314
19315            let BlockVideoFiles = BlockVideo.find('.field-video-file  .field-video-file-content video');
19316            let BlockVideoTitles = BlockVideo.find('.field-video-title .field-video-title-content button');
19317
19318
19319            let IndexVideo = 0;
19320
19321
19322            function getNextVideo(){
19323                if(IndexVideo === BlockVideoFiles.length-1){
19324                    IndexVideo =  0;
19325                }else{
19326                    IndexVideo = IndexVideo+1;
19327                }
19328            }
19329
19330            function playVideo(videoIdx){
19331                IndexVideo = videoIdx;
19332                setTimeout(function () {
19333                    $(BlockVideoFiles[IndexVideo]).trigger('play');
19334                    $(BlockVideoFiles[IndexVideo]).removeClass('hide-video');
19335                    activeVideo();
19336                },200);
19337            }
19338            function activeVideo(){
19339                BlockVideoTitles.each(function (idx, item) {
19340                    $(BlockVideoTitles[idx]).removeClass('active');
19341                });
19342                setTimeout(function () {
19343                    $(BlockVideoTitles[IndexVideo]).addClass('active');
19344                },200);
19345            }
19346            function stopAllVideos(){
19347                BlockVideoFiles.each(function (idx, item) {
19348                    $(item).trigger('pause');
19349                    $(item).addClass('hide-video');
19350                });
19351
19352            }
19353
19354
19355
19356
19357            BlockVideoFiles.each(function (idx, item) {
19358               // console.log('BlockVideoFiles',idx,item);
19359
19360
19361               // $(item).on("pause", function (e) {
19362                    //console.log("Video paused. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime);
19363
19364               // });
19365
19366
19367              //  $(item).on('play',function (e){
19368                    // video-progress-bar
19369               //     console.log("Video Play. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime);
19370
19371               // });
19372                $(item).on('timeupdate',function (e){
19373                   // video-progress-bar
19374                   let  percentageCompleted = (e.target.currentTime /  e.target.duration) * 100;
19375                    //$('.video-progress-bar').css('transform', 'translateX('+percentageCompleted+'%)');
19376                    $('.video-progress-bar').css('max-width', percentageCompleted+'%');
19377                 //   console.log("Video Play. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime +" - "+ e.target.duration );
19378                    if(e.target.currentTime === e.target.duration){
19379                        $(BlockVideoFiles[IndexVideo]).addClass('hide-video');
19380                        getNextVideo();
19381                        playVideo(IndexVideo);
19382                    }
19383
19384
19385
19386                });
19387
19388
19389
19390
19391
19392            });
19393
19394
19395
19396
19397
19398
19399
19400
19401
19402            BlockVideoTitles.each(function (idx, item) {
19403                $(BlockVideoTitles[idx]).on('click',function (e){
19404                   // console.log('Play :'+ idx);
19405                    stopAllVideos();
19406                    playVideo(idx);
19407                });
19408            });
19409
19410
19411
19412
19413            stopAllVideos();
19414            playVideo(0);
19415
19416
19417
19418        }
19419    },280);
19420
19421    });
19422})(jQuery);
19423;
19424(function ($) {
19425    $(document).ready(function () {
19426        window.scrollController = new ScrollMagic.Controller();
19427
19428        setTimeout(function (){
19429
19430         //   console.log('Init $');
19431
19432
19433
19434        $("#scroll-page").click(function () {
19435            $("html,body").animate({scrollTop: $(window).height()}, 800);
19436        });
19437
19438
19439
19440
19441        //more text body
19442        let ShowMoreTextBody = true;
19443        if($('.tour-page-full').length>0){
19444            let TextArea =  $('.tour-page-full .main-page-area .text-area');
19445            TextArea.append('<div class="action-more"><button id="btn-action-more-text" class="btn-action-more-text"><span class="show-more-text"><span class="icon">+</span> Show More</span><span class="show-less-text"><span class="icon">-</span> Show Less</span></button></div>')
19446
19447            if(ShowMoreTextBody){
19448                TextArea.addClass('has-more show-more');
19449            }
19450
19451            setTimeout(()=>{
19452            $('#btn-action-more-text').on('click',()=>{
19453                if(ShowMoreTextBody){
19454                    TextArea.addClass('show-more');
19455                    ShowMoreTextBody=false;
19456                }else{
19457                    TextArea.removeClass('show-more');
19458                    ShowMoreTextBody=true;
19459                }
19460            });
19461            },500);
19462
19463
19464        }
19465
19466        /*
19467        $('.main-menu-area a').each((i,item)=>{
19468           $(item).on('mouseover',()=>{
19469               $('.main-menu-area h4').css({opacity:0.5});
19470               $('.main-menu-area a').css({opacity:0.5});
19471               $(item).css({opacity:1});
19472           });
19473            $(item).on('mouseleave',()=>{
19474                $('.main-menu-area h4').css({opacity:1});
19475                $('.main-menu-area a').css({opacity:1});
19476            });
19477        });
19478*/
19479        var pageScrollTop = 0;
19480        var lastScrollTop = 0;
19481
19482        $(window).scroll(function(event){
19483            var stTop = $(this).scrollTop();
19484            if (stTop >  40){
19485                // downscroll code
19486                $('body').addClass('header-black');
19487            } else {
19488                // upscroll code
19489                $('body').removeClass('header-black');
19490            }
19491            if (stTop >  $(window).height()-50){
19492                // downscroll code
19493                $('body').addClass('header-small');
19494            } else {
19495                // upscroll code
19496                $('body').removeClass('header-small');
19497            }
19498            var st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426"
19499            if (st > lastScrollTop) {
19500                // downscroll code
19501                $('.header-area').addClass('hide-header');
19502                $('body').addClass('header-small-hide');
19503            } else if (st < lastScrollTop) {
19504                // upscroll code
19505                $('.header-area').removeClass('hide-header');
19506                $('body').removeClass('header-small-hide');
19507            } // else was horizontal scroll
19508
19509
19510
19511            if($(window).width()<1024){
19512
19513                if (stTop > $(window).height() && stTop < $('#footer-trigger').offset().top-$(window).height()) {
19514                //    $('.page-float-block').addClass('show-block');
19515                }else{
19516                 //   $('.page-float-block').removeClass('show-block');
19517                }
19518
19519
19520
19521                if($('.view-tours-all').length>0) {
19522                    if (stTop > $('.view-tours-all').offset().top) {
19523                        $('.filters-sticky').addClass('filters-sticky-show');
19524                    } else {
19525                        $('.filters-sticky').removeClass('filters-sticky-show');
19526                    }
19527                }
19528
19529
19530            }
19531
19532            lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
19533
19534
19535        });
19536
19537
19538
19539
19540        if($(window).width()<1024) {
19541
19542
19543          //  console.log('floatBlockOpen');
19544            if ($('.page-float-block').length ) {
19545               // console.log('floatBlockOpen');
19546                $('.page-float-block').addClass('show-block');
19547                $('.page-float-block').removeClass('hide-block');
19548                let floatBlockIsOpen = true
19549                $('#floatBlockOpen').on('click', () => {
19550
19551                    if(floatBlockIsOpen){
19552                        $('.page-float-block').addClass('hide-block');
19553                        $('.page-float-block').removeClass('show-block');
19554                        floatBlockIsOpen = false;
19555                    }else{
19556                        $('.page-float-block').addClass('show-block');
19557                        $('.page-float-block').removeClass('hide-block');
19558                        floatBlockIsOpen = true;
19559                    }
19560                });
19561            }
19562
19563        }
19564
19565
19566
19567        setTimeout(()=>{
19568        $('#shareBtn,.btn-tour-share').on('click',function (){
19569            console.log('shareBtn');
19570            if (navigator.share) {
19571                navigator
19572                    .share({
19573                        title: "Renieris Santorini Sailing Center",
19574                        url: window.location.href,
19575                    })
19576                    .then(() => {
19577                        console.log("Thanks for sharing!");
19578                    })
19579                    .catch(console.error);
19580            } else {
19581
19582                $("#block-bettersocialsharingbuttons").toggleClass("is-active");
19583            }
19584        });
19585        },1500);
19586
19587
19588
19589        if($('.field-form').length>0) {
19590            $('#btn-make-request').on('click', function () {
19591                let formTop = $('.field-form')[0].offsetTop;
19592                $("html,body").animate({scrollTop: formTop}, 800);
19593            });
19594        }else{
19595            $('#btn-make-request').hide();
19596        }
19597
19598
19599        setTimeout(()=>{
19600            if($('.views-exposed-form details').length>0) {
19601               // console.log('details open');
19602                const detailsItems = document.querySelectorAll(".views-exposed-form details");
19603                Array.from(detailsItems).forEach((details)=>{
19604                    details.setAttribute("open", "");
19605                });
19606            }
19607        },800);
19608
19609
19610
19611        $('.btn-data-filter').on('click', function () {
19612            let data = $(this).data();
19613            if(data.filterMulti){
19614                $('[name="'+data.filter +'['+data.filterId +']"]').click();
19615                $('#views-exposed-form-tours-all-block-all').trigger( "submit" );
19616            }else{
19617                $('[name="'+data.filter +'"][value="All"]').click();
19618                $('#views-exposed-form-tours-all-block-all').trigger( "submit" );
19619            }
19620        });
19621
19622
19623
19624
19625        let showFilters =true;
19626        $('.btn-show-filters-desktop').on('click', function () {
19627            if(showFilters) {
19628                $('.btn-show-filters').addClass('active');
19629                $('.view-tours-all .view-filters-selection').removeClass('col-lg-4').addClass('hide');
19630                $('.view-tours-all .view-row-data').removeClass('col-lg-8').addClass('col-lg-12');
19631                $('.view-tours-all .view-page-area-row .views-row').removeClass('col-lg-6').addClass('col-lg-4');
19632                showFilters =false;
19633            }else{
19634                $('.btn-show-filters').removeClass('active');
19635                $('.view-tours-all .view-filters-selection').addClass('col-lg-4').removeClass('hide');
19636                $('.view-tours-all .view-row-data').addClass('col-lg-8').removeClass('col-lg-12');
19637                $('.view-tours-all .view-page-area-row .views-row').addClass('col-lg-6').removeClass('col-lg-4');
19638                showFilters =true;
19639            }
19640
19641        });
19642
19643
19644        $('.btn-show-filters-mobile').on('click', function () {
19645            if(showFilters) {
19646                $('.btn-show-filters').addClass('active');
19647                $('body').addClass('modal-open');
19648                $('.view-tours-all .view-filters-selection').removeClass('col-lg-4').addClass('show');
19649
19650                showFilters =false;
19651            }else{
19652                $('body').removeClass('modal-open');
19653                $('.btn-show-filters').removeClass('active');
19654                $('.view-tours-all .view-filters-selection').removeClass('show');
19655
19656                showFilters =true;
19657            }
19658
19659        });
19660
19661
19662
19663
19664
19665
19666
19667        //block-type-tour-block-need-help
19668
19669        if($('.help-blocks').length>0){
19670           let NeedHelp  =  $('.tour-need-help').html();
19671           let WhyBook  =  $('.tour-why-book').html();
19672           if($('.view-tours-all .view-row-data .view-page-area-row .row .views-row').length>0){
19673             //  console.log('view-page-area-row length ');
19674               $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-4">'+NeedHelp+'</div>');
19675               $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-5">'+WhyBook+'</div>');
19676           }else{
19677             //  console.log('view-page-area-row ');
19678               $('.view-tours-all .view-row-data').append('<div class="view-page-area-row"><div class="row"></div></div>');
19679               setTimeout(function (){
19680                   $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-4">'+NeedHelp+'</div>');
19681                   $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-5">
19681'+WhyBook+'</div>');
19682               },200);
19683
19684           }
19685
19686
19687
19688
19689        }
19690
19691
19692
19693
19694
19695
19696        //fix the effects on texts
19697        let elems = [
19698            'h222',
19699            'h2223',
19700
19701        ]
19702
19703
19704
19705
19706
19707
19708
19709        elems.forEach((item)=>{
19710            //data-fade-up-animation
19711          //  console.log(item);
19712         //   console.log($(item));
19713            if($(item).length>0) {
19714            //    console.log($(item));
19715            $(item).attr('data-fade-up-animation','');
19716            let elemsSet=[];
19717
19718                // for multi item in same page
19719                $(item).each((i, itemInner) => {
19720                     elemsSet[i] = new ScrollMagic.Scene({
19721                        triggerElement: $(itemInner).first(), offset: -50-$(window).height() / 3, duration: 0
19722                    })
19723                        .on('enter', () => {
19724                            setTimeout(function (){
19725                                $(itemInner).addClass('is-inview');
19726                            },20);
19727
19728
19729                        })
19730                        .on('leave', () => {
19731                            $(itemInner).removeClass('is-inview');
19732
19733                        })
19734                      //  .addIndicators()
19735                        .addTo(scrollController);
19736
19737
19738                });
19739            }
19740        });
19741
19742
19743        if($('h1,.field-slider-title').length>0){
19744            setTimeout(function (){
19745                $('h1,.field-slider-title').addClass('is-inview');
19746            },800);
19747        }
19748
19749
19750
19751        $('.field-top-image video').attr('loop',true);
19752
19753
19754       // main-page-full
19755        //field-top-image
19756        if($('.field-top-image').length>0){
19757            new ScrollMagic.Scene({
19758                triggerElement: '.field-top-image',
19759                triggerHook:"0",
19760                // offset:'50%',
19761                 duration:$('.field-top-image').height()
19762            })
19763                .setTween('.field-top-image img', 1, {opacity: 0, scale:0.5,ease: Linear.easeInOut})
19764            //    .addIndicators()
19765                .addTo(scrollController);
19766        }
19767
19768        let elemsOpacity = [
19769            '.page-top-overlay',
19770            '.block-type-numbers',
19771            '.block-type-promo-slider',
19772            '.view-tours-slider-promote',
19773            '.block-type-full-screen-image',
19774            '.block-type-promo-2-slider',
19775            '.block-type-scroll-whybook',
19776            '.block-type-block-faq',
19777            '.view-page-full .main-content-area',
19778            '.main-page-full .main-content-area',
19779            '.tour-page-full .main-content-area',
19780            '.block-type-promo-right-img',
19781            '.view-fleet-slider-circle',
19782            '.node-teaser',
19783            '.field-paragraph-items-content ',
19784
19785
19786        ];
19787
19788        elemsOpacity.forEach((item)=> {
19789
19790            if ($(item).length > 0) {
19791                $(item).each((i, itemInner) => {
19792                    $(itemInner).css({opacity: 0});
19793                    new ScrollMagic.Scene({
19794                        triggerElement: $(itemInner),
19795                        ///    triggerHook:"0",
19796                         offset:-1*$(window).height()/4,
19797                        //  duration:$('.block-type-full-screen-image').height()
19798                    })
19799                        .setTween($(itemInner), 1, {opacity: 1, ease: Linear.easeInOut})
19800                       // .addIndicators()
19801                        .addTo(scrollController);
19802                });
19803            }
19804        });
19805
19806
19807        if($('.block-type-full-screen-image').length>0){
19808            new ScrollMagic.Scene({
19809                triggerElement: '.block-type-full-screen-image .field-image-1',
19810            ///    triggerHook:"0",
19811                // offset:'50%',
19812                duration:$('.block-type-full-screen-image').height()
19813            })
19814                .setTween('.block-type-full-screen-image .field-image-1 img', 1, {opacity: 1, y:'20%',ease: Linear.easeInOut})
19815                // .addIndicators()
19816                .addTo(scrollController);
19817        }
19818
19819
19820        //fix the images
19821        let elemsImages = [
19822            '.paragraph--type--text-image',
19823            '.news-small-teaser',
19824            '.news-teaser',
19825        ]
19826
19827
19828
19829
19830        elemsImages.forEach((item)=>{
19831            //data-fade-up-animation
19832            //  console.log( item);
19833
19834            $(item + ' .field-media-image img').each(function(i,itemIter){
19835              //  console.log(i,itemIter);
19836                $(itemIter).addClass('animate-image');
19837
19838                    new ScrollMagic.Scene({
19839                        triggerElement: $(itemIter),
19840                        offset:0,
19841                    })
19842
19843                    .on('enter',function () {
19844                        $(itemIter).addClass('animate-image-start');
19845                        setTimeout(function (){
19846                            $(itemIter).addClass('animate-image-end');
19847                         },3000);
19848                    })
19849                    .on('leave',function () {
19850                    //    $(itemIter).removeClass('animate-image-start');
19851                    })
19852                    //.setPin($(this).find('.field-image-2'),{pushFollowers: false})
19853                    //   .addIndicators()
19854                    .addTo(scrollController);
19855            });
19856        });
19857
19858
19859        },150);
19860    });
19861
19862
19863})(jQuery);
19864;
19865(function ($) {
19866    $(document).ready(function () {
19867        setTimeout(function (){
19868        if ($('.top-gallery-slider-images').length > 0) {
19869            setTimeout(function () {
19870                var swiper = new Swiper(".top-gallery-slider-images", {
19871                    //   spaceBetween: '1%',
19872                    slidesPerView: 'auto',
19873                    spaceBetween: 6,
19874                    loop: true,
19875                    centeredSlides: true,
19876                    speed: 500,
19877                    autoplay: {
19878                        delay: 5000,
19879                    },
19880                    navigation: {
19881                        nextEl: '.swiper-button-next',
19882                        prevEl: '.swiper-button-prev',
19883
19884
19885                    },
19886                    breakpoints: {
19887                        1024: {
19888                            //centeredSlides: true,
19889                            slidesPerView: 'auto',
19890                        },
19891                    }
19892                });
19893
19894            }, 800);
19895        }
19896
19897        if ($('.modal-gallery-images').length > 0) {
19898            setTimeout(function () {
19899                var swiper = new Swiper(".modal-gallery-images", {
19900                    //   spaceBetween: '1%',
19901                    slidesPerView: 1,
19902                    loop: true,
19903                    //  centeredSlides: true,
19904                    speed: 500,
19905                    autoplay: {
19906                        delay: 5000,
19907                    },
19908                    navigation: {
19909                        nextEl: '.swiper-button-next',
19910                        prevEl: '.swiper-button-prev',
19911
19912                    },
19913
19914                });
19915
19916            }, 800);
19917        }
19918        if ($('.gallery-images').length > 0) {
19919            setTimeout(function () {
19920                var swiper = new Swiper(".gallery-images", {
19921                    //   spaceBetween: '1%',
19922                    slidesPerView: 1,
19923                    loop: true,
19924                    //  centeredSlides: true,
19925                    speed: 500,
19926                    autoplay: {
19927                        delay: 5000,
19928                    },
19929                    navigation: {
19930                        nextEl: '.swiper-button-next',
19931                        prevEl: '.swiper-button-prev',
19932
19933                    },
19934
19935                });
19936
19937            }, 800);
19938        }
19939
19940        if ($('.swiper-slider-images').length > 0) {
19941            setTimeout(function () {
19942                var swiper = new Swiper(".swiper-slider-images", {
19943                    //   spaceBetween: '1%',
19944                    slidesPerView: 1,
19945                    loop: true,
19946                    //  centeredSlides: true,
19947                    speed: 500,
19948                    autoplay: {
19949                        delay: 5000,
19950                    },
19951                    navigation: {
19952                        nextEl: '.swiper-button-next',
19953                        prevEl: '.swiper-button-prev',
19954
19955                    },
19956
19957                });
19958
19959            }, 800);
19960        }
19961
19962
19963        if ($('.swiper-reviews-slider-items').length > 0) {
19964            setTimeout(function () {
19965                var swiper = new Swiper(".swiper-reviews-slider-items", {
19966                    //   spaceBetween: '1%',
19967                    slidesPerView: 1,
19968                    loop: true,
19969                    //  centeredSlides: true,
19970                    speed: 500,
19971                    autoplay: {
19972                        delay: 5000,
19973                    },
19974                    navigation: {
19975                        nextEl: '.swiper-button-next',
19976                        prevEl: '.swiper-button-prev',
19977
19978                    },
19979
19980                });
19981
19982            }, 800);
19983        }
19984
19985
19986
19987
19988
19989
19990        if ($('.swiper-tour-teaser').length > 0) {
19991
19992            setTimeout(function () {
19993                var swiperSliderItems = new Swiper(".swiper-tour-teaser", {
19994                    slidesPerView: 'auto',
19995                   // centeredSlides: true,
19996                  //  loop: true,
19997                    //effect: 'cards',
19998                    speed: 1200,
19999                    // gap:20,
20000                    autoplay: {
20001                        delay: 5000,
20002                    },
20003                      navigation: {
20004                          nextEl: '.swiper-tour-promote-button-next',
20005                          prevEl: '.swiper-tour-promote-button-prev',
20006
20007                      },
20008                    pagination: {
20009                          el: ".swiper-pagination",
20010                           type: 'fraction',
20011                    },
20012                    scrollbar: {
20013                        el: '.swiper-scrollbar',
20014                        draggable: true,
20015                    },
20016                    breakpoints: {
20017                        1024: {
20018                            //centeredSlides: true,
20019                            slidesPerView: 'auto',
20020                        },
20021                    }
20022                });
20023            }, 800);
20024        }
20025
20026
20027        if ($('.swiper-page-slider').length > 0) {
20028
20029            setTimeout(function () {
20030                var swiperSliderItems = new Swiper(".swiper-page-slider", {
20031                    slidesPerView: 'auto',
20032                    // centeredSlides: true,
20033                    //  loop: true,
20034                    //effect: 'cards',
20035                    speed: 1200,
20036                    // gap:20,
20037                    autoplay: {
20038                        delay: 5000,
20039                    },
20040                    navigation: {
20041                        nextEl: '.swiper-page-button-next',
20042                        prevEl: '.swiper-page-button-prev',
20043
20044                    },
20045                    pagination: {
20046                        el: ".swiper-pagination",
20047                        type: 'fraction',
20048                    },
20049                    scrollbar: {
20050                        el: '.swiper-scrollbar',
20051                        draggable: true,
20052                    },
20053                    breakpoints: {
20054                        1024: {
20055                            //centeredSlides: true,
20056                            slidesPerView: 'auto',
20057                        },
20058                    }
20059                });
20060            }, 800);
20061        }
20062
20063
20064
20065
20066
20067        //swiper-gallery-slider-items
20068
20069
20070
20071        if ($('.swiper-promos-slider-items').length > 0) {
20072            setTimeout(function () {
20073                var swiperSliderItems = new Swiper(".swiper-promos-slider-items", {
20074                    slidesPerView: 1,
20075                    centeredSlides: true,
20076                    loop: true,
20077                    //effect: 'cards',
20078                    speed: 1200,
20079                    // gap:20,
20080                   // autoplay: {
20081                   //     delay: 2500,
20082                   // },
20083                  /*  navigation: {
20084                        nextEl: '.swiper-promos-slider-items-next',
20085                        prevEl: '.swiper-promos-slider-items-prev',
20086
20087                    },*/
20088                    pagination: {
20089                          el: ".swiper-pagination",
20090                           type: 'bullets',
20091                    },
20092                    breakpoints: {
20093                        1024: {
20094                            centeredSlides: true,
20095                            slidesPerView: 2,
20096                        },
20097                    }
20098                });
20099
20100
20101            }, 800);
20102        }
20103
20104
20105
20106
20107
20108        if ($('.swiper-promos-2-slider-items').length > 0) {
20109            setTimeout(function () {
20110                var swiperSliderItems = new Swiper(".swiper-promos-2-slider-items", {
20111                    slidesPerView: 1,
20112                  //  centeredSlides: true,
20113                    loop: true,
20114                    //effect: 'cards',
20115                    speed: 1200,
20116                    // gap:20,
20117                    autoplay: {
20118                        delay: 5000,
20119                    },
20120                    /*  navigation: {
20121                          nextEl: '.swiper-promos-slider-items-next',
20122                          prevEl: '.swiper-promos-slider-items-prev',
20123
20124                      },*/
20125                    pagination: {
20126                          el: ".swiper-pagination",
20127                          type: 'bullets',
20128                    },
20129                    breakpoints: {
20130                        1024: {
20131                            //centeredSlides: true,
20132                            slidesPerView: 1,
20133                        },
20134                    }
20135                });
20136
20137
20138            }, 800);
20139        }
20140        },200);
20141
20142
20143    });
20144})(jQuery);
20145;
20146(function ($) {
20147
20148        $(document).ready(function () {
20149            //
20150            setTimeout(function (){
20151
20152            let NumberIterations = 15;
20153            let CountNumbersItems =[];
20154            let CountOneNumber = function(i,valSum,addTosum,val,Iteration){
20155                if(Iteration<NumberIterations) {
20156                    valSum = valSum + addTosum
20157                    $(CountNumbersItems[i]).html(Number.parseInt(Math.round(valSum)));
20158                    Iteration ++;
20159                    setTimeout(()=> {
20160                        CountOneNumber(i, valSum, addTosum, val, Iteration);
20161                    },100+Iteration*35);
20162                }else{
20163                    $(CountNumbersItems[i]).html(Number.parseInt(Math.round(val)));
20164                }
20165            }
20166            let CountNumbers = function (){
20167
20168                CountNumbersItems =  $('[data-number]');
20169                CountNumbersItems.each(function(i,item){
20170                    let val = $(item).attr('data-number');
20171                    let addTosum = val / NumberIterations;
20172                    let valSum=0;
20173                    $(item).html(valSum);
20174                    let Iteration = 0;
20175                    CountOneNumber(i,valSum,addTosum,val,Iteration);
20176                });
20177            }
20178
20179
20180            if($('.block-type-numbers').length>0){
20181                new ScrollMagic.Scene({
20182                    triggerElement: '.block-type-numbers',
20183                    offset: 0,
20184                    reverse:false
20185
20186                })
20187                    .on('enter', () => {
20188
20189                        CountNumbers();
20190                    })
20191                  //  .addIndicators()
20192                    .addTo(scrollController);
20193            }
20194
20195
20196            },250);
20197        });
20198
20199
20200})(jQuery);;
20201(function ($) {
20202
20203        $(document).ready(function () {
20204            setTimeout(function (){
20205            if($('.paragraph--type--scroll-whybook-item ').length>0){
20206            let canvasImage = document.getElementById('scroll-why-book');
20207            let canvasContext =  canvasImage.getContext('2d');
20208          //  canvasContext.imageSmoothingEnabled = true;
20209           // canvasContext.imageSmoothingQuality = 'high';
20210
20211            canvasImage.width = canvasImage.offsetWidth;
20212
20213            canvasImage.height = canvasImage.offsetHeight;
20214            let cW = canvasImage.width;
20215            let cH =  canvasImage.height;
20216            let images =[];
20217            let activeImage = 0;
20218            let globalAlpha = 1;
20219
20220
20221
20222            // animation related variables
20223            let minX=0;        // Keep the image animating
20224            let maxX=900;       // between minX & maxX
20225            let x=minX;         // The current X-coordinate
20226            let speedX=0.2;       // The image will move at 1px per loop
20227            let direction=1;    // The image direction: 1==righward, -1==leftward
20228            let y=0;           // The Y-coordinate
20229            // The Y-coordinate
20230            let globalAlphaSeed=0.005;           // The Y-coordinate
20231
20232
20233
20234            function animate(){
20235                canvasImage.width = canvasImage.offsetWidth;
20236
20237                canvasImage.height = canvasImage.offsetHeight;
20238                 cW = canvasImage.width;
20239                 cH =  canvasImage.height;
20240                // clear the canvas
20241                canvasContext.clearRect(0,0,cW,cH);
20242                //console.log( x,y,images[activeImage].naturalWi
20242dth,images[activeImage].naturalHeight,0,0,cW,cH);
20243
20244                canvasContext.drawImage(images[activeImage], 0,0, images[activeImage].naturalWidth,images[activeImage].naturalHeight,0,0,cW,cH);
20245                // draw
20246               // canvasContext.drawImage(img,x,y);
20247
20248                // update
20249               // x += speedX * direction;
20250                // keep "x" inside min & max
20251                //if(x<minX){ x=minX; direction*=-1; }
20252              //  if(x>maxX){ x=maxX; direction*=-1; }
20253
20254                canvasContext.globalAlpha =  canvasContext.globalAlpha+globalAlphaSeed;
20255
20256                // request another loop of animation
20257                requestAnimationFrame(animate);
20258            }
20259
20260            function onLoadImage(){
20261           ///     console.log(this);
20262                requestAnimationFrame(animate);
20263
20264            }
20265
20266
20267                $('.paragraph--type--scroll-whybook-item').each(function(i,item){
20268                    let itemImageUrl  = $(item).find('img').attr('src');
20269                    let image = new Image();
20270                    image.src = itemImageUrl;
20271                    image.onload = onLoadImage;
20272
20273                    images[i]=image;
20274
20275
20276
20277                    new ScrollMagic.Scene({
20278                        triggerElement: $(item),
20279                        offset: 0,
20280                        duration: $(item).height()
20281
20282                    })
20283                        .on('enter', () => {
20284                            $(item).addClass('active');
20285                            activeImage = i;
20286                            maxX= images[activeImage].naturalWidth/4;
20287                            y= images[activeImage].naturalHeight/4;
20288                            canvasContext.globalAlpha = 0.2;
20289
20290
20291                        })
20292                        .on('leave', () => {
20293                            $(item).removeClass('active');
20294                        })
20295                       // .addIndicators()
20296                        .addTo(scrollController);
20297                });
20298
20299            }
20300        });
20301        },250);
20302})(jQuery);;
20303;
20304!function(_,u,l){"use strict";var t,p=void 0===l.eu_cookie_compliance.cookie_value_disagreed||""===l.eu_cookie_compliance.cookie_value_disagreed?"0":l.eu_cookie_compliance.cookie_value_disagreed,r=void 0===l.eu_cookie_compliance.cookie_value_agreed_show_thank_you||""===l.eu_cookie_compliance.cookie_value_agreed_show_thank_you?"1":l.eu_cookie_compliance.cookie_value_agreed_show_thank_you,s=void 0===l.eu_cookie_compliance.cookie_value_agreed||""===l.eu_cookie_compliance.cookie_value_agreed?"2":l.eu_cookie_compliance.cookie_value_agreed;function m(e,o,i){var c="",n=(void 0!==i.expires&&("number"==typeof i.expires&&(n=new Date,i.expires=n.setTime(n.getTime()+24*i.expires*60*60*1e3)),c="; expires="+i.expires.toUTCString()),void 0===i.path?"/":i.path),a="";void 0!==i.domain&&(a="; domain="+i.domain),document.cookie=e+"="+(o||"")+c+"; path="+n+a+"; SameSite=Strict"}function a(e){var o=document.cookie.split(";");if(void 0===e)return o;for(var i=e+"=",c=0;c<o.length;c++){for(var n=o[c];" "==n.charAt(0);)n=n.substring(1,n.length);if(0==n.indexOf(i))return n.substring(i.length,n.length)}return null}function k(e){document.cookie=e+"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"}u.behaviors.euCookieCompliancePopup={attach:function(e){if(void 0!==l.eu_cookie_compliance){const i=document.querySelector(l.eu_cookie_compliance.containing_element);var o;i.getAttribute("data-eu-cookie-compliance-once")||(i.setAttribute("data-eu-cookie-compliance-once","true"),g=d.getCurrentStatus(),h=d.getAcceptedCategories(),l.eu_cookie_compliance.popup_eu_only_js?u.eu_cookie_compliance.showBanner()&&(o=l.path.baseUrl+l.path.pathPrefix+"eu-cookie-compliance-check",_.getJSON(o,{},function(e){e.in_eu?u.eu_cookie_compliance.execute():(u.eu_cookie_compliance.setStatus(s),l.eu_cookie_compliance.geoip_match=!1,c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),"categories"===l.eu_cookie_compliance.method&&(e=l.eu_cookie_compliance.cookie_categories,u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e)))})):l.eu_cookie_compliance.hide_the_banner||u.eu_cookie_compliance.execute(),_(i).addClass("eu-cookie-compliance-status-"+u.eu_cookie_compliance.getCurrentStatus()))}}},u.eu_cookie_compliance=u.eu_cookie_compliance||function(){(u.eu_cookie_compliance.queue=u.eu_cookie_compliance.queue||[]).push(arguments)},u.eu_cookie_compliance.a=+new Date;var d=u.eu_cookie_compliance,h=[],g=null,c=(d.updateSelectedCategories=function(e){h=e},d.updateCurrentStatus=function(e){g=e},u.eu_cookie_compliance.execute=function(){try{var e,o,i;l.eu_cookie_compliance.popup_enabled&&u.eu_cookie_compliance.cookiesEnabled()&&l.eu_cookie_compliance.modules_allow_popup&&(g=u.eu_cookie_compliance.getCurrentStatus(),void 0===u.eu_cookie_compliance.getVersion()&&u.eu_cookie_compliance.setVersion("unknown"),!0===l.eu_cookie_compliance.popup_eu_only&&!0!==l.eu_cookie_compliance.geoip_match||(e=u.eu_cookie_compliance.getVersion()!==l.eu_cookie_compliance.cookie_policy_version,o=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name,i=!l.eu_cookie_compliance.open_by_default||null!==g&&!e||"null"===a(o)&&l.eu_cookie_compliance.settings_tab_enabled,g!==p||!l.eu_cookie_compliance.settings_tab_enabled||"opt_in"!==l.eu_cookie_compliance.method&&"categories"!==l.eu_cookie_compliance.method?g===p&&"default"===l.eu_cookie_compliance.method||null===g||g!==p&&l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup||g!==p&&e?!l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.disagree_do_not_show_popup&&null!==g||(window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.mobile_popup_html_info,i):u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_info,i),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener()):g===r&&l.eu_cookie_compliance.popup_agreed_enabled?(u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_agreed),u.eu_cookie_compliance.attachHideEvents()):g===s&&l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&(u.eu_cookie_compliance.createWithdrawBanner(l.eu_cookie_compliance.withdraw_markup),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener()):(u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_info,null!==g),_(".eu-cookie-withdraw-tab").click(u.eu_cookie_compliance.toggleWithdrawBanner),u.eu_cookie_compliance.attachAgreeEvents())))}catch(e){}},u.eu_cookie_compliance.initPopup=function(){u.eu_cookie_compliance.attachAgreeEvents(),"categories"===l.eu_cookie_compliance.method&&(u.eu_cookie_compliance.setPreferenceCheckboxes(h),u.eu_cookie_compliance.attachSavePreferencesEvents()),l.eu_cookie_compliance.withdraw_enabled&&(u.eu_cookie_compliance.attachWithdrawEvents(),g!==r&&g!==s||(_(".eu-cookie-withdraw-button").removeClass("visually-hidden"),_(".eu-cookie-compliance-reject-button").addClass("visually-hidden")))},u.eu_cookie_compliance.positionTab=function(){if(l.eu_cookie_compliance.popup_position){let e=_(".eu-cookie-withdraw-tab").outerHeight();_("#sliding-popup").length&&(e+=_("#sliding-popup").outerHeight()),_(".eu-cookie-withdraw-wrapper").length?_(".eu-cookie-withdraw-tab").css("margin-top","0"):_(".eu-cookie-withdraw-tab").css("margin-top",e+"px")}},u.eu_cookie_compliance.createWithdrawBanner=function(e){var o=_("<div></div>").html(e),e=_(".eu-cookie-withdraw-banner",o),i=(o.attr({id:"sliding-popup",role:"alertdialog","aria-describedby":"popup-text","aria-label":u.t("Cookie compliance banner")}),o.addClass("eu-cookie-withdraw-wrapper"),o.trigger("eu_cookie_compliance_popup_close"),l.eu_cookie_compliance.popup_use_bare_css||l.eu_cookie_compliance.popup_use_olivero_css||e.height(l.eu_cookie_compliance.popup_height).width(l.eu_cookie_compliance.popup_width),o.hide(),0);l.eu_cookie_compliance.popup_position?(o.prependTo(l.eu_cookie_compliance.containing_element),i=parseInt(o.outerHeight()),o.show().addClass("sliding-popup-top").addClass("clearfix").css({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(i)}),setTimeout(function(){var e=o.outerHeight();o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"})}.bind(o),0)):(l.eu_cookie_compliance.better_support_for_screen_readers?o.prependTo(l.eu_cookie_compliance.containing_element):o.appendTo(l.eu_cookie_compliance.containing_element),i=o.outerHeight(),o.show().addClass("sliding-popup-bottom").css({bottom:-1*i}),setTimeout(function(){var e=o.outerHeight();o.animate({bottom:-1*e},l.eu_cookie_compliance.popup_delay,null)}.bind(o),0)),_("body").removeClass("eu-cookie-compliance-popup-open"),e.attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)},u.eu_cookie_compliance.getBannerTopPosition=function(e){let o;return l.eu_cookie_compliance.fixed_top_position?(o=0,_(".toolbar-tray-horizontal.is-active").length&&(o+=parseInt(_(".toolbar-tray-horizontal.is-active").css("height"))),_(".toolbar-bar").length&&!_("#gin-toolbar-bar").length&&(o+=parseInt(_(".toolbar-bar").css("height"))),o+"px"):0},u.eu_cookie_compliance.getBannerTopHiddenPosition=function(e){let o=0;return l.eu_cookie_compliance.fixed_top_position?o=-e:(_(".toolbar-tray-horizontal.is-active").length&&(o=-parseInt(_(".toolbar-tray-horizontal.is-active").css("height"))),_(".toolbar-bar").length&&!_("#gin-toolbar-bar").length&&(o-=parseInt(_(".toolbar-bar").css("height")))),o+"px"},u.eu_cookie_compliance.getBannerBottomHiddenPosition=function(){return-_("#sliding-popup").outerHeight()+"px"},u.eu_cookie_compliance.toggleWithdrawBanner=function(){var e,o,i,c=_("#sliding-popup"),n=parseInt(c.outerHeight()),a=c.find(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").is(":visible");a&&(e=parseInt(c.css("top")),o=parseInt(_(l.eu_cookie_compliance.containing_element).css("padding-top")),i=parseInt(_(l.eu_cookie_compliance.containing_element).css("margin-top")),a=l.eu_cookie_compliance.popup_position?l.eu_cookie_compliance.fixed_top_position?!(e===-n):!(e===-(o+i+n)):0===parseInt(c.css("bottom"))),l.eu_cookie_compliance.popup_position?a?(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-n+"px"},l.eu_cookie_compliance.popup_delay),c.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(n)},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_close")):(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":"0px"},l.eu_cookie_compliance.popup_delay),c.find(".eu-cookie-compliance-banner").show(),c.animate({top:u.eu_cookie_compliance.getBannerTopPosition(n)},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_open")):a?c.animate({bottom:-1*n},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_close"):(c.find(".eu-cookie-compliance-banner").show(),c.animate({bottom:0},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_open")),a?(_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(_("body").addClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!1).find("a, button, input").attr("tabindex",0))},u.eu_cookie_compliance.resizeListener=function(){var e,o,i,c=_("#sliding-popup"),n=(e=function(){var e=c.outerHeight();l.eu_cookie_compliance.popup_position?(parseFloat(c.css("top"))<0&&(_("body").hasClass("eu-cookie-compliance-popup-open")?(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":"0px"}),c.css("top",u.eu_cookie_compliance.getBannerTopPosition(e))):(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":-e+"px"}),c.css("top",u.eu_cookie_compliance.getBannerTopHiddenPosition(e)))),u.eu_cookie_compliance.positionTab()):0!==parseFloat(c.css("bottom"))&&c.css("bottom",-1*e),u.eu_cookie_compliance.positionTab()},o=50,function(){clearTimeout(i),i=setTimeout(function(){clearTimeout(i),e()},o)});setTimeout(function(){n()}),window.addEventListener("resize",n)},u.eu_cookie_compliance.createPopup=function(e,o){var i=_("<div></div>").html(e),e=(i.attr({id:"sliding-popup",role:"alertdialog","aria-describedby":"popup-text","aria-label":u.t("Cookie compliance banner")}),l.eu_cookie_compliance.popup_use_bare_css||l.eu_cookie_compliance.popup_use_olivero_css||i.height(l.eu_cookie_compliance.popup_height).width(l.eu_cookie_compliance.popup_width),i.hide(),0);l.eu_cookie_compliance.popup_position?(i.prependTo(l.eu_cookie_compliance.containing_element),e=i.outerHeight(),i.addClass("sliding-popup-top clearfix").css({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)}),!0!==o?(i.show(),i.animate({top:u.eu_cookie_compliance.getBannerTopPosition(e)},l.eu_cookie_compliance.popup_delay,null,function(){i.trigger("eu_cookie_compliance_popup_open"),u.eu_cookie_compliance.positionTab()})):(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":-e+"px"}),setTimeout(function(){i.show(),u.eu_cookie_compliance.positionTab()},0))):(l.eu_cookie_compliance.better_support_for_screen_readers?i.prependTo(l.eu_cookie_compliance.containing_element):i.appendTo(l.eu_cookie_compliance.containing_element),e=i.outerHeight(),i.show().addClass("sliding-popup-bottom").css({bottom:-1*e}),!0!==o&&i.animate({bottom:0},l.eu_cookie_compliance.popup_delay,null,function(){i.trigger("eu_cookie_compliance_popup_open")})),!0!==o?(_("body").addClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!1).find("a, button, input").attr("tabindex",0)):(_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1))},u.eu_cookie_compliance.attachAgreeEvents=function(){var e,o,i=l.eu_cookie_compliance.popup_clicking_confirmation,c=l.eu_cookie_compliance.popup_scrolling_confirmation;"categories"===l.eu_cookie_compliance.method&&l.eu_cookie_compliance.enable_save_preferences_button?_(".agree-button").click(u.eu_cookie_compliance.acceptAllAction):_(".agree-button").click(u.eu_cookie_compliance.acceptAction),_(".decline-button").click(u.eu_cookie_compliance.declineAction),_(".eu-cookie-compliance-close-button").click(u.eu_cookie_compliance.closeAction),_(".eu-cookie-compliance-reject-button").click(u.eu_cookie_compliance.rejectAllAction),i&&_("a, input[type=submit], button[type=submit]").not(".popup-content *").bind("click.euCookieCompliance",u.eu_cookie_compliance.acceptAction),c&&(e=!1,o=function(){e?(u.eu_cookie_compliance.acceptAction(),_(window).off("scroll",o)):e=!0},_(window).bind("scroll",o)),_(".find-more-button").not(".find-more-button-processed").addClass("find-more-button-processed").click(u.eu_cookie_compliance.moreInfoAction)},u.eu_cookie_compliance.closeAction=function(){switch(l.eu_cookie_compliance.close_button_action){case"close_banner":u.eu_cookie_compliance.toggleWithdrawBanner();break;case"save_preferences":u.eu_cookie_compliance.savePreferencesAction();break;case"reject_all_cookies":u.eu_cookie_compliance.rejectAllAction();break;case"accept_all_cookies":u.eu_cookie_compliance.acceptAllAction()}},u.eu_cookie_compliance.attachSavePreferencesEvents=function(){_(".eu-cookie-compliance-save-preferences-button").click(u.eu_cookie_compliance.savePreferencesAction)},u.eu_cookie_compliance.attachHideEvents=function(){var e=l.eu_cookie_compliance.popup_hide_agreed,o=l.eu_cookie_compliance.popup_clicking_confirmation;_(".hide-popup-button").click(function(){u.eu_cookie_compliance.changeStatus(s)}),o&&_("a, input[type=submit], button[type=submit]").unbind("click.euCookieCompliance"),e&&_("a, input[type=submit], button[type=submit]").bind("click.euCookieComplianceHideAgreed",function(){u.eu_cookie_compliance.changeStatus(s)}),_(".find
20304-more-button").not(".find-more-button-processed").addClass("find-more-button-processed").click(u.eu_cookie_compliance.moreInfoAction)},u.eu_cookie_compliance.attachWithdrawEvents=function(){_(".eu-cookie-withdraw-button").click(u.eu_cookie_compliance.withdrawAction),_(".eu-cookie-withdraw-tab").click(u.eu_cookie_compliance.toggleWithdrawBanner)},u.eu_cookie_compliance.acceptAction=function(){var e=l.eu_cookie_compliance.popup_agreed_enabled,o=r;e||(u.eu_cookie_compliance.setStatus(r),o=s),c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),void 0!==t&&clearInterval(t),"categories"===l.eu_cookie_compliance.method&&(e=_("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){return _(this).val()}).get(),u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e),e.length||(o=p)),u.eu_cookie_compliance.changeStatus(o),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup&&(u.eu_cookie_compliance.attachWithdrawEvents(),g!==r&&g!==s||(_(".eu-cookie-withdraw-button").removeClass("visually-hidden"),_(".eu-cookie-compliance-reject-button").addClass("visually-hidden")))},u.eu_cookie_compliance.acceptAllAction=function(){var e=l.eu_cookie_compliance.cookie_categories;u.eu_cookie_compliance.setPreferenceCheckboxes(e),u.eu_cookie_compliance.acceptAction()},u.eu_cookie_compliance.rejectAllAction=function(){u.eu_cookie_compliance.setStatus(p),u.eu_cookie_compliance.setPreferenceCheckboxes([]),u.eu_cookie_compliance.acceptAction()},u.eu_cookie_compliance.savePreferencesAction=function(){var e=_("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){return _(this).val()}).get(),o=l.eu_cookie_compliance.popup_agreed_enabled,i=r;o||(u.eu_cookie_compliance.setStatus(r),i=s),c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),c=!0,u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e),e.length||(i=p),u.eu_cookie_compliance.changeStatus(i)},u.eu_cookie_compliance.loadCategoryScripts=function(e){for(var o in e)!0!==i[e[o]]&&"function"==typeof euCookieComplianceLoadScripts&&(euCookieComplianceLoadScripts(e[o]),i[e[o]]=!0)},u.eu_cookie_compliance.declineAction=function(){parseInt(l.eu_cookie_compliance.set_cookie_session_zero_on_disagree)&&(l.eu_cookie_compliance.cookie_session=1),u.eu_cookie_compliance.setStatus(p);var e,o=_("#sliding-popup");(o.hasClass("sliding-popup-top")?(e=o.outerHeight(),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),l.eu_cookie_compliance.settings_tab_enabled?o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null):o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null,function(){l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":0}),o.hide()})):l.eu_cookie_compliance.settings_tab_enabled?o.animate({bottom:-1*o.outerHeight()},l.eu_cookie_compliance.popup_delay,null):o.animate({bottom:-1*o.outerHeight()},l.eu_cookie_compliance.popup_delay,null,function(){o.hide()})).trigger("eu_cookie_compliance_popup_close"),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)},u.eu_cookie_compliance.withdrawAction=function(){parseInt(l.eu_cookie_compliance.set_cookie_session_zero_on_disagree)&&(l.eu_cookie_compliance.cookie_session=1),u.eu_cookie_compliance.setStatus(null),u.eu_cookie_compliance.setAcceptedCategories([]),location.reload()},u.eu_cookie_compliance.moreInfoAction=function(){l.eu_cookie_compliance.disagree_do_not_show_popup?(u.eu_cookie_compliance.setStatus(p),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?_("#sliding-popup .eu-cookie-compliance-banner").trigger("eu_cookie_compliance_popup_close").hide():_("#sliding-popup").trigger("eu_cookie_compliance_popup_close").remove(),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):l.eu_cookie_compliance.popup_link_new_window?window.open(l.eu_cookie_compliance.popup_link):window.location.href=l.eu_cookie_compliance.popup_link},u.eu_cookie_compliance.getCookieStatus=function(){var e=a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name);return e=void 0!==e&&"null"!==e?e:null},u.eu_cookie_compliance.getCurrentStatus=function(){var e=new o,e=(d.handleEvent("preStatusLoad",e),g=u.eu_cookie_compliance.getCookieStatus(),new n);return d.handleEvent("postStatusLoad",e),g},u.eu_cookie_compliance.setPreferenceCheckboxes=function(e){for(var o in null===u.eu_cookie_compliance.getCookieStatus()&&u.eu_cookie_compliance.getCookieStatus()!==p||_("#eu-cookie-compliance-categories input:checkbox").not(":disabled").prop("checked",!1),e){o=document.getElementById("cookie-category-"+e[o]);null!==o&&(o.checked=!0)}},u.eu_cookie_compliance.getAcceptedCategories=function(){var e=new C;d.handleEvent("prePreferencesLoad",e);var o,e=a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories");for(o in h=null!=e?(-1!==e.indexOf("%")&&(e=decodeURI(e).replaceAll(/%2C/g,",")),JSON.parse(e)):[],l.eu_cookie_compliance.cookie_categories_details){var i=l.eu_cookie_compliance.cookie_categories_details[o];"required"===i.checkbox_default_state&&-1===_.inArray(i.id,h)&&h.push(i.id)}e=new S;return d.handleEvent("postPreferencesLoad",e),h},u.eu_cookie_compliance.changeStatus=function(o){var e,i=l.eu_cookie_compliance.reload_page,c=g;if(g!==parseInt(o)){if(l.eu_cookie_compliance.popup_position){let e=_("#sliding-popup").outerHeight();l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,function(){o!==r||null!==c||i?c===r&&(l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?(_("#sliding-popup").hide(),window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.mobile_popup_html_info):_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_info),e=_("#sliding-popup").outerHeight(),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").css("top",u.eu_cookie_compliance.getBannerTopHiddenPosition(e)),_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close"),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener(),_("#sliding-popup").show()):(_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close").remove(),_("body").css({"margin-top":"0px"})),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":"0px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_agreed).animate({top:u.eu_cookie_compliance.getBannerTopPosition(e)},l.eu_cookie_compliance.popup_delay),u.eu_cookie_compliance.attachHideEvents()),l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&u.eu_cookie_compliance.showWithdrawBanner(o)})}else _(".sliding-popup-bottom").animate({bottom:-1*_("#sliding-popup").outerHeight()},l.eu_cookie_compliance.popup_delay,function(){o!==r||null!==c||i?c===r&&(_("#sliding-popup").css("display","none"),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?(window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.mobile_popup_html_info):_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_info),_(".sliding-popup-bottom").css("bottom",u.eu_cookie_compliance.getBannerBottomHiddenPosition()),_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close"),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener(),_("#sliding-popup").css("display","block")):_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close").remove(),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_agreed).animate({bottom:0},l.eu_cookie_compliance.popup_delay),u.eu_cookie_compliance.attachHideEvents()),l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&u.eu_cookie_compliance.showWithdrawBanner(o)});if(l.eu_cookie_compliance.reload_page)if(0!==(e=l.eu_cookie_compliance.reload_routes_list).length){for(var n=l.path.currentPath,a=!1,t=0;!a&&t<e.length;t++)var p=new RegExp(e[t],"g"),a=null!==n.match(p);(a&&!l.eu_cookie_compliance.reload_options||!a&&l.eu_cookie_compliance.reload_options)&&location.reload()}else location.reload();u.eu_cookie_compliance.setStatus(o)}},u.eu_cookie_compliance.showWithdrawBanner=function(e){e===s&&l.eu_cookie_compliance.withdraw_enabled&&(l.eu_cookie_compliance.withdraw_button_on_info_popup||(u.eu_cookie_compliance.createWithdrawBanner(l.eu_cookie_compliance.withdraw_markup),u.eu_cookie_compliance.resizeListener()),u.eu_cookie_compliance.attachWithdrawEvents(),l.eu_cookie_compliance.popup_position&&u.eu_cookie_compliance.positionTab())},u.eu_cookie_compliance.setStatus=function(e){var o=new b,o=(d.handleEvent("preStatusSave",o),new Date),i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name;1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a)));parseInt(l.eu_cookie_compliance.cookie_session)?m(n,e,{path:c,domain:i,sameSite:"strict"}):(a=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+a),m(n,e,{expires:o,path:c,domain:i,sameSite:"strict"}));var a="eu-cookie-compliance-status-"+g,n="eu-cookie-compliance-status-"+e,c=(_("."+a).removeClass(a).addClass(n),g=e,_(document).trigger("eu_cookie_compliance.changeStatus",[e]),u.eu_cookie_compliance.setVersion(),l.eu_cookie_compliance.store_consent&&(e===r&&l.eu_cookie_compliance.popup_agreed_enabled||e===s&&!l.eu_cookie_compliance.popup_agreed_enabled)&&(o=l.path.baseUrl+l.path.pathPrefix+"eu-cookie-compliance/store_consent/banner",_.post(o,{},function(e){})),new v);d.handleEvent("postStatusSave",c),e===p&&"opt_out"===l.eu_cookie_compliance.method&&(t=setInterval(u.eu_cookie_compliance.BlockCookies,5e3))},u.eu_cookie_compliance.setAcceptedCategories=function(e){var o=new P,o=(d.handleEvent("prePreferencesSave",o),new Date),i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories",a=(1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a))),JSON.stringify(e)),t=(parseInt(l.eu_cookie_compliance.cookie_session)?m(n,a,{path:c,domain:i,sameSite:"strict"}):(t=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+t),m(n,a,{expires:o,path:c,domain:i,sameSite:"strict"}
20304)),h=e,_(document).trigger("eu_cookie_compliance.changePreferences",[e]),new B);d.handleEvent("postPreferencesSave",t)},u.eu_cookie_compliance.hasAgreed=function(e){var o=g===r||g===s;return o=void 0!==e&&o&&"categories"===l.eu_cookie_compliance.method?u.eu_cookie_compliance.hasAgreedWithCategory(e):o},u.eu_cookie_compliance.hasAgreedWithCategory=function(e){return-1!==_.inArray(e,h)},u.eu_cookie_compliance.showBanner=function(){var e=!1;return g===p&&"default"===l.eu_cookie_compliance.method||null===g?l.eu_cookie_compliance.disagree_do_not_show_popup&&null!==g||(e=!0):(g===r&&l.eu_cookie_compliance.popup_agreed_enabled||g===s&&l.eu_cookie_compliance.withdraw_enabled)&&(e=!0),e},u.eu_cookie_compliance.cookiesEnabled=function(){var e=navigator.cookieEnabled;return void 0!==navigator.cookieEnabled||e||(date.setDate(date.getDate()+100),m("testcookie","testcookie",{expires:date,sameSite:"strict"}),e=-1!==a("testcookie").indexOf("testcookie")),e},u.eu_cookie_compliance.cookieMatches=function(e,o){if(e===o)return!0;if(o.indexOf("*")<0)return!1;try{return new RegExp("^"+o.replace(/\./g,"\\.").replace(/\*/g,".+")+"$","g").test(e)}catch(e){return!1}},u.eu_cookie_compliance.isAllowed=function(e){if(0===e.indexOf("SESS")||0===e.indexOf("SSESS"))return!0;var o,i=l.eu_cookie_compliance.allowed_cookies.split(/\r\n|\n|\r/g);for(o in i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name),i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories"),i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version"),i)if("string"==typeof i[o]){if(u.eu_cookie_compliance.cookieMatches(e,i[o]))return!0;if("categories"===l.eu_cookie_compliance.method){var c=i[o].indexOf(":");if(-1!==c){var n=i[o].substr(0,c),c=i[o].substr(c+1);if(u.eu_cookie_compliance.cookieMatches(e,c)&&u.eu_cookie_compliance.hasAgreedWithCategory(n))return!0}}}return!1},u.eu_cookie_compliance.getVersion=function(){return!!u.eu_cookie_compliance.hasAgreed()&&a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version")},!(u.eu_cookie_compliance.setVersion=function(e){if(!u.eu_cookie_compliance.hasAgreed())return!1;var o=new Date,i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version",a=(1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a))),void 0!==e?e:l.eu_cookie_compliance.cookie_policy_version);parseInt(l.eu_cookie_compliance.cookie_session)?m(n,a,{path:c,domain:i,sameSite:"strict"}):(e=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+e),m(n,a,{expires:o,path:c,domain:i,sameSite:"strict"}))})),i={},o=(_(function(){void 0!==l.eu_cookie_compliance&&(u.eu_cookie_compliance.hasAgreed()||null===g&&"opt_in"!==l.eu_cookie_compliance.method&&"categories"!==l.eu_cookie_compliance.method)&&("function"==typeof euCookieComplianceLoadScripts&&euCookieComplianceLoadScripts(),c=!0,"categories"===l.eu_cookie_compliance.method&&u.eu_cookie_compliance.loadCategoryScripts(h))}),u.eu_cookie_compliance.BlockCookies=function(){var e,o=u.eu_cookie_compliance.getCookieStatus();if(o!==r&&o!==s||"categories"===l.eu_cookie_compliance.method||void 0===t)for(e in a()){var i,c=window.location.hostname,n=!1;if(!u.eu_cookie_compliance.isAllowed(e)){for(;!n&&""!==c;)k(e),(n=!a(e))||(k(e),n=!a(e)),c=-1===(i=c.indexOf("."))?"":c.substring(i+1);n||(document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;")}}else clearInterval(t)},void 0===l.eu_cookie_compliance||!l.eu_cookie_compliance.automatic_cookies_removal||("opt_in"!==l.eu_cookie_compliance.method||null!==g&&u.eu_cookie_compliance.hasAgreed())&&("opt_out"!==l.eu_cookie_compliance.method||u.eu_cookie_compliance.hasAgreed()||null===g)&&"categories"!==l.eu_cookie_compliance.method||(t=setInterval(u.eu_cookie_compliance.BlockCookies,5e3)),d.handleEvent=function(e,o){for(var i=function(e){var o=[];if(void 0!==u.eu_cookie_compliance&&void 0!==u.eu_cookie_compliance.queue&&u.eu_cookie_compliance.queue.length)for(var i,c,n=0;n<u.eu_cookie_compliance.queue.length;n++)u.eu_cookie_compliance.queue[n].length&&(i=(c=u.eu_cookie_compliance.queue[n])[0],c=c[1],"string"==typeof i&&"function"==typeof c&&i===e&&o.push(c));return o}(e),c=0;c<i.length;c++)void 0!==i[c]&&(o.subscribe(i[c]),o.fire({currentStatus:g,currentCategories:h}),o.unsubscribe(i[c]))},(T=e.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;
20304this.handlers.forEach(function(e){e.call(i,o)})},e);function e(){this.handlers=[]}(T=f.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var n=f;function f(){this.handlers=[]}(T=w.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var b=w;function w(){this.handlers=[]}(T=y.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var v=y;function y(){this.handlers=[]}(T=x.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var C=x;function x(){this.handlers=[]}(T=A.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var S=A;function A(){this.handlers=[]}(T=E.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var P=E;function E(){this.handlers=[]}(T=H.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var T,B=H;function H(){this.handlers=[]}}(jQuery,Drupal,drupalSettings,window.Cookies);;
20305/**
20306* DO NOT EDIT THIS FILE.
20307* See the following change record for more information,
20308* https://www.drupal.org/node/2815083
20309* @preserve
20310**/
20311(function ($, Drupal, drupalSettings) {
20312  $(document).ready(function () {
20313    $.ajax({
20314      type: 'POST',
20315      cache: false,
20316      url: drupalSettings.statistics.url,
20317      data: drupalSettings.statistics.data
20318    });
20319  });
20320})(jQuery, Drupal, drupalSettings);;
20321/**
20322 * @file
20323 * better_exposed_filters.js
20324 *
20325 * Provides some client-side functionality for the Better Exposed Filters module.
20326 */
20327
20328(function ($, Drupal) {
20329  Drupal.behaviors.betterExposedFilters = {
20330    attach: function (context) {
20331      // Add highlight class to checked checkboxes for better theming.
20332      $('.bef-tree input[type=checkbox], .bef-checkboxes input[type=checkbox]')
20333        // Highlight newly selected checkboxes.
20334        .change(function () {
20335          _bef_highlight(this, context);
20336        })
20337        .filter(':checked').closest('.form-item', context).addClass('highlight');
20338    }
20339  };
20340
20341  /*
20342   * Helper functions
20343   */
20344
20345  /**
20346   * Adds/Removes the highlight class from the form-item div as appropriate.
20347   */
20348  function _bef_highlight(elem, context) {
20349    $elem = $(elem, context);
20350    $elem.attr('checked')
20351      ? $elem.closest('.form-item', context).addClass('highlight')
20352      : $elem.closest('.form-item', context).removeClass('highlight');
20353  }
20354
20355})(jQuery, Drupal);
20356;
20357/**
20358 * @file
20359 * bef_select_all_none.js
20360 *
20361 * Adds select all/none toggle functionality to an exposed filter.
20362 */
20363
20364(function ($, once) {
20365  Drupal.behaviors.betterExposedFiltersSelectAllNone = {
20366    attach: function (context) {
20367      /*
20368       * Add Select all/none links to specified checkboxes
20369       */
20370      var selected = $('.form-checkboxes.bef-select-all-none:not(.bef-processed)');
20371      if (selected.length) {
20372        var selAll = Drupal.t('Select All');
20373        var selNone = Drupal.t('Select None');
20374
20375        // Set up a prototype link and event handlers.
20376        var link = $('<a class="bef-toggle bef-toggle--select-all" href="#">
20376' + selAll + '</a>');
20377        link.click(function (event) {
20378          // Don't actually follow the link...
20379          event.preventDefault();
20380          event.stopPropagation();
20381
20382          if (selAll === $(this).text()) {
20383            // Select all the checkboxes.
20384            $(this)
20385              .html(selNone)
20386              .removeClass('bef-toggle--select-all')
20387              .addClass('bef-toggle--deselect-all')
20388              .siblings('.bef-select-all-none, .bef-tree')
20389              .find('input:checkbox').each(function () {
20390                $(this).prop('checked', true);
20391                // @TODO:
20392                // _bef_highlight(this, context);
20393              })
20394              .end()
20395
20396              // attr() doesn't trigger a change event, so we do it ourselves. But just on
20397              // one checkbox otherwise we have many spinning cursors.
20398              .find('input[type=checkbox]:first').change();
20399          }
20400          else {
20401            // Unselect all the checkboxes.
20402            $(this)
20403              .html(selAll)
20404              .removeClass('bef-toggle--deselect-all')
20405              .addClass('bef-toggle--select-all')
20406              .siblings('.bef-select-all-none, .bef-tree')
20407              .find('input:checkbox').each(function () {
20408                $(this).prop('checked', false);
20409                // @TODO:
20410                // _bef_highlight(this, context);
20411              })
20412              .end()
20413
20414              // attr() doesn't trigger a change event, so we do it ourselves. But just on
20415              // one checkbox otherwise we have many spinning cursors.
20416              .find('input[type=checkbox]:first').change();
20417          }
20418        });
20419
20420        // Add link to the page for each set of checkboxes.
20421        selected
20422          .addClass('bef-processed')
20423          .each(function (index) {
20424            // Clone the link prototype and insert into the DOM.
20425            var newLink = link.clone(true);
20426
20427            newLink.insertBefore($(this));
20428
20429             // Show select all/none when single checkbox is checked/unchecked
20430             $('input:checkbox', this).click(function() {
20431              if ($(this).prop("checked") === true) {
20432                newLink.text(selNone);
20433              }
20434              else if ($(this).prop("checked") === false) {
20435                newLink.text(selAll);
20436              }
20437            });
20438
20439            // If all checkboxes are already checked by default then switch to Select None.
20440            if ($('input:checkbox:checked', this).length === $('input:checkbox', this).length) {
20441              newLink.text(selNone).removeClass('bef-toggle--select-all').addClass('bef-toggle--deselect-all');
20442            }
20443          });
20444      }
20445
20446      // @TODO:
20447      // Add highlight class to checked checkboxes for better theming
20448      // $('.bef-tree input[type="checkbox"], .bef-checkboxes input[type="checkbox"]')
20449      // Highlight newly selected checkboxes
20450      //  .change(function () {
20451      //    _bef_highlight(this, context);
20452      //  })
20453      //  .filter(':checked').closest('.form-item', context).addClass('highlight')
20454      // ;
20455      // @TODO: Put this somewhere else...
20456      // Check for and initialize datepickers
20457      // if (Drupal.settings.better_exposed_filters.datepicker) {
20458      //  // Note: JavaScript does not treat "" as null
20459      //  if (Drupal.settings.better_exposed_filters.datepicker_options.dateformat) {
20460      //    $('.bef-datepicker').datepicker({
20461      //      dateFormat: Drupal.settings.better_exposed_filters.datepicker_options.dateformat
20462      //    });
20463      //  }
20464      //  else {
20465      //    $('.bef-datepicker').datepicker();
20466      //  }
20467      // }
20468    }                   // attach: function() {
20469  };                    // Drupal.behaviors.better_exposed_filters = {.
20470
20471  Drupal.behaviors.betterExposedFiltersAllNoneNested = {
20472    attach: function (context, settings) {
20473      $(once('bef-all-none-nested', '.bef-select-all-none-nested ul li')).each(function () {
20474        var $this = $(this);
20475        // Check/uncheck child terms along with their parent.
20476        $this.find('input:checkbox:first').change(function () {
20477          $(this).closest('li').find('ul li input:checkbox').prop('checked', this.checked);
20478        });
20479
20480        // When a child term is checked or unchecked, set the parent term's
20481        // status as needed.
20482        $this.find('ul input:checkbox').change(function () {
20483          // Determine the number of unchecked sibling checkboxes.
20484          var $this = $(this);
20485          var uncheckedSiblings = $this.closest('li').siblings('li').find('> div > input:checkbox:not(:checked)').length;
20486
20487          // If this term or any siblings are unchecked, uncheck the parent and
20488          // all ancestors.
20489          if (uncheckedSiblings || !this.checked) {
20490            $this.parents('ul').siblings('div').find('input:checkbox').prop('checked', false);
20491          }
20492
20493          // If this and all sibling terms are checked, check the parent. Then
20494          // trigger the parent's change event to see if that change affects the
20495          // grandparent's checked state.
20496          if (this.checked && !uncheckedSiblings) {
20497            $(this).closest('ul').closest('li').find('input:checkbox:first').prop('checked', true).change();
20498          }
20499        });
20500      });
20501    }
20502  };
20503
20504})(jQuery, once);
20505;
20506/**
20507* DO NOT EDIT THIS FILE.
20508* See the following change record for more information,
20509* https://www.drupal.org/node/2815083
20510* @preserve
20511**/
20512Drupal.debounce = function (func, wait, immediate) {
20513  var timeout;
20514  var result;
20515  return function () {
20516    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
20517      args[_key] = arguments[_key];
20518    }
20519    var context = this;
20520    var later = function later() {
20521      timeout = null;
20522      if (!immediate) {
20523        result = func.apply(context, args);
20524      }
20525    };
20526    var callNow = immediate && !timeout;
20527    clearTimeout(timeout);
20528    timeout = setTimeout(later, wait);
20529    if (callNow) {
20530      result = func.apply(context, args);
20531    }
20532    return result;
20533  };
20534};;
20535/**
20536* DO NOT EDIT THIS FILE.
20537* See the following change record for more information,
20538* https://www.drupal.org/node/2815083
20539* @preserve
20540**/
20541(function ($, once) {
20542  var deprecatedMessageSuffix = "is deprecated in Drupal 9.3.0 and will be removed in Drupal 10.0.0. Use the core/once library instead. See https://www.drupal.org/node/3158256";
20543  var originalJQOnce = $.fn.once;
20544  var originalJQRemoveOnce = $.fn.removeOnce;
20545  $.fn.once = function jQueryOnce(id) {
20546    Drupal.deprecationError({
20547      message: "jQuery.once() ".concat(deprecatedMessageSuffix)
20548    });
20549    return originalJQOnce.apply(this, [id]);
20550  };
20551  $.fn.removeOnce = function jQueryRemoveOnce(id) {
20552    Drupal.deprecationError({
20553      message: "jQuery.removeOnce() ".concat(deprecatedMessageSuffix)
20554    });
20555    return originalJQRemoveOnce.apply(this, [id]);
20556  };
20557  var drupalOnce = once;
20558  function augmentedOnce(id, selector, context) {
20559    originalJQOnce.apply($(selector, context), [id]);
20560    return drupalOnce(id, selector, context);
20561  }
20562  function remove(id, selector, context) {
20563    originalJQRemoveOnce.apply($(selector, context), [id]);
20564    return drupalOnce.remove(id, selector, context);
20565  }
20566  window.once = Object.assign(augmentedOnce, drupalOnce, {
20567    remove: remove
20568  });
20569})(jQuery, once);;
20570/**
20571* DO NOT EDIT THIS FILE.
20572* See the following change record for more information,
20573* https://www.drupal.org/node/2815083
20574* @preserve
20575**/
20576(function ($, Drupal, debounce) {
20577  $.fn.drupalGetSummary = function () {
20578    var callback = this.data('summaryCallback');
20579    return this[0] && callback ? callback(this[0]).trim() : '';
20580  };
20581  $.fn.drupalSetSummary = function (callback) {
20582    var self = this;
20583    if (typeof callback !== 'function') {
20584      var val = callback;
20585      callback = function callback() {
20586        return val;
20587      };
20588    }
20589    return this.data('summaryCallback', callback).off('formUpdated.summary').on('formUpdated.summary', function () {
20590      self.trigger('summaryUpdated');
20591    }).trigger('summaryUpdated');
20592  };
20593  Drupal.behaviors.formSingleSubmit = {
20594    attach: function attach() {
20595      function onFormSubmit(e) {
20596        var $form = $(e.currentTarget);
20597        var formValues = $form.serialize();
20598        var previousValues = $form.attr('data-drupal-form-submit-last');
20599        if (previousValues === formValues) {
20600          e.preventDefault();
20601        } else {
20602          $form.attr('data-drupal-form-submit-last', formValues);
20603        }
20604      }
20605      $(once('form-single-submit', 'body')).on('submit.singleSubmit', 'form:not([method~="GET"])', onFormSubmit);
20606    }
20607  };
20608  function triggerFormUpdated(element) {
20609    $(element).trigger('formUpdated');
20610  }
20611  function fieldsList(form) {
20612    return [].map.call(form.querySelectorAll('[name][id]'), function (el) {
20613      return el.id;
20614    });
20615  }
20616  Drupal.behaviors.formUpdated = {
20617    attach: function attach(context) {
20618      var $context = $(context);
20619      var contextIsForm = $context.is('form');
20620      var $forms = $(once('form-updated', contextIsForm ? $context : $context.find('form')));
20621      var formFields;
20622      if ($forms.length) {
20623        $.makeArray($forms).forEach(function (form) {
20624          var events = 'change.formUpdated input.formUpdated ';
20625          var eventHandler = debounce(function (event) {
20626            triggerFormUpdated(event.target);
20627          }, 300);
20628          formFields = fieldsList(form).join(',');
20629          form.setAttribute('data-drupal-form-fields', formFields);
20630          $(form).on(events, eventHandler);
20631        });
20632      }
20633      if (contextIsForm) {
20634        formFields = fieldsList(context).join(',');
20635        var currentFields = $(context).attr('data-drupal-form-fields');
20636        if (formFields !== currentFields) {
20637          triggerFormUpdated(context);
20638        }
20639      }
20640    },
20641    detach: function detach(context, settings, trigger) {
20642      var $context = $(context);
20643      var contextIsForm = $context.is('form');
20644      if (trigger === 'unload') {
20645        once.remove('form-updated', contextIsForm ? $context : $context.find('form')).forEac
20645h(function (form) {
20646          form.removeAttribute('data-drupal-form-fields');
20647          $(form).off('.formUpdated');
20648        });
20649      }
20650    }
20651  };
20652  Drupal.behaviors.fillUserInfoFromBrowser = {
20653    attach: function attach(context, settings) {
20654      var userInfo = ['name', 'mail', 'homepage'];
20655      var $forms = $(once('user-info-from-browser', '[data-user-info-from-browser]'));
20656      if ($forms.length) {
20657        userInfo.forEach(function (info) {
20658          var $element = $forms.find("[name=".concat(info, "]"));
20659          var browserData = localStorage.getItem("Drupal.visitor.".concat(info));
20660          if (!$element.length) {
20661            return;
20662          }
20663          var emptyValue = $element[0].value === '';
20664          var defaultValue = $element.attr('data-drupal-default-value') === $element[0].value;
20665          if (browserData && (emptyValue || defaultValue)) {
20666            $element.each(function (index, item) {
20667              item.value = browserData;
20668            });
20669          }
20670        });
20671      }
20672      $forms.on('submit', function () {
20673        userInfo.forEach(function (info) {
20674          var $element = $forms.find("[name=".concat(info, "]"));
20675          if ($element.length) {
20676            localStorage.setItem("Drupal.visitor.".concat(info), $element[0].value);
20677          }
20678        });
20679      });
20680    }
20681  };
20682  var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e) {
20683    var url;
20684    if (e.type === 'click') {
20685      url = e.currentTarget.location ? e.currentTarget.location : e.currentTarget;
20686    } else {
20687      url = window.location;
20688    }
20689    var hash = url.hash.substr(1);
20690    if (hash) {
20691      var $target = $("#".concat(hash));
20692      $('body').trigger('formFragmentLinkClickOrHashChange', [$target]);
20693      setTimeout(function () {
20694        return $target.trigger('focus');
20695      }, 300);
20696    }
20697  };
20698  var debouncedHandleFragmentLinkClickOrHashChange = debounce(handleFragmentLinkClickOrHashChange, 300, true);
20699  $(window).on('hashchange.form-fragment', debouncedHandleFragmentLinkClickOrHashChange);
20700  $(document).on('click.form-fragment', 'a[href*="#"]', debouncedHandleFragmentLinkClickOrHashChange);
20701})(jQuery, Drupal, Drupal.debounce);;
20702/**
20703* DO NOT EDIT THIS FILE.
20704* See the following change record for more information,
20705* https://www.drupal.org/node/2815083
20706* @preserve
20707**/
20708(function ($, Drupal) {
20709  function DetailsSummarizedContent(node) {
20710    this.$node = $(node);
20711    this.setupSummary();
20712  }
20713  $.extend(DetailsSummarizedContent, {
20714    instances: []
20715  });
20716  $.extend(DetailsSummarizedContent.prototype, {
20717    setupSummary: function setupSummary() {
20718      this.$detailsSummarizedContentWrapper = $(Drupal.theme('detailsSummarizedContentWrapper'));
20719      this.$node.on('summaryUpdated', $.proxy(this.onSummaryUpdated, this)).trigger('summaryUpdated').find('> summary').append(this.$detailsSummarizedContentWrapper);
20720    },
20721    onSummaryUpdated: function onSummaryUpdated() {
20722      var text = this.$node.drupalGetSummary();
20723      this.$detailsSummarizedContentWrapper.html(Drupal.theme('detailsSummarizedContentText', text));
20724    }
20725  });
20726  Drupal.behaviors.detailsSummary = {
20727    attach: function attach(context) {
20728      DetailsSummarizedContent.instances = DetailsSummarizedContent.instances.concat(once('details', 'details', context).map(function (details) {
20729        return new DetailsSummarizedContent(details);
20730      }));
20731    }
20732  };
20733  Drupal.DetailsSummarizedContent = DetailsSummarizedContent;
20734  Drupal.theme.detailsSummarizedContentWrapper = function () {
20735    return "<span class=\"summary\"></span>";
20736  };
20737  Drupal.theme.detailsSummarizedContentText = function (text) {
20738    return text ? " (".concat(text, ")") : '';
20739  };
20740})(jQuery, Drupal);;
20741/**
20742* DO NOT EDIT THIS FILE.
20743* See the following change record for more information,
20744* https://www.drupal.org/node/2815083
20745* @preserve
20746**/
20747(function ($, Drupal) {
20748  Drupal.behaviors.detailsAria = {
20749    attach: function attach() {
20750      $(once('detailsAria', 'body')).on('click.detailsAria', 'summary', function (event) {
20751        var $summary = $(event.currentTarget);
20752        var open = $(event.currentTarget.parentNode).attr('open') === 'open' ? 'false' : 'true';
20753        $summary.attr({
20754          'aria-expanded': open,
20755          'aria-pressed': open
20756        });
20757      });
20758    }
20759  };
20760})(jQuery, Drupal);;
20761/**
20762* DO NOT EDIT THIS FILE.
20763* See the following change record for more information,
20764* https://www.drupal.org/node/2815083
20765* @preserve
20766**/
20767(function ($, Modernizr, Drupal) {
20768  function CollapsibleDetails(node) {
20769    this.$node = $(node);
20770    this.$node.data('details', this);
20771    var anchor = window.location.hash && window.location.hash !== '#' ? ", ".concat(window.location.hash) : '';
20772    if (this.$node.find(".error".concat(anchor)).length) {
20773      this.$node.attr('open', true);
20774    }
20775    this.setupSummaryPolyfill();
20776  }
20777  $.extend(CollapsibleDetails, {
20778    instances: []
20779  });
20780  $.extend(CollapsibleDetails.prototype, {
20781    setupSummaryPolyfill: function setupSummaryPolyfill() {
20782      var $summary = this.$node.find('> summary');
20783      $summary.attr('tabindex', '-1');
20784      $('<span class="details-summary-prefix visually-hidden"></span>').append(this.$node.attr('open') ? Drupal.t('Hide') : Drupal.t('Show')).prependTo($summary).after(document.createTextNode(' '));
20785      $('<a class="details-title"></a>').attr('href', "#".concat(this.$node.attr('id'))).prepend($summary.contents()).appendTo($summary);
20786      $summary.append(this.$summary).on('click', $.proxy(this.onSummaryClick, this));
20787    },
20788    onSummaryClick: function onSummaryClick(e) {
20789      this.toggle();
20790      e.preventDefault();
20791    },
20792    toggle: function toggle() {
20793      var _this = this;
20794      var isOpen = !!this.$node.attr('open');
20795      var $summaryPrefix = this.$node.find('> summary span.details-summary-prefix');
20796      if (isOpen) {
20797        $summaryPrefix.html(Drupal.t('Show'));
20798      } else {
20799        $summaryPrefix.html(Drupal.t('Hide'));
20800      }
20801      setTimeout(function () {
20802        _this.$node.attr('open', !isOpen);
20803      }, 0);
20804    }
20805  });
20806  Drupal.behaviors.collapse = {
20807    attach: function attach(context) {
20808      if (Modernizr.details) {
20809        return;
20810      }
20811      once('collapse', 'details', context).forEach(function (detail) {
20812        detail.classList.add('collapse-processed');
20813        CollapsibleDetails.instances.push(new CollapsibleDetails(detail));
20814      });
20815    }
20816  };
20817  var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e, $target) {
20818    $target.parents('details').not('[open]').find('> summary').trigger('click');
20819  };
20820  $('body').on('formFragmentLinkClickOrHashChange.details', handleFragmentLinkClickOrHashChange);
20821  Drupal.CollapsibleDetails = CollapsibleDetails;
20822})(jQuery, Modernizr, Drupal);;

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