var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}})
;/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!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(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.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:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.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||v(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&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+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]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(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},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},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(c(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:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=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))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(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&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(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&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(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 U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);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&&C){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=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,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(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===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]||I.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]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(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(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(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=I.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(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(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:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?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=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!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 q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(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]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[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?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(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 Z(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 ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(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=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.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=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(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&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.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(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.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 ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.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&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.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){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.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},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.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 ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(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,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.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=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(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},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(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[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(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(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.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&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.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=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.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=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.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 ne={};function re(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]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={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 Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(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"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.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<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(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)Le(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=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.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),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.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,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.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=ce.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=((ce.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<ce(i,this).index(l):ce.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(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(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[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,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&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.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},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(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=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(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=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.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 $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(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&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(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&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=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},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.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 Ye(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%",J.appendChild(u).appendChild(l);var e=ie.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),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{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=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[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+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!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,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.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=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.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=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.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):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.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=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),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:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.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=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.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=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(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),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.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&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._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--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.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||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.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=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.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||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.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})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.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=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(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(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.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=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.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)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(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 v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(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=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.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||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.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]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(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)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.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 Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,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":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),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,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.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&&(v.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),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.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&&ie.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]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.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}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(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 v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!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(Yt[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&&ie.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()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.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 ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<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)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.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),v(t)&&(t=t.call(e,n,ce.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)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.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"===ce.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"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(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)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(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?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.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.on("mouseenter",e).on("mouseleave",t||e)}}),ce.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){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
jQuery.noConflict();
;/*! jQuery Migrate v3.4.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e,window)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery"),window):t(jQuery,window)}(function(s,n){"use strict";function e(e){return 0<=function(e,t){for(var r=/^(\d+)\.(\d+)\.(\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],a=1;a<=3;a++){if(+o[a]<+n[a])return 1;if(+n[a]<+o[a])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion="3.4.1";var t=Object.create(null);s.migrateDisablePatches=function(){for(var e=0;e<arguments.length;e++)t[arguments[e]]=!0},s.migrateEnablePatches=function(){for(var e=0;e<arguments.length;e++)delete t[arguments[e]]},s.migrateIsPatchEnabled=function(e){return!t[e]},n.console&&n.console.log&&(s&&e("3.0.0")&&!e("5.0.0")||n.console.log("JQMIGRATE: jQuery 3.x-4.x REQUIRED"),s.migrateWarnings&&n.console.log("JQMIGRATE: Migrate plugin loaded multiple times"),n.console.log("JQMIGRATE: Migrate is installed"+(s.migrateMute?"":" with logging active")+", version "+s.migrateVersion));var o={};function u(e,t){var r=n.console;!s.migrateIsPatchEnabled(e)||s.migrateDeduplicateWarnings&&o[t]||(o[t]=!0,s.migrateWarnings.push(t+" ["+e+"]"),r&&r.warn&&!s.migrateMute&&(r.warn("JQMIGRATE: "+t),s.migrateTrace&&r.trace&&r.trace()))}function r(e,t,r,n,o){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return u(n,o),r},set:function(e){u(n,o),r=e}})}function a(e,t,r,n,o){var a=e[t];e[t]=function(){return o&&u(n,o),(s.migrateIsPatchEnabled(n)?r:a||s.noop).apply(this,arguments)}}function c(e,t,r,n,o){if(!o)throw new Error("No warning message provided");return a(e,t,r,n,o),0}function i(e,t,r,n){return a(e,t,r,n),0}s.migrateDeduplicateWarnings=!0,s.migrateWarnings=[],void 0===s.migrateTrace&&(s.migrateTrace=!0),s.migrateReset=function(){o={},s.migrateWarnings.length=0},"BackCompat"===n.document.compatMode&&u("quirks","jQuery is not compatible with Quirks Mode");var d,l,p,f={},m=s.fn.init,y=s.find,h=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,g=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,v=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;for(d in i(s.fn,"init",function(e){var t=Array.prototype.slice.call(arguments);return s.migrateIsPatchEnabled("selector-empty-id")&&"string"==typeof e&&"#"===e&&(u("selector-empty-id","jQuery( '#' ) is not a valid selector"),t[0]=[]),m.apply(this,t)},"selector-empty-id"),s.fn.init.prototype=s.fn,i(s,"find",function(t){var r=Array.prototype.slice.call(arguments);if("string"==typeof t&&h.test(t))try{n.document.querySelector(t)}catch(e){t=t.replace(g,function(e,t,r,n){return"["+t+r+'"'+n+'"]'});try{n.document.querySelector(t),u("selector-hash","Attribute selector with '#' must be quoted: "+r[0]),r[0]=t}catch(e){u("selector-hash","Attribute selector with '#' was not fixed: "+r[0])}}return y.apply(this,r)},"selector-hash"),y)Object.prototype.hasOwnProperty.call(y,d)&&(s.find[d]=y[d]);c(s.fn,"size",function(){return this.length},"size","jQuery.fn.size() is deprecated and removed; use the .length property"),c(s,"parseJSON",function(){return JSON.parse.apply(null,arguments)},"parseJSON","jQuery.parseJSON is deprecated; use JSON.parse"),c(s,"holdReady",s.holdReady,"holdReady","jQuery.holdReady is deprecated"),c(s,"unique",s.uniqueSort,"unique","jQuery.unique is deprecated; use jQuery.uniqueSort"),r(s.expr,"filters",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"),r(s.expr,":",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"),e("3.1.1")&&c(s,"trim",function(e){return null==e?"":(e+"").replace(v,"$1")},"trim","jQuery.trim is deprecated; use String.prototype.trim"),e("3.2.0")&&(c(s,"nodeName",function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},"nodeName","jQuery.nodeName is deprecated"),c(s,"isArray",Array.isArray,"isArray","jQuery.isArray is deprecated; use Array.isArray")),e("3.3.0")&&(c(s,"isNumeric",function(e){var t=typeof e;return("number"==t||"string"==t)&&!isNaN(e-parseFloat(e))},"isNumeric","jQuery.isNumeric() is deprecated"),s.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){f["[object "+t+"]"]=t.toLowerCase()}),c(s,"type",function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[Object.prototype.toString.call(e)]||"object":typeof e},"type","jQuery.type is deprecated"),c(s,"isFunction",function(e){return"function"==typeof e},"isFunction","jQuery.isFunction() is deprecated"),c(s,"isWindow",function(e){return null!=e&&e===e.window},"isWindow","jQuery.isWindow() is deprecated")),s.ajax&&(l=s.ajax,p=/(=)\?(?=&|$)|\?\?/,i(s,"ajax",function(){var e=l.apply(this,arguments);return e.promise&&(c(e,"success",e.done,"jqXHR-methods","jQXHR.success is deprecated and removed"),c(e,"error",e.fail,"jqXHR-methods","jQXHR.error is deprecated and removed"),c(e,"complete",e.always,"jqXHR-methods","jQXHR.complete is deprecated and removed")),e},"jqXHR-methods"),e("4.0.0")||s.ajaxPrefilter("+json",function(e){!1!==e.jsonp&&(p.test(e.url)||"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&p.test(e.data))&&u("jsonp-promotion","JSON-to-JSONP auto-promotion is deprecated")}));var j=s.fn.removeAttr,b=s.fn.toggleClass,w=/\S+/g;function x(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}i(s.fn,"removeAttr",function(e){var r=this,n=!1;return s.each(e.match(w),function(e,t){s.expr.match.bool.test(t)&&r.each(function(){if(!1!==s(this).prop(t))return!(n=!0)}),n&&(u("removeAttr-bool","jQuery.fn.removeAttr no longer sets boolean properties: "+t),r.prop(t,!1))}),j.apply(this,arguments)},"removeAttr-bool"),i(s.fn,"toggleClass",function(t){return void 0!==t&&"boolean"!=typeof t?b.apply(this,arguments):(u("toggleClass-bool","jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var e=this.getAttribute&&this.getAttribute("class")||"";e&&s.data(this,"__className__",e),this.setAttribute&&this.setAttribute("class",!e&&!1!==t&&s.data(this,"__className__")||"")}))},"toggleClass-bool");var Q,A,R=!1,C=/^[a-z]/,N=/^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;s.swap&&s.each(["height","width","reliableMarginRight"],function(e,t){var r=s.cssHooks[t]&&s.cssHooks[t].get;r&&(s.cssHooks[t].get=function(){var e;return R=!0,e=r.apply(this,arguments),R=!1,e})}),i(s,"swap",function(e,t,r,n){var o,a,i={};for(a in R||u("swap","jQuery.swap() is undocumented and deprecated"),t)i[a]=e.style[a],e.style[a]=t[a];for(a in o=r.apply(e,n||[]),t)e.style[a]=i[a];return o},"swap"),e("3.4.0")&&"undefined"!=typeof Proxy&&(s.cssProps=new Proxy(s.cssProps||{},{set:function(){return u("cssProps","jQuery.cssProps is deprecated"),Reflect.set.apply(this,arguments)}})),e("4.0.0")?(A={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},"undefined"!=typeof Proxy?s.cssNumber=new Proxy(A,{get:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.get.apply(this,arguments)},set:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.set.apply(this,arguments)}}):s.cssNumber=A):A=s.cssNumber,Q=s.fn.css,i(s.fn,"css",function(e,t){var r,n,o=this;return e&&"object"==typeof e&&!Array.isArray(e)?(s.each(e,function(e,t){s.fn.css.call(o,e,t)}),this):("number"==typeof t&&(r=x(e),n=r,C.test(n)&&N.test(n[0].toUpperCase()+n.slice(1))||A[r]||u("css-number",'Number-typed values are deprecated for jQuery.fn.css( "'+e+'", value )')),Q.apply(this,arguments))},"css-number");var S,P,k,H,E=s.data;i(s,"data",function(e,t,r){var n,o,a;if(t&&"object"==typeof t&&2===arguments.length){for(a in n=s.hasData(e)&&E.call(this,e),o={},t)a!==x(a)?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+a),n[a]=t[a]):o[a]=t[a];return E.call(this,e,o),t}return t&&"string"==typeof t&&t!==x(t)&&(n=s.hasData(e)&&E.call(this,e))&&t in n?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+t),2<arguments.length&&(n[t]=r),n[t]):E.apply(this,arguments)},"data-camelCase"),s.fx&&(k=s.Tween.prototype.run,H=function(e){return e},i(s.Tween.prototype,"run",function(){1<s.easing[this.easing].length&&(u("easing-one-arg","'jQuery.easing."+this.easing.toString()+"' should use only one argument"),s.easing[this.easing]=H),k.apply(this,arguments)},"easing-one-arg"),S=s.fx.interval,P="jQuery.fx.interval is deprecated",n.requestAnimationFrame&&Object.defineProperty(s.fx,"interval",{configurable:!0,enumerable:!0,get:function(){return n.document.hidden||u("fx-interval",P),s.migrateIsPatchEnabled("fx-interval")&&void 0===S?13:S},set:function(e){u("fx-interval",P),S=e}}));var M=s.fn.load,q=s.event.add,O=s.event.fix;s.event.props=[],s.event.fixHooks={},r(s.event.props,"concat",s.event.props.concat,"event-old-patch","jQuery.event.props.concat() is deprecated and removed"),i(s.event,"fix",function(e){var t,r=e.type,n=this.fixHooks[r],o=s.event.props;if(o.length){u("event-old-patch","jQuery.event.props are deprecated and removed: "+o.join());while(o.length)s.event.addProp(o.pop())}if(n&&!n._migrated_&&(n._migrated_=!0,u("event-old-patch","jQuery.event.fixHooks are deprecated and removed: "+r),(o=n.props)&&o.length))while(o.length)s.event.addProp(o.pop());return t=O.call(this,e),n&&n.filter?n.filter(t,e):t},"event-old-patch"),i(s.event,"add",function(e,t){return e===n&&"load"===t&&"complete"===n.document.readyState&&u("load-after-event","jQuery(window).on('load'...) called after load event occurred"),q.apply(this,arguments)},"load-after-event"),s.each(["load","unload","error"],function(e,t){i(s.fn,t,function(){var e=Array.prototype.slice.call(arguments,0);return"load"===t&&"string"==typeof e[0]?M.apply(this,e):(u("shorthand-removed-v3","jQuery.fn."+t+"() is deprecated"),e.splice(0,0,t),arguments.length?this.on.apply(this,e):(this.triggerHandler.apply(this,e),this))},"shorthand-removed-v3")}),s.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,r){c(s.fn,r,function(e,t){return 0<arguments.length?this.on(r,null,e,t):this.trigger(r)},"shorthand-deprecated-v3","jQuery.fn."+r+"() event shorthand is deprecated")}),s(function(){s(n.document).triggerHandler("ready")}),s.event.special.ready={setup:function(){this===n.document&&u("ready-event","'ready' event is deprecated")}},c(s.fn,"bind",function(e,t,r){return this.on(e,null,t,r)},"pre-on-methods","jQuery.fn.bind() is deprecated"),c(s.fn,"unbind",function(e,t){return this.off(e,null,t)},"pre-on-methods","jQuery.fn.unbind() is deprecated"),c(s.fn,"delegate",function(e,t,r,n){return this.on(t,e,r,n)},"pre-on-methods","jQuery.fn.delegate() is deprecated"),c(s.fn,"undelegate",function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},"pre-on-methods","jQuery.fn.undelegate() is deprecated"),c(s.fn,"hover",function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)},"pre-on-methods","jQuery.fn.hover() is deprecated");function T(e){var t=n.document.implementation.createHTMLDocument("");return t.body.innerHTML=e,t.body&&t.body.innerHTML}var F=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.migrateEnablePatches("self-closed-tags")},i(s,"htmlPrefilter",function(e){var t,r;return(r=(t=e).replace(F,"<$1></$2>"))!==t&&T(t)!==T(r)&&u("self-closed-tags","HTML tags must be properly nested and closed: "+t),e.replace(F,"<$1></$2>")},"self-closed-tags"),s.migrateDisablePatches("self-closed-tags");var D,W,_,I=s.fn.offset;return i(s.fn,"offset",function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?I.apply(this,arguments):(u("offset-valid-elem","jQuery.fn.offset() requires a valid DOM element"),arguments.length?this:void 0)},"offset-valid-elem"),s.ajax&&(D=s.param,i(s,"param",function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u("param-ajax-traditional","jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),t=r),D.call(this,e,t)},"param-ajax-traditional")),c(s.fn,"andSelf",s.fn.addBack,"andSelf","jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"),s.Deferred&&(W=s.Deferred,_=[["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),"rejected"],["notify","progress",s.Callbacks("memory"),s.Callbacks("memory")]],i(s,"Deferred",function(e){var a=W(),i=a.promise();function t(){var o=arguments;return s.Deferred(function(n){s.each(_,function(e,t){var r="function"==typeof o[e]&&o[e];a[t[1]](function(){var e=r&&r.apply(this,arguments);e&&"function"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+"With"](this===i?n.promise():this,r?[e]:arguments)})}),o=null}).promise()}return c(a,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),c(i,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),e&&e.call(a,a),a},"deferred-pipe"),s.Deferred.exceptionHook=W.exceptionHook),s});
;var bb_powerpack={search_term:'',version:'2.38.3',getAjaxUrl:function(){return atob('aHR0cHM6Ly9qaW1zaXQuY29tLmF1L3dwLWFkbWluL2FkbWluLWFqYXgucGhw')},callback:function(){}}
;if(typeof window.jcbForms==='undefined'){window.jcbForms={}}
window.jcbForms['6127']={division_id:'24',country:'AU',service_ids:[],hide_logo:'0',show_country:'1',show_info_text:'1',enable_popup:'0',grouping_enabled:'0',custom_order_enabled:'1',alphabetical_order:'0',show_only_services:[],show_only_divisions:[],exclude_services:[],service_list:'',}
;let headerHeight=document.querySelector('header').offsetHeight
let row=document.querySelector('.sticky_row')
if(row!=undefined){document.getElementsByTagName('body')[0].onscroll=()=>{if(window.scrollY>headerHeight){row.classList.add("on")}else{row.classList.remove("on")}}}
;document.addEventListener("DOMContentLoaded",function(){var searchStepDiv=document.querySelector('.jims-wpcb__step__search');if(searchStepDiv){searchStepDiv.style.display='none'}})
;var astra={"break_point":"768","isRtl":"","is_scroll_to_id":"","is_scroll_to_top":"1","is_header_footer_builder_active":"1","responsive_cart_click":"flyout","revealEffectEnable":"","edit_post_url":"https:\/\/jimsit.com.au\/wp-admin\/post.php?post={{id}}&action=edit","ajax_url":"https:\/\/jimsit.com.au\/wp-admin\/admin-ajax.php","infinite_count":"2","infinite_total":"0","pagination":"number","infinite_scroll_event":"scroll","no_more_post_message":"No more posts to show.","grid_layout":"1","site_url":"https:\/\/jimsit.com.au","blogArchiveTitleLayout":"","blogArchiveTitleOn":"","show_comments":"Show Comments","masonryEnabled":"","blogMasonryBreakPoint":"768"}
;var astraGetParents=function(e,t){Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),a=t.length;0<=--a&&t.item(a)!==this;);return-1<a});for(var a=[];e&&e!==document;e=e.parentNode)(!t||e.matches(t))&&a.push(e);return a},getParents=function(e,t){console.warn("getParents() function has been deprecated since version 2.5.0 or above of Astra Theme and will be removed in the future. Use astraGetParents() instead."),astraGetParents(e,t)},astraToggleClass=function(e,t){e.classList.contains(t)?e.classList.remove(t):e.classList.add(t)},toggleClass=function(e,t){console.warn("toggleClass() function has been deprecated since version 2.5.0 or above of Astra Theme and will be removed in the future. Use astraToggleClass() instead."),astraToggleClass(e,t)},astraTriggerEvent=(!function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),a}"function"!=typeof window.CustomEvent&&(e.prototype=window.Event.prototype,window.CustomEvent=e)}(),function(e,t){t=new CustomEvent(t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:{});e.dispatchEvent(t)});astraSmoothScroll=function(e,t){e.preventDefault(),window.scrollTo({top:t,left:0,behavior:"smooth"})},astScrollToTopHandler=function(e,t){var a=getComputedStyle(t).content,n=t.dataset.onDevices,a=a.replace(/[^0-9]/g,"");"both"==n||"desktop"==n&&"769"==a||"mobile"==n&&""==a?(n=window.pageYOffset||document.body.scrollTop,e&&e.length?n>e.offsetHeight+100?t.style.display="block":t.style.display="none":300<window.pageYOffset?t.style.display="block":t.style.display="none"):t.style.display="none"},function(){var r=document.querySelectorAll("#masthead .main-header-menu-toggle"),c=document.getElementById("masthead"),i={},d="",u=document.body,m="";function e(e){d=e.detail.type;var t=document.querySelectorAll(".menu-toggle");if("dropdown"===d&&(document.getElementById("ast-mobile-popup").classList.remove("active","show"),g("updateHeader")),"off-canvas"===d)for(var a=0;a<t.length;a++)void 0!==t[a]&&t[a].classList.contains("toggled")&&t[a].click();n(d)}function g(e){m=c.querySelector("#ast-mobile-header");if(null==m||"dropdown"!==m.dataset.type||"updateHeader"===e){(void 0!==e&&"updateHeader"!==e?e.closest(".ast-mobile-popup-inner"):document.querySelector("#ast-mobile-popup")).querySelectorAll(".menu-item-has-children").forEach(e=>{e.classList.remove("ast-submenu-expanded"),Array.from(e.querySelectorAll(".sub-menu")).forEach(e=>{e.hasAttribute("data-initial-display")||e.setAttribute("data-initial-display",window.getComputedStyle(e).display),"block"===e.getAttribute("data-initial-display")?e.style.display="block":e.style.display="none"})});var t=document.querySelectorAll(".menu-toggle");document.body.classList.remove("ast-main-header-nav-open","ast-popup-nav-open"),document.documentElement.classList.remove("ast-off-canvas-active");for(var a=0;a<t.length;a++)t[a].classList.remove("toggled"),t[a].style.display="flex"}}function n(e){var t=document.querySelectorAll("#ast-mobile-header .menu-toggle"),a=document.querySelectorAll("#ast-desktop-header .menu-toggle");if(void 0===e&&null!==c)if(m=c.querySelector("#ast-mobile-header"))e=m.dataset.type;else{var n=c.querySelector("#ast-desktop-header");if(!n)return;e=n.dataset.toggleType}if("off-canvas"===e){var n=document.getElementById("menu-toggle-close"),s=document.querySelector(".ast-mobile-popup-inner");if(null==s)return;popupLinks=s.getElementsByTagName("a");for(var o=0;o<t.length;o++)t[o].removeEventListener("click",astraNavMenuToggle,!1),t[o].addEventListener("click",popupTriggerClick,!1),t[o].trigger_type="mobile";for(o=0;o<a.length;o++)a[o].removeEventListener("click",astraNavMenuToggle,!1),a[o].addEventListener("click",popupTriggerClick,!1),a[o].trigger_type="desktop";n.addEventListener("click",function(e){document.getElementById("ast-mobile-popup").classList.remove("active","show"),g(this)}),document.addEventListener("keyup",function(e){27===e.keyCode&&(e.preventDefault(),document.getElementById("ast-mobile-popup").classList.remove("active","show"),g())}),document.addEventListener("click",function(e){e.target===document.querySelector(".ast-mobile-popup-drawer.active .ast-mobile-popup-overlay")&&(document.getElementById("ast-mobile-popup").classList.remove("active","show"),g())});for(let e=0,t=popupLinks.length;e<t;e++)null!==popupLinks[e].getAttribute("href")&&(popupLinks[e].getAttribute("href").startsWith("#")||-1!==popupLinks[e].getAttribute("href").search("#"))&&(!popupLinks[e].parentElement.classList.contains("menu-item-has-children")||popupLinks[e].parentElement.classList.contains("menu-item-has-children")&&document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-icon"))&&(popupLinks[e].addEventListener("click",p,!0),popupLinks[e].headerType="off-canvas");AstraToggleSetup()}else if("dropdown"===e){var r=document.querySelectorAll(".ast-mobile-header-content")||!1,s=document.querySelector(".ast-desktop-header-content")||!1;if(0<r.length)for(let e=0;e<r.length;e++){var l=r[e].getElementsByTagName("a");for(link=0,len=l.length;link<len;link++)null!==l[link].getAttribute("href")&&(l[link].getAttribute("href").startsWith("#")||-1!==l[link].getAttribute("href").search("#"))&&(!l[link].parentElement.classList.contains("menu-item-has-children")||l[link].parentElement.classList.contains("menu-item-has-children")&&document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-icon"))&&(l[link].addEventListener("click",p,!0),l[link].headerType="dropdown")}if(s){var i=s.getElementsByTagName("a");for(link=0,len=i.length;link<len;link++)i[link].addEventListener("click",p,!0),i[link].headerType="dropdown"}for(o=0;o<t.length;o++)t[o].removeEventListener("click",popupTriggerClick,!1),t[o].addEventListener("click",astraNavMenuToggle,!1),t[o].trigger_type="mobile";for(o=0;o<a.length;o++)a[o].removeEventListener("click",popupTriggerClick,!1),a[o].addEventListener("click",astraNavMenuToggle,!1),a[o].trigger_type="desktop";AstraToggleSetup()}v()}function p(e){switch(e.currentTarget.headerType){case"dropdown":for(var t=document.querySelectorAll(".menu-toggle.toggled"),a=0;a<t.length;a++)t[a].click();break;case"off-canvas":document.getElementById("menu-toggle-close").click()}}""!==(m=null!=c?c.querySelector("#ast-mobile-header"):m)&&null!==m&&(d=m.dataset.type),document.addEventListener("astMobileHeaderTypeChange",e,!1),popupTriggerClick=function(e){var e=e.currentTarget.trigger_type,t=document.getElementById("ast-mobile-popup"),a=document.getElementById("menu-toggle-close");a&&a.focus(),u.classList.contains("ast-popup-nav-open")||u.classList.add("ast-popup-nav-open"),u.classList.contains("ast-main-header-nav-open")||"mobile"===e||u.classList.add("ast-main-header-nav-open"),document.documentElement.classList.contains("ast-off-canvas-active")||document.documentElement.classList.add("ast-off-canvas-active"),"desktop"===e&&(t.querySelector(".ast-mobile-popup-content").style.display="none",t.querySelector(".ast-desktop-popup-content").style.display="block"),"mobile"===e&&(t.querySelector(".ast-desktop-popup-content").style.display="none",t.querySelector(".ast-mobile-popup-content").style.display="block"),this.style.display="none",t.classList.add("active","show")},window.addEventListener("load",function(){n()}),document.addEventListener("astLayoutWidthChanged",function(){n()}),document.addEventListener("astPartialContentRendered",function(){r=document.querySelectorAll(".main-header-menu-toggle"),u.classList.remove("ast-main-header-nav-open"),document.addEventListener("astMobileHeaderTypeChange",e,!1),n(),v()});var s=null!==navigator.userAgent.match(/Android/i)&&"Android"===navigator.userAgent.match(/Android/i)[0]?window.visualViewport.width:window.innerWidth;window.addEventListener("resize",function(){var e,t,a,n;"INPUT"!==document.activeElement.tagName&&(e=document.getElementById("menu-toggle-close"),t=document.querySelector(".menu-toggle.toggled"),a=document.querySelector("#masthead > #ast-desktop-header .ast-desktop-header-content"),n=document.querySelector(".elementor-editor-active"),a&&(a.style.display="none"),(null!==navigator.userAgent.match(/Android/i)&&"Android"===navigator.userAgent.match(/Android/i)[0]?window.visualViewport.width:window.innerWidth)!==s&&(t&&null===n&&t.click(),document.body.classList.remove("ast-main-header-nav-open","ast-popup-nav-open"),e)&&null==n&&e.click(),h(),AstraToggleSetup())}),document.addEventListener("DOMContentLoaded",function(){if(AstraToggleSetup(),null!==(e=u.classList.contains("ast-header-break-point")?document.getElementById("ast-mobile-header"):document.getElementById("ast-desktop-header"))){var e,t=e.querySelector(".navigation-accessibility");if(t&&e){var a=e.getElementsByTagName("button")[0];if(void 0===a){if(!0===(a=e.getElementsByTagName("a")[0]).classList.contains("astra-search-icon"))return;if(void 0===a)return}var n=t.getElementsByTagName("ul")[0];if(void 0===n)a.style.display="none";else{if(-1===n.className.indexOf("nav-menu")&&(n.className+=" nav-menu"),document.addEventListener("DOMContentLoaded",function(){var e;"off-canvas"===d&&(e=document.getElementById("menu-toggle-close"))&&(e.onclick=function(){-1!==t.className.indexOf("toggled")?(t.className=t.className.replace(" toggled",""),a.setAttribute("aria-expanded","false"),n.setAttribute("aria-expanded","false")):(t.className+=" toggled",a.setAttribute("aria-expanded","true"),n.setAttribute("aria-expanded","true"))})}),a.onclick=function(){-1!==t.className.indexOf("toggled")?(t.className=t.className.replace(" toggled",""),a.setAttribute("aria-expanded","false"),n.setAttribute("aria-expanded","false")):(t.className+=" toggled",a.setAttribute("aria-expanded","true"),n.setAttribute("aria-expanded","true"))},!astra.is_header_footer_builder_active){for(var s=n.getElementsByTagName("a"),o=n.getElementsByTagName("ul"),r=0,l=o.length;r<l;r++)o[r].parentNode.setAttribute("aria-haspopup","true");for(r=0,l=s.length;r<l;r++)s[r].addEventListener("focus",E,!0),s[r].addEventListener("blur",E,!0),s[r].addEventListener("click",L,!0)}astra.is_header_footer_builder_active&&!function(){let t=document.querySelectorAll("nav.site-navigation .menu-item-has-children > a .ast-header-navigation-arrow"),a=document.querySelectorAll("nav.site-navigation .sub-menu"),n=document.querySelectorAll("nav.site-navigation .menu-item-has-children"),s=document.querySelectorAll(".astra-full-megamenu-wrapper");t&&(t.forEach(e=>{e.addEventListener("keydown",function(a){"Enter"===a.key&&(a.target.closest("li").querySelector(".sub-menu").classList.contains("astra-megamenu")?setTimeout(()=>{var e=a.target.closest("li").querySelector(".sub-menu"),t=a.target.closest("li").querySelector(".astra-full-megamenu-wrapper");e&&e.classList.toggle("astra-megamenu-focus"),t&&t.classList.toggle("astra-megamenu-wrapper-focus"),a.target.closest("li").classList.toggle("ast-menu-hover"),"false"!==a.target.getAttribute("aria-expanded")&&a.target.getAttribute("aria-expanded")?a.target.setAttribute("aria-expanded","false"):a.target.setAttribute("aria-expanded","true")},10):setTimeout(()=>{a.target.closest("li").querySelector(".sub-menu").classList.toggle("toggled-on"),a.target.closest("li").classList.toggle("ast-menu-hover"),"false"!==a.target.getAttribute("aria-expanded")&&a.target.getAttribute("aria-expanded")?a.target.setAttribute("aria-expanded","false"):a.target.setAttribute("aria-expanded","true")},10))})}),(a||n)&&document.addEventListener("click",function(e){b(a,t,n,s)},!1),a||n)&&document.addEventListener("keydown",function(e){"Escape"===e.key&&b(a,t,n,s)},!1);var e=document.querySelectorAll("nav.site-navigation .ast-nav-menu > .menu-item-has-children > a .ast-header-navigation-arrow");e&&e.forEach(e=>{e.addEventListener("keydown",function(e){e.target.closest("li").classList.contains("ast-menu-hover")||"Enter"!==e.key||b(a,t,n,s)},!1)})}()}}}});for(var t,a,o,l,h=function(){var e=u.style.overflow,t=(u.style.overflow="hidden",document.documentElement.clientWidth);if(u.style.overflow=e,astra.break_point<t||0===t){if(0<r.length)for(var a=0;a<r.length;a++)null!==r[a]&&r[a].classList.remove("toggled");u.classList.remove("ast-header-break-point"),u.classList.add("ast-desktop"),astraTriggerEvent(u,"astra-header-responsive-enabled")}else u.classList.add("ast-header-break-point"),u.classList.remove("ast-desktop"),astraTriggerEvent(u,"astra-header-responsive-disabled")},v=function(){var e,a=document.querySelectorAll(".ast-account-action-login");if(a.length){let t=document.querySelector("#ast-hb-account-login-wrap");t&&(e=document.querySelector("#ast-hb-login-close"),a.forEach(function(e){e.addEventListener("click",function(e){e.preventDefault(),t.classList.add("show")})}),e)&&e.addEventListener("click",function(e){e.preventDefault(),t.classList.remove("show")})}},f=(h(),AstraToggleSubMenu=function(e){e.preventDefault(),"false"!==e.target.getAttribute("aria-expanded")&&e.target.getAttribute("aria-expanded")?e.target.setAttribute("aria-expanded","false"):e.target.setAttribute("aria-expanded","true");for(var t=this.parentNode,a=(t.classList.contains("ast-submenu-expanded")&&document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-link")&&(this.classList.contains("ast-menu-toggle")||""!==(e=t.querySelector("a").getAttribute("href"))&&"#"!==e&&(window.location=e)),t.querySelectorAll(".menu-item-has-children")),n=0;n<a.length;n++){a[n].classList.remove("ast-submenu-expanded");var s=a[n].querySelector(".sub-menu, .children");null!==s&&(s.style.display="none")}for(var o=t.parentNode.querySelectorAll(".menu-item-has-children"),n=0;n<o.length;n++)if(o[n]!=t){o[n].classList.remove("ast-submenu-expanded");for(var r=o[n].querySelectorAll(".sub-menu"),l=0;l<r.length;l++)r[l].style.display="none"}t.classList.contains("menu-item-has-children")&&(astraToggleClass(t,"ast-submenu-expanded"),t.classList.contains("ast-submenu-expanded")?t.querySelector(".sub-menu").style.display="block":t.querySelector(".sub-menu").style.display="none")},AstraToggleSetup=function(){if("undefined"!=typeof astraAddon&&"function"==typeof astraToggleSetupPro)astraToggleSetupPro(d,u,i);else{var e,t,a,n=!1;if(0<(e="off-canvas"===d||"full-width"===d?(t=document.querySelectorAll("#ast-mobile-popup, #ast-mobile-header"),(a=document.querySelectorAll("#ast-mobile-header .main-header-menu-toggle")).length):(t=document.querySelectorAll("#ast-mobile-header"),(n=!(0<(e=(a=document.querySelectorAll("#ast-mobile-header .main-header-menu-toggle")).length)))?1:e))||n)for(var s=0;s<e;s++)if(n||(a[s].setAttribute("data-index",s),i[s])||(i[s]=a[s],a[s].addEventListener("click",astraNavMenuToggle,!1)),void 0!==t[s])for(var o,r=0;r<t.length;r++)if(0<(o=document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-link")?t[r].querySelectorAll("ul.main-header-menu .menu-item-has-children > .menu-link, ul.main-header-menu .ast-menu-toggle"):t[r].querySelectorAll("ul.main-header-menu .ast-menu-toggle")).length)for(var l=0;l<o.length;l++)o[l].addEventListener("click",AstraToggleSubMenu,!1)}},astraNavMenuToggle=function(e){if("undefined"!=typeof astraAddon)astraNavMenuTogglePro(e,u,d,this);else{e.preventDefault();var e=document.querySelectorAll("#masthead > #ast-mobile-header .main-header-bar-navigation"),t=(r=document.querySelectorAll("#masthead > #ast-mobile-header .main-header-menu-toggle"),"0");if(null!==this.closest("#ast-fixed-header")&&(e=document.querySelectorAll("#ast-fixed-header > #ast-mobile-header .main-header-bar-navigation"),r=document.querySelectorAll("#ast-fixed-header .main-header-menu-toggle"),t="0"),void 0===e[t])return!1;for(var a=e[t].querySelectorAll(".menu-item-has-children"),n=0;n<a.length;n++){a[n].classList.remove("ast-submenu-expanded");for(var s=a[n].querySelectorAll(".sub-menu"),o=0;o<s.length;o++)s[o].style.display="none"}-1!==(this.getAttribute("class")||"").indexOf("main-header-menu-toggle")&&(astraToggleClass(e[t],"toggle-on"),astraToggleClass(r[t],"toggled"),e[t].classList.contains("toggle-on")?(e[t].style.display="block",u.classList.add("ast-main-header-nav-open")):(e[t].style.display="",u.classList.remove("ast-main-header-nav-open")))}},u.addEventListener("astra-header-responsive-enabled",function(){var e=document.querySelectorAll(".main-header-bar-navigation");if(0<e.length)for(var t=0;t<e.length;t++){null!=e[t]&&(e[t].classList.remove("toggle-on"),e[t].style.display="");for(var a=e[t].getElementsByClassName("sub-menu"),n=0;n<a.length;n++)a[n].style.display="";for(var s=e[t].getElementsByClassName("children"),o=0;o<s.length;o++)s[o].style.display="";for(var r=e[t].getElementsByClassName("ast-search-menu-icon"),l=0;l<r.length;l++)r[l].classList.remove("ast-dropdown-active"),r[l].style.display=""}},!1),k=navigator.userAgent,a=k.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[],/trident/i.test(a[1])?t=/\brv[ :]+(\d+)/g.exec(k)||[]:"Chrome"===a[1]&&null!=(t=k.match(/\bOPR|Edge\/(\d+)/))||(a=a[2]?[a[1],a[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(t=k.match(/version\/(\d+)/i))&&a.splice(1,1,t[1]),"Safari"===a[0]&&a[1]<11&&document.body.classList.add("ast-safari-browser-less-than-11")),document.getElementsByClassName("astra-search-icon")),y=0;y<f.length;y++)f[y].onclick=function(e){var t;this.classList.contains("slide-search")&&(e.preventDefault(),(t=this.parentNode.parentNode.parentNode.querySelector(".ast-search-menu-icon")).classList.contains("ast-dropdown-active")?(""!==(t.querySelector(".search-field").value||"")&&t.querySelector(".search-form").submit(),t.classList.remove("ast-dropdown-active")):(t.classList.add("ast-dropdown-active"),t.querySelector(".search-field").setAttribute("autocomplete","off"),setTimeout(function(){t.querySelector(".search-field").focus()},200)))};function b(e,t,a,n){e&&e.forEach(e=>{e.classList.remove("astra-megamenu-focus"),e.classList.remove("toggled-on")}),a&&a.forEach(e=>{e.classList.remove("ast-menu-hover")}),n&&n.forEach(e=>{e.classList.remove("astra-megamenu-wrapper-focus")}),t&&t.forEach(e=>{e.setAttribute("aria-expanded","false")})}function L(){var e=this||"";if(e&&!e.classList.contains("astra-search-icon")&&null===e.closest(".ast-builder-menu")&&-1!==new String(e).indexOf("#")){var t=e.parentNode;if(u.classList.contains("ast-header-break-point"))document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-link")&&t.classList.contains("menu-item-has-children")||(document.querySelector(".main-header-menu-toggle").classList.remove("toggled"),(t=document.querySelector(".main-header-bar-navigation")).classList.remove("toggle-on"),t.style.display="none",astraTriggerEvent(document.querySelector("body"),"astraMenuHashLinkClicked"));else for(;-1===e.className.indexOf("nav-menu");)"li"===e.tagName.toLowerCase()&&-1!==e.className.indexOf("focus")&&(e.className=e.className.replace(" focus","")),e=e.parentElement}}function E(){for(var e=this;-1===e.className.indexOf("navigation-accessibility");)"li"===e.tagName.toLowerCase()&&e.classList.toggle("focus"),e=e.parentElement}if(document.querySelectorAll(".search-field").forEach(e=>{e.addEventListener("focus",function(e){var t=this.parentNode.parentNode.parentNode.querySelector(".ast-search-menu-icon");t&&astraToggleClass(t,"ast-dropdown-active")}),e.addEventListener("blur",function(e){var t=this.parentNode.parentNode.parentNode.querySelector(".ast-search-menu-icon");t&&(t.classList.remove("ast-dropdown-active"),astraToggleClass(t,"ast-dropdown-active"))})}),u.onclick=function(e){if(void 0!==e.target.classList&&!e.target.classList.contains("ast-search-menu-icon")&&0===astraGetParents(e.target,".ast-search-menu-icon").length&&0===astraGetParents(e.target,".ast-search-icon").length)for(var t=document.getElementsByClassName("ast-search-menu-icon"),a=0;a<t.length;a++)t[a].classList.remove("ast-dropdown-active")},astra.is_header_footer_builder_active||"querySelector"in document&&"addEventListener"in window&&(u.addEventListener("mousedown",function(){u.classList.add("ast-mouse-clicked")}),u.addEventListener("keydown",function(){u.classList.remove("ast-mouse-clicked")})),astra.is_scroll_to_id){let t=[];var k=document.querySelectorAll('a[href*="#"]:not([href="#"]):not([href="#0"]):not([href*="uagb-tab"]):not(.uagb-toc-link__trigger):not(.skip-link):not(.nav-links a):not([href*="tab-"])');if(k)for(let e of k)e.href.split("#")[0]!==location.href.split("#")[0]?t.push({hash:e.hash,url:e.href.split("#")[0]}):""!==e.hash&&e.addEventListener("click",S);function S(e){let t=0;var a=document.querySelector(".site-header");a&&((a=a.querySelectorAll("div[data-stick-support]"))&&a.forEach(e=>{t+=e.clientHeight}),a=this.hash)&&(a=document.querySelector(a))&&(a=A(a)-t)&&astraSmoothScroll(e,a)}function A(e){let t=0;for(;e;)t+=e.offsetTop,e=e.offsetParent;return t}window.addEventListener("DOMContentLoaded",e=>{for(var a of t)if(window.location.href.split("#")[0]===a.url){var n=document.querySelector(".site-header");let t=0;n=n.querySelectorAll("div[data-stick-support]"),n=(n&&n.forEach(e=>{t+=e.clientHeight}),document.querySelector(a.hash));n&&(a=A(n)-t)&&astraSmoothScroll(e,a)}})}astra.is_scroll_to_top&&(o=document.querySelector("#page header"),l=document.getElementById("ast-scroll-top"),astScrollToTopHandler(o,l),window.addEventListener("scroll",function(){astScrollToTopHandler(o,l)}),l.onclick=function(e){astraSmoothScroll(e,0)},l.addEventListener("keydown",function(e){"Enter"===e.key&&astraSmoothScroll(e,0)})),window.addEventListener("DOMContentLoaded",e=>{document.querySelector(".woocommerce-store-notice__dismiss-link")?.addEventListener("click",()=>!wp?.customize&&document.body.classList.remove("ast-woocommerce-store-notice-hanged"))})}(),document.addEventListener("DOMContentLoaded",function(){function t(e){var e=e.closest(".menu-link"),t=e.nextElementSibling.classList.contains("toggled-on");e.setAttribute("aria-expanded",t?"true":"false")}document.querySelectorAll(".menu-link .dropdown-menu-toggle").forEach(function(e){e.addEventListener("focus",function(){t(this)}),e.addEventListener("blur",function(){t(this)}),e.addEventListener("keydown",function(e){var t;"Enter"===e.key&&(e=(e=this).closest(".menu-link"),t=e.getAttribute("aria-expanded"),e.setAttribute("aria-expanded","true"===t?"false":"true"))})}),document.addEventListener("keydown",function(e){"Escape"===e.key&&document.querySelectorAll(".menu-link .dropdown-menu-toggle").forEach(function(e){t(e)})})}),document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".astra-shop-thumbnail-wrap").forEach(t=>{let a=t.querySelectorAll("a, span");a.forEach(e=>{e.addEventListener("focus",()=>{t.querySelectorAll(".ast-on-card-button, .ast-quick-view-trigger").forEach(e=>{e.style.opacity="1",e.style.visibility="visible",e.style.borderStyle="none"})}),e.addEventListener("blur",()=>{Array.from(a).some(e=>e===document.activeElement)||t.querySelectorAll(".ast-on-card-button, .ast-quick-view-trigger").forEach(e=>{e.style.opacity="",e.style.visibility=""})})})})});
;/*!
 * imagesLoaded PACKAGED v4.1.4
 * JavaScript is all like "You images are done yet or what?"
 * MIT License
 */

!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();return 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});
;/*!
 * Bowser - a browser detector
 * https://github.com/ded/bowser
 * MIT License | (c) Dustin Diaz 2015
 */!function(name,definition){if(typeof module!='undefined'&&module.exports)module.exports=definition()
else if(typeof define=='function'&&define.amd)define(name,definition)
else this[name]=definition()}('bowser',function(){var t=!0
function detect(ua){function getFirstMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[1])||''}
function getSecondMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[2])||''}
var iosdevice=getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(),likeAndroid=/like android/i.test(ua),android=!likeAndroid&&/android/i.test(ua),nexusMobile=/nexus\s*[0-6]\s*/i.test(ua),nexusTablet=!nexusMobile&&/nexus\s*[0-9]+/i.test(ua),chromeos=/CrOS/.test(ua),silk=/silk/i.test(ua),sailfish=/sailfish/i.test(ua),tizen=/tizen/i.test(ua),webos=/(web|hpw)os/i.test(ua),windowsphone=/windows phone/i.test(ua),windows=!windowsphone&&/windows/i.test(ua),mac=!iosdevice&&!silk&&/macintosh/i.test(ua),linux=!android&&!sailfish&&!tizen&&!webos&&/linux/i.test(ua),edgeVersion=getFirstMatch(/edge\/(\d+(\.\d+)?)/i),versionIdentifier=getFirstMatch(/version\/(\d+(\.\d+)?)/i),tablet=/tablet/i.test(ua),mobile=!tablet&&/[^-]mobi/i.test(ua),xbox=/xbox/i.test(ua),result
if(/opera|opr|opios/i.test(ua)){result={name:'Opera',opera:t,version:versionIdentifier||getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}}else if(/coast/i.test(ua)){result={name:'Opera Coast',coast:t,version:versionIdentifier||getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}}else if(/yabrowser/i.test(ua)){result={name:'Yandex Browser',yandexbrowser:t,version:versionIdentifier||getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}}else if(/ucbrowser/i.test(ua)){result={name:'UC Browser',ucbrowser:t,version:getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/mxios/i.test(ua)){result={name:'Maxthon',maxthon:t,version:getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/epiphany/i.test(ua)){result={name:'Epiphany',epiphany:t,version:getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/puffin/i.test(ua)){result={name:'Puffin',puffin:t,version:getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}}else if(/sleipnir/i.test(ua)){result={name:'Sleipnir',sleipnir:t,version:getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/k-meleon/i.test(ua)){result={name:'K-Meleon',kMeleon:t,version:getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}}else if(windowsphone){result={name:'Windows Phone',windowsphone:t}
if(edgeVersion){result.msedge=t
result.version=edgeVersion}else{result.msie=t
result.version=getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)}}else if(/msie|trident/i.test(ua)){result={name:'Internet Explorer',msie:t,version:getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)}}else if(chromeos){result={name:'Chrome',chromeos:t,chromeBook:t,chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(/chrome.+? edge/i.test(ua)){result={name:'Microsoft Edge',msedge:t,version:edgeVersion}}else if(/vivaldi/i.test(ua)){result={name:'Vivaldi',vivaldi:t,version:getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(sailfish){result={name:'Sailfish',sailfish:t,version:getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}}else if(/seamonkey\//i.test(ua)){result={name:'SeaMonkey',seamonkey:t,version:getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)}}else if(/firefox|iceweasel|fxios/i.test(ua)){result={name:'Firefox',firefox:t,version:getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)}
if(/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)){result.firefoxos=t}}else if(silk){result={name:'Amazon Silk',silk:t,version:getFirstMatch(/silk\/(\d+(\.\d+)?)/i)}}else if(/phantom/i.test(ua)){result={name:'PhantomJS',phantom:t,version:getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)}}else if(/slimerjs/i.test(ua)){result={name:'SlimerJS',slimer:t,version:getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)}}else if(/blackberry|\bbb\d+/i.test(ua)||/rim\stablet/i.test(ua)){result={name:'BlackBerry',blackberry:t,version:versionIdentifier||getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}}else if(webos){result={name:'WebOS',webos:t,version:versionIdentifier||getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)};if(/touchpad\//i.test(ua)){result.touchpad=t}}else if(/bada/i.test(ua)){result={name:'Bada',bada:t,version:getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)}}else if(tizen){result={name:'Tizen',tizen:t,version:getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(/qupzilla/i.test(ua)){result={name:'QupZilla',qupzilla:t,version:getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||versionIdentifier}}else if(/chromium/i.test(ua)){result={name:'Chromium',chromium:t,version:getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||versionIdentifier}}else if(/chrome|crios|crmo/i.test(ua)){result={name:'Chrome',chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(android){result={name:'Android',version:versionIdentifier}}else if(/safari|applewebkit/i.test(ua)){result={name:'Safari',safari:t}
if(versionIdentifier){result.version=versionIdentifier}}else if(iosdevice){result={name:iosdevice=='iphone'?'iPhone':iosdevice=='ipad'?'iPad':'iPod'}
if(versionIdentifier){result.version=versionIdentifier}}else if(/googlebot/i.test(ua)){result={name:'Googlebot',googlebot:t,version:getFirstMatch(/googlebot\/(\d+(\.\d+))/i)||versionIdentifier}}else{result={name:getFirstMatch(/^(.*)\/(.*) /),version:getSecondMatch(/^(.*)\/(.*) /)}}
if(!result.msedge&&/(apple)?webkit/i.test(ua)){if(/(apple)?webkit\/537\.36/i.test(ua)){result.name=result.name||"Blink"
result.blink=t}else{result.name=result.name||"Webkit"
result.webkit=t}
if(!result.version&&versionIdentifier){result.version=versionIdentifier}}else if(!result.opera&&/gecko\//i.test(ua)){result.name=result.name||"Gecko"
result.gecko=t
result.version=result.version||getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)}
if(!result.msedge&&(android||result.silk)){result.android=t}else if(iosdevice){result[iosdevice]=t
result.ios=t}else if(mac){result.mac=t}else if(xbox){result.xbox=t}else if(windows){result.windows=t}else if(linux){result.linux=t}
var osVersion='';if(result.windowsphone){osVersion=getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i)}else if(iosdevice){osVersion=getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);osVersion=osVersion.replace(/[_\s]/g,'.')}else if(android){osVersion=getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i)}else if(result.webos){osVersion=getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i)}else if(result.blackberry){osVersion=getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i)}else if(result.bada){osVersion=getFirstMatch(/bada\/(\d+(\.\d+)*)/i)}else if(result.tizen){osVersion=getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i)}
if(osVersion){result.osversion=osVersion}
var osMajorVersion=osVersion.split('.')[0];if(tablet||nexusTablet||iosdevice=='ipad'||(android&&(osMajorVersion==3||(osMajorVersion>=4&&!mobile)))||result.silk){result.tablet=t}else if(mobile||iosdevice=='iphone'||iosdevice=='ipod'||android||nexusMobile||result.blackberry||result.webos||result.bada){result.mobile=t}
if(result.msedge||(result.msie&&result.version>=10)||(result.yandexbrowser&&result.version>=15)||(result.vivaldi&&result.version>=1.0)||(result.chrome&&result.version>=20)||(result.firefox&&result.version>=20.0)||(result.safari&&result.version>=6)||(result.opera&&result.version>=10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]>=6)||(result.blackberry&&result.version>=10.1)||(result.chromium&&result.version>=20)){result.a=t}else if((result.msie&&result.version<10)||(result.chrome&&result.version<20)||(result.firefox&&result.version<20.0)||(result.safari&&result.version<6)||(result.opera&&result.version<10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]<6)||(result.chromium&&result.version<20)){result.c=t}else result.x=t
return result}
var bowser=detect(typeof navigator!=='undefined'?navigator.userAgent:'')
bowser.test=function(browserList){for(var i=0;i<browserList.length;++i){var browserItem=browserList[i];if(typeof browserItem==='string'){if(browserItem in bowser){return!0}}}
return!1}
function getVersionPrecision(version){return version.split(".").length}
function map(arr,iterator){var result=[],i;if(Array.prototype.map){return Array.prototype.map.call(arr,iterator)}
for(i=0;i<arr.length;i++){result.push(iterator(arr[i]))}
return result}
function compareVersions(versions){var precision=Math.max(getVersionPrecision(versions[0]),getVersionPrecision(versions[1]));var chunks=map(versions,function(version){var delta=precision-getVersionPrecision(version);version=version+new Array(delta+1).join(".0");return map(version.split("."),function(chunk){return new Array(20-chunk.length).join("0")+chunk}).reverse()});while(--precision>=0){if(chunks[0][precision]>chunks[1][precision]){return 1}else if(chunks[0][precision]===chunks[1][precision]){if(precision===0){return 0}}else{return-1}}}
function isUnsupportedBrowser(minVersions,strictMode,ua){var _bowser=bowser;if(typeof strictMode==='string'){ua=strictMode;strictMode=void(0)}
if(strictMode===void(0)){strictMode=!1}
if(ua){_bowser=detect(ua)}
var version=""+_bowser.version;for(var browser in minVersions){if(minVersions.hasOwnProperty(browser)){if(_bowser[browser]){return compareVersions([version,minVersions[browser]])<0}}}
return strictMode}
function check(minVersions,strictMode,ua){return!isUnsupportedBrowser(minVersions,strictMode,ua)}
bowser.isUnsupportedBrowser=isUnsupportedBrowser;bowser.compareVersions=compareVersions;bowser.check=check;bowser._detect=detect;return bowser});(function($){UABBTrigger={triggerHook:function(hook,args){$('body').trigger('uabb-trigger.'+hook,args)},addHook:function(hook,callback){$('body').on('uabb-trigger.'+hook,callback)},removeHook:function(hook,callback){$('body').off('uabb-trigger.'+hook,callback)},}})(jQuery);jQuery(document).ready(function($){if(typeof bowser!=='undefined'&&bowser!==null){var uabb_browser=bowser.name,uabb_browser_v=bowser.version,uabb_browser_class=uabb_browser.replace(/\s+/g,'-').toLowerCase(),uabb_browser_v_class=uabb_browser_class+parseInt(uabb_browser_v);$('html').addClass(uabb_browser_class).addClass(uabb_browser_v_class)}
$('.uabb-row-separator').parents('html').css('overflow-x','hidden')});var wpAjaxUrl='https://jimsit.com.au/wp-admin/admin-ajax.php';var flBuilderUrl='https://jimsit.com.au/wp-content/plugins/bb-plugin/';var FLBuilderLayoutConfig={anchorLinkAnimations:{duration:1000,easing:'swing',offset:100},paths:{pluginUrl:'https://jimsit.com.au/wp-content/plugins/bb-plugin/',wpAjaxUrl:'https://jimsit.com.au/wp-admin/admin-ajax.php'},breakpoints:{small:768,medium:1125,large:1200},waypoint:{offset:80},emptyColWidth:'0%'};(function($){if(typeof FLBuilderLayout!='undefined'){return}
FLBuilderLayout={init:function(){FLBuilderLayout._destroy();FLBuilderLayout._initClasses();FLBuilderLayout._initBackgrounds();FLBuilderLayout._initRowShapeLayerHeight();if(0===$('.fl-builder-edit').length){FLBuilderLayout._initModuleAnimations();FLBuilderLayout._initAnchorLinks();FLBuilderLayout._initHash();FLBuilderLayout._initForms();FLBuilderLayout._reorderMenu()}else{FLBuilderLayout._initNestedColsWidth()}},refreshGalleries:function(element){var $element='undefined'==typeof element?$('body'):$(element),mfContent=$element.find('.fl-mosaicflow-content'),wmContent=$element.find('.fl-gallery'),mfObject=null;if(mfContent){mfObject=mfContent.data('mosaicflow');if(mfObject){mfObject.columns=$([]);mfObject.columnsHeights=[];mfContent.data('mosaicflow',mfObject);mfContent.mosaicflow('refill')}}
if(wmContent){wmContent.trigger('refreshWookmark')}},refreshGridLayout:function(element){var $element='undefined'==typeof element?$('body'):$(element),msnryContent=$element.find('.masonry');if(msnryContent.length){msnryContent.masonry('layout')}},reloadSlider:function(content){var $content='undefined'==typeof content?$('body'):$(content);if($content.find('.bx-viewport > div').length>0){$.each($content.find('.bx-viewport > div'),function(key,slider){setTimeout(function(){$(slider).data('bxSlider').reloadSlider()},100)})}},resizeAudio:function(element){var $element='undefined'==typeof element?$('body'):$(element),audioPlayers=$element.find('.wp-audio-shortcode.mejs-audio'),player=null,mejsPlayer=null,rail=null,railWidth=400;if(audioPlayers.length&&typeof mejs!=='undefined'){audioPlayers.each(function(){player=$(this);mejsPlayer=mejs.players[player.attr('id')];rail=player.find('.mejs-controls .mejs-time-rail');var innerMejs=player.find('.mejs-inner'),total=player.find('.mejs-controls .mejs-time-total');if(typeof mejsPlayer!=='undefined'){railWidth=Math.ceil(player.width()*0.8);if(innerMejs.length){rail.css('width',railWidth+'px!important');mejsPlayer.options.autosizeProgress=!0;setTimeout(function(){mejsPlayer.setControlsSize()},50);player.find('.mejs-inner').css({visibility:'visible',height:'inherit'})}}})}},preloadAudio:function(element){var $element='undefined'==typeof element?$('body'):$(element),contentWrap=$element.closest('.fl-accordion-item'),audioPlayers=$element.find('.wp-audio-shortcode.mejs-audio');if(!contentWrap.hasClass('fl-accordion-item-active')&&audioPlayers.find('.mejs-inner').length){audioPlayers.find('.mejs-inner').css({visibility:'hidden',height:0})}},resizeSlideshow:function(){if(typeof YUI!=='undefined'){YUI().use('node-event-simulate',function(Y){Y.one(window).simulate("resize")})}},reloadGoogleMap:function(element){var $element='undefined'==typeof element?$('body'):$(element),googleMap=$element.find('iframe[src*="google.com/maps"]');if(googleMap.length){googleMap.attr('src',function(i,val){return val})}},_destroy:function(){var win=$(window);win.off('scroll.fl-bg-parallax');win.off('resize.fl-bg-video')},_isTouch:function(){if(('ontouchstart'in window)||(window.DocumentTouch&&document instanceof DocumentTouch)){return!0}
return!1},_isMobile:function(){return/Mobile|Android|Silk\/|Kindle|BlackBerry|Opera Mini|Opera Mobi|webOS/i.test(navigator.userAgent)},_initClasses:function(){var body=$('body'),ua=navigator.userAgent;if(!body.hasClass('archive')&&$('.fl-builder-content-primary').length>0){body.addClass('fl-builder')}
if(FLBuilderLayout._isTouch()){body.addClass('fl-builder-touch')}
if(FLBuilderLayout._isMobile()){body.addClass('fl-builder-mobile')}
if($(window).width()<FLBuilderLayoutConfig.breakpoints.small){body.addClass('fl-builder-breakpoint-small')}
if($(window).width()>FLBuilderLayoutConfig.breakpoints.small&&$(window).width()<FLBuilderLayoutConfig.breakpoints.medium){body.addClass('fl-builder-breakpoint-medium')}
if($(window).width()>FLBuilderLayoutConfig.breakpoints.medium&&$(window).width()<FLBuilderLayoutConfig.breakpoints.large){body.addClass('fl-builder-breakpoint-large')}
if($(window).width()>FLBuilderLayoutConfig.breakpoints.large){body.addClass('fl-builder-breakpoint-default')}
if(ua.indexOf('Trident/7.0')>-1&&ua.indexOf('rv:11.0')>-1){body.addClass('fl-builder-ie-11')}},_initBackgrounds:function(){var win=$(window);if($('.fl-row-bg-parallax').length>0&&!FLBuilderLayout._isMobile()){FLBuilderLayout._scrollParallaxBackgrounds();FLBuilderLayout._initParallaxBackgrounds();win.on('resize.fl-bg-parallax',FLBuilderLayout._initParallaxBackgrounds);win.on('scroll.fl-bg-parallax',FLBuilderLayout._scrollParallaxBackgrounds)}
if($('.fl-bg-video').length>0){FLBuilderLayout._initBgVideos();FLBuilderLayout._resizeBgVideos();var resizeBGTimer=null;win.on('resize.fl-bg-video',function(e){clearTimeout(resizeBGTimer);resizeBGTimer=setTimeout(function(){FLBuilderLayout._resizeBgVideos(e)},100)})}},_initParallaxBackgrounds:function(){$('.fl-row-bg-parallax').each(FLBuilderLayout._initParallaxBackground)},_initParallaxBackground:function(){var row=$(this),content=row.find('> .fl-row-content-wrap'),winWidth=$(window).width(),screenSize='',imageSrc={default:'',medium:'',responsive:'',};imageSrc.default=row.data('parallax-image')||'';imageSrc.medium=row.data('parallax-image-medium')||imageSrc.default;imageSrc.responsive=row.data('parallax-image-responsive')||imageSrc.medium;if(winWidth>FLBuilderLayoutConfig.breakpoints.medium){screenSize='default'}else if(winWidth>FLBuilderLayoutConfig.breakpoints.small&&winWidth<=FLBuilderLayoutConfig.breakpoints.medium){screenSize='medium'}else if(winWidth<=FLBuilderLayoutConfig.breakpoints.small){screenSize='responsive'}
content.css('background-image','url('+imageSrc[screenSize]+')');row.data('current-image-loaded',screenSize)},_scrollParallaxBackgrounds:function(){$('.fl-row-bg-parallax').each(FLBuilderLayout._scrollParallaxBackground)},_scrollParallaxBackground:function(){var win=$(window),row=$(this),content=row.find('> .fl-row-content-wrap'),speed=row.data('parallax-speed'),offset=content.offset(),yPos=-((win.scrollTop()-offset.top)/speed),initialOffset=(row.data('parallax-offset')!=null)?row.data('parallax-offset'):0,totalOffset=yPos-initialOffset;content.css('background-position','center '+totalOffset+'px')},_initBgVideos:function(){$('.fl-bg-video').each(FLBuilderLayout._initBgVideo)},_initBgVideo:function(){var wrap=$(this),width=wrap.data('width'),height=wrap.data('height'),mp4=wrap.data('mp4'),youtube=wrap.data('youtube'),vimeo=wrap.data('vimeo'),mp4Type=wrap.data('mp4-type'),webm=wrap.data('webm'),webmType=wrap.data('webm-type'),fallback=wrap.data('fallback'),loaded=wrap.data('loaded'),videoMobile=wrap.data('video-mobile'),fallbackTag='',videoTag=null,mp4Tag=null,webmTag=null;if(loaded){return}
videoTag=$('<video autoplay loop muted playsinline></video>');if('undefined'!=typeof fallback&&''!=fallback){videoTag.attr('poster','data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7')
videoTag.css({backgroundImage:'url("'+fallback+'")',backgroundColor:'transparent',backgroundRepeat:'no-repeat',backgroundSize:'cover',backgroundPosition:'center center',})}
if('undefined'!=typeof mp4&&''!=mp4){mp4Tag=$('<source />');mp4Tag.attr('src',mp4);mp4Tag.attr('type',mp4Type);videoTag.append(mp4Tag)}
if('undefined'!=typeof webm&&''!=webm){webmTag=$('<source />');webmTag.attr('src',webm);webmTag.attr('type',webmType);videoTag.append(webmTag)}
if(!FLBuilderLayout._isMobile()||(FLBuilderLayout._isMobile()&&"yes"==videoMobile)){if('undefined'!=typeof youtube){FLBuilderLayout._initYoutubeBgVideo.apply(this)}else if('undefined'!=typeof vimeo){FLBuilderLayout._initVimeoBgVideo.apply(this)}else{wrap.append(videoTag)}}else{videoTag.attr('src','')
wrap.append(videoTag)}
wrap.data('loaded',!0)},_initYoutubeBgVideo:function(){var playerWrap=$(this),videoId=playerWrap.data('video-id'),videoPlayer=playerWrap.find('.fl-bg-video-player'),enableAudio=playerWrap.data('enable-audio'),audioButton=playerWrap.find('.fl-bg-video-audio'),startTime='undefined'!==typeof playerWrap.data('start')?playerWrap.data('start'):0,startTime='undefined'!==typeof playerWrap.data('t')&&startTime===0?playerWrap.data('t'):startTime,endTime='undefined'!==typeof playerWrap.data('end')?playerWrap.data('end'):0,loop='undefined'!==typeof playerWrap.data('loop')?playerWrap.data('loop'):1,stateCount=0,player,fallback_showing;if(videoId){fallback=playerWrap.data('fallback')||!1
if(fallback){playerWrap.find('iframe').remove()
fallbackTag=$('<div></div>');fallbackTag.addClass('fl-bg-video-fallback');fallbackTag.css('background-image','url('+playerWrap.data('fallback')+')');fallbackTag.css('background-size','cover');fallbackTag.css('transition','background-image 1s')
playerWrap.append(fallbackTag);fallback_showing=!0}
FLBuilderLayout._onYoutubeApiReady(function(YT){setTimeout(function(){player=new YT.Player(videoPlayer[0],{videoId:videoId,events:{onReady:function(event){if("no"===enableAudio||FLBuilderLayout._isMobile()){event.target.mute()}else if("yes"===enableAudio&&event.target.isMuted){event.target.unMute()}
playerWrap.data('YTPlayer',player);FLBuilderLayout._resizeYoutubeBgVideo.apply(playerWrap);event.target.playVideo();if(audioButton.length>0&&!FLBuilderLayout._isMobile()){audioButton.on('click',{button:audioButton,player:player},FLBuilderLayout._toggleBgVideoAudio)}},onStateChange:function(event){if(event.data===1){if(fallback_showing){$('.fl-bg-video-fallback').css('background-image','url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)')}}
if(stateCount<4){stateCount++}
if(stateCount>1&&(-1===event.data||2===event.data)&&"yes"===enableAudio){player.mute();player.playVideo();audioButton.show()}
if(event.data===YT.PlayerState.ENDED&&1===loop){if(startTime>0){player.seekTo(startTime)}else{player.playVideo()}}},onError:function(event){console.info('YT Error: '+event.data)
FLBuilderLayout._onErrorYoutubeVimeo(playerWrap)}},playerVars:{playsinline:FLBuilderLayout._isMobile()?1:0,controls:0,showinfo:0,rel:0,start:startTime,end:endTime,}})},1)})}},_onErrorYoutubeVimeo:function(playerWrap){fallback=playerWrap.data('fallback')||!1
if(!fallback){return!1}
playerWrap.find('iframe').remove()
fallbackTag=$('<div></div>');fallbackTag.addClass('fl-bg-video-fallback');fallbackTag.css('background-image','url('+playerWrap.data('fallback')+')');playerWrap.append(fallbackTag)},_onYoutubeApiReady:function(callback){if(window.YT&&YT.loaded){callback(YT)}else{setTimeout(function(){FLBuilderLayout._onYoutubeApiReady(callback)},350)}},_initVimeoBgVideo:function(){var playerWrap=$(this),videoId=playerWrap.data('video-id'),videoPlayer=playerWrap.find('.fl-bg-video-player'),enableAudio=playerWrap.data('enable-audio'),audioButton=playerWrap.find('.fl-bg-video-audio'),player,width=playerWrap.outerWidth(),ua=navigator.userAgent;if(typeof Vimeo!=='undefined'&&videoId){player=new Vimeo.Player(videoPlayer[0],{id:videoId,loop:!0,title:!1,portrait:!1,background:!0,autopause:!1,muted:!0});playerWrap.data('VMPlayer',player);if("no"===enableAudio){player.setVolume(0)}else if("yes"===enableAudio){if(ua.indexOf("Safari")>-1||ua.indexOf("Chrome")>-1||ua.indexOf("Firefox")>-1){player.setVolume(0);audioButton.show()}else{player.setVolume(1)}}
player.play().catch(function(error){FLBuilderLayout._onErrorYoutubeVimeo(playerWrap)});if(audioButton.length>0){audioButton.on('click',{button:audioButton,player:player},FLBuilderLayout._toggleBgVideoAudio)}}},_toggleBgVideoAudio:function(e){var player=e.data.player,control=e.data.button.find('.fl-audio-control');if(control.hasClass('fa-volume-off')){control.removeClass('fa-volume-off').addClass('fa-volume-up');e.data.button.find('.fa-times').hide();if('function'===typeof player.unMute){player.unMute()}else{player.setVolume(1)}}else{control.removeClass('fa-volume-up').addClass('fa-volume-off');e.data.button.find('.fa-times').show();if('function'===typeof player.unMute){player.mute()}else{player.setVolume(0)}}},_videoBgSourceError:function(e){var source=$(e.target),wrap=source.closest('.fl-bg-video'),vid=wrap.find('video'),fallback=wrap.data('fallback'),fallbackTag='';source.remove();if(vid.find('source').length){return}else if(''!==fallback){fallbackTag=$('<div></div>');fallbackTag.addClass('fl-bg-video-fallback');fallbackTag.css('background-image','url('+fallback+')');wrap.append(fallbackTag);vid.remove()}},_resizeBgVideos:function(){$('.fl-bg-video').each(function(){FLBuilderLayout._resizeBgVideo.apply(this);if($(this).parent().find('img').length>0){$(this).parent().imagesLoaded($.proxy(FLBuilderLayout._resizeBgVideo,this))}})},_resizeBgVideo:function(){if(0===$(this).find('video').length&&0===$(this).find('iframe').length){return}
var wrap=$(this),wrapHeight=wrap.outerHeight(),wrapWidth=wrap.outerWidth(),vid=wrap.find('video'),vidHeight=wrap.data('height'),vidWidth=wrap.data('width'),newWidth=wrapWidth,newHeight=Math.round(vidHeight*wrapWidth/vidWidth),newLeft=0,newTop=0,iframe=wrap.find('iframe'),isRowFullHeight=$(this).closest('.fl-row-bg-video').hasClass('fl-row-full-height'),vidCSS={top:'50%',left:'50%',transform:'translate(-50%,-50%)',};if(vid.length){if(vidHeight===''||typeof vidHeight==='undefined'||vidWidth===''||typeof vidWidth==='undefined'){vid.css({'left':'0px','top':'0px','width':newWidth+'px'});vid.on('loadedmetadata',FLBuilderLayout._resizeOnLoadedMeta);return}
if(!isRowFullHeight){if(newHeight<wrapHeight){newHeight=wrapHeight;newLeft=-((newWidth-wrapWidth)/2);newWidth=vidHeight?Math.round(vidWidth*wrapHeight/vidHeight):newWidth}else{newTop=-((newHeight-wrapHeight)/2)}
vidCSS={left:newLeft+'px',top:newTop+'px',height:newHeight+'px',width:newWidth+'px',}}
vid.css(vidCSS)}else if(iframe.length){if(typeof wrap.data('youtube')!=='undefined'){FLBuilderLayout._resizeYoutubeBgVideo.apply(this)}}},_resizeOnLoadedMeta:function(){var video=$(this),wrapHeight=video.parent().outerHeight(),wrapWidth=video.parent().outerWidth(),vidWidth=video[0].videoWidth,vidHeight=video[0].videoHeight,newHeight=Math.round(vidHeight*wrapWidth/vidWidth),newWidth=wrapWidth,newLeft=0,newTop=0;if(newHeight<wrapHeight){newHeight=wrapHeight;newWidth=Math.round(vidWidth*wrapHeight/vidHeight);newLeft=-((newWidth-wrapWidth)/2)}else{newTop=-((newHeight-wrapHeight)/2)}
video.parent().data('width',vidWidth);video.parent().data('height',vidHeight);video.css({'left':newLeft+'px','top':newTop+'px','width':newWidth+'px','height':newHeight+'px'})},_resizeYoutubeBgVideo:function(){var wrap=$(this),wrapWidth=wrap.outerWidth(),wrapHeight=wrap.outerHeight(),player=wrap.data('YTPlayer'),video=player?player.getIframe():null,aspectRatioSetting='16:9',aspectRatioArray=aspectRatioSetting.split(':'),aspectRatio=aspectRatioArray[0]/aspectRatioArray[1],ratioWidth=wrapWidth/aspectRatio,ratioHeight=wrapHeight*aspectRatio,isWidthFixed=wrapWidth/wrapHeight>aspectRatio,width=isWidthFixed?wrapWidth:ratioHeight,height=isWidthFixed?ratioWidth:wrapHeight;if(video){$(video).width(width).height(height)}},_initModuleAnimations:function(){if(typeof jQuery.fn.waypoint!=='undefined'){$('.fl-animation').each(function(){var node=$(this),nodeTop=node.offset().top,winHeight=$(window).height(),bodyHeight=$('body').height(),waypoint=FLBuilderLayoutConfig.waypoint,offset='80%';if(typeof waypoint.offset!==undefined){offset=FLBuilderLayoutConfig.waypoint.offset+'%'}
if(bodyHeight-nodeTop<winHeight*0.2){offset='100%'}
node.waypoint({offset:offset,handler:FLBuilderLayout._doModuleAnimation})})}},_doModuleAnimation:function(){var module='undefined'==typeof this.element?$(this):$(this.element),delay=parseFloat(module.data('animation-delay')),duration=parseFloat(module.data('animation-duration'));if(!isNaN(duration)){module.css('animation-duration',duration+'s')}
if(!isNaN(delay)&&delay>0){setTimeout(function(){module.addClass('fl-animated')},delay*1000)}else{setTimeout(function(){module.addClass('fl-animated')},1)}},_initHash:function(){var hash=window.location.hash.replace('#','').split('/').shift(),element=null,tabs=null,responsiveLabel=null,tabIndex=null,label=null;if(''!==hash){try{element=$('#'+hash);if(element.length>0){if(element.hasClass('fl-accordion-item')){setTimeout(function(){element.find('.fl-accordion-button').trigger('click')},100)}
if(element.hasClass('fl-tabs-panel')){setTimeout(function(){tabs=element.closest('.fl-tabs');responsiveLabel=element.find('.fl-tabs-panel-label');tabIndex=responsiveLabel.data('index');label=tabs.find('.fl-tabs-labels .fl-tabs-label[data-index='+tabIndex+']');label[0].click();FLBuilderLayout._scrollToElement(element)},100)}}}catch(e){}}},_initAnchorLinks:function(){$('a').each(FLBuilderLayout._initAnchorLink)},_initAnchorLink:function(){var link=$(this),href=link.attr('href'),loc=window.location,id=null,element=null,flNode=!1;if('undefined'!=typeof href&&href.indexOf('#')>-1&&link.closest('svg').length<1){if(loc.pathname.replace(/^\//,'')==this.pathname.replace(/^\//,'')&&loc.hostname==this.hostname){try{id=href.split('#').pop();if(!id){return}
element=$('#'+id);if(element.length>0){flNode=element.hasClass('fl-row')||element.hasClass('fl-col')||element.hasClass('fl-module');if(!element.hasClass('fl-no-scroll')&&(link.hasClass('fl-scroll-link')||flNode)){$(link).on('click',FLBuilderLayout._scrollToElementOnLinkClick)}
if(element.hasClass('fl-accordion-item')){$(link).on('click',FLBuilderLayout._scrollToAccordionOnLinkClick)}
if(element.hasClass('fl-tabs-panel')){$(link).on('click',FLBuilderLayout._scrollToTabOnLinkClick)}}}catch(e){}}}},_scrollToElementOnLinkClick:function(e,callback){var element=$('#'+$(this).attr('href').split('#').pop());FLBuilderLayout._scrollToElement(element,callback);e.preventDefault()},_scrollToElement:function(element,callback){var config=FLBuilderLayoutConfig.anchorLinkAnimations,dest=0,win=$(window),doc=$(document);if(element.length>0){if('fixed'===element.css('position')||'fixed'===element.parent().css('position')){dest=element.position().top}else if(element.offset().top>doc.height()-win.height()){dest=doc.height()-win.height()}else{dest=element.offset().top-config.offset}
$('html, body').animate({scrollTop:dest},config.duration,config.easing,function(){if('undefined'!=typeof callback){callback()}
if(undefined!=element.attr('id')){if(history.pushState){history.pushState(null,null,'#'+element.attr('id'))}else{window.location.hash=element.attr('id')}}})}},_scrollToAccordionOnLinkClick:function(e){var element=$('#'+$(this).attr('href').split('#').pop());if(element.length>0){var callback=function(){if(element){element.find('.fl-accordion-button').trigger('click');element=!1}};FLBuilderLayout._scrollToElementOnLinkClick.call(this,e,callback)}},_scrollToTabOnLinkClick:function(e){var element=$('#'+$(this).attr('href').split('#').pop()),tabs=null,label=null,responsiveLabel=null;if(element.length>0){tabs=element.closest('.fl-tabs');responsiveLabel=element.find('.fl-tabs-panel-label');tabIndex=responsiveLabel.data('index');label=tabs.find('.fl-tabs-labels .fl-tabs-label[data-index='+tabIndex+']');if(responsiveLabel.is(':visible')){var callback=function(){if(element){responsiveLabel.trigger($.Event('click',{which:1}))}};FLBuilderLayout._scrollToElementOnLinkClick.call(this,e,callback)}else{label[0].click();FLBuilderLayout._scrollToElement(element)}
e.preventDefault()}},_initForms:function(){if(!FLBuilderLayout._hasPlaceholderSupport){$('.fl-form-field input').each(FLBuilderLayout._initFormFieldPlaceholderFallback)}
$('.fl-form-field input').on('focus',FLBuilderLayout._clearFormFieldError)},_hasPlaceholderSupport:function(){var input=document.createElement('input');return'undefined'!=input.placeholder},_initFormFieldPlaceholderFallback:function(){var field=$(this),val=field.val(),placeholder=field.attr('placeholder');if('undefined'!=placeholder&&''===val){field.val(placeholder);field.on('focus',FLBuilderLayout._hideFormFieldPlaceholderFallback);field.on('blur',FLBuilderLayout._showFormFieldPlaceholderFallback)}},_hideFormFieldPlaceholderFallback:function(){var field=$(this),val=field.val(),placeholder=field.attr('placeholder');if(val==placeholder){field.val('')}},_showFormFieldPlaceholderFallback:function(){var field=$(this),val=field.val(),placeholder=field.attr('placeholder');if(''===val){field.val(placeholder)}},_clearFormFieldError:function(){var field=$(this);field.removeClass('fl-form-error');field.siblings('.fl-form-error-message').hide()},_initRowShapeLayerHeight:function(){FLBuilderLayout._adjustRowShapeLayerHeight();$(window).on('resize',FLBuilderLayout._adjustRowShapeLayerHeight)},_initNestedColsWidth:function(){var nestedCols=$('.fl-col-has-cols');if(nestedCols.length<=0){return}
$(nestedCols).each(function(index,col){if($(col).width()<=0){$(col).css('width',FLBuilderLayoutConfig.emptyColWidth)}})},_adjustRowShapeLayerHeight:function(){var rowShapeLayers=$('.fl-builder-shape-layer');$(rowShapeLayers).each(function(index){var rowShapeLayer=$(this),shape=$(rowShapeLayer).find('svg'),height=shape.height(),excludeShapes='.fl-builder-shape-circle, .fl-builder-shape-dot-cluster, .fl-builder-shape-topography, .fl-builder-shape-rect';if(!rowShapeLayer.is(excludeShapes)){$(shape).css('height',Math.ceil(height))}})},_string_to_slug:function(str){str=str.replace(/^\s+|\s+$/g,'');if('undefined'==typeof window._fl_string_to_slug_regex){regex=new RegExp('[^a-zA-Z0-9\'":() !.,-_|]','g')}else{regex=new RegExp('[^'+window._fl_string_to_slug_regex+'\'":\(\) !.,-_|\\\p{Letter}]','ug')}
str=str.replace(regex,'').replace(/\s+/g,' ');return str},_reorderMenu:function(){if($('#wp-admin-bar-fl-builder-frontend-edit-link-default li').length>1){$('#wp-admin-bar-fl-builder-frontend-duplicate-link').appendTo('#wp-admin-bar-fl-builder-frontend-edit-link-default').css('padding-top','5px').css('border-top','2px solid #1D2125').css('margin-top','5px')}}};$(function(){FLBuilderLayout.init()})})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-0qfwgsomdeap .pp-heading-separator, .fl-node-0qfwgsomdeap .pp-heading').removeClass('pp-center');$('.fl-node-0qfwgsomdeap .pp-heading-separator, .fl-node-0qfwgsomdeap .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-0qfwgsomdeap .pp-heading-separator, .fl-node-0qfwgsomdeap .pp-heading').removeClass('pp-center');$('.fl-node-0qfwgsomdeap .pp-heading-separator, .fl-node-0qfwgsomdeap .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-t4gd865nhr3l .pp-heading-separator, .fl-node-t4gd865nhr3l .pp-heading').removeClass('pp-center');$('.fl-node-t4gd865nhr3l .pp-heading-separator, .fl-node-t4gd865nhr3l .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-t4gd865nhr3l .pp-heading-separator, .fl-node-t4gd865nhr3l .pp-heading').removeClass('pp-center');$('.fl-node-t4gd865nhr3l .pp-heading-separator, .fl-node-t4gd865nhr3l .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-yc8iopk0tvnu .pp-heading-separator, .fl-node-yc8iopk0tvnu .pp-heading').removeClass('pp-center');$('.fl-node-yc8iopk0tvnu .pp-heading-separator, .fl-node-yc8iopk0tvnu .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-yc8iopk0tvnu .pp-heading-separator, .fl-node-yc8iopk0tvnu .pp-heading').removeClass('pp-center');$('.fl-node-yc8iopk0tvnu .pp-heading-separator, .fl-node-yc8iopk0tvnu .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){$(function(){$('.fl-map').on('click',function(){$(this).find('iframe').css('pointer-events','auto')})})})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-ya0gw4cfrut9 .pp-heading-separator, .fl-node-ya0gw4cfrut9 .pp-heading').removeClass('pp-center');$('.fl-node-ya0gw4cfrut9 .pp-heading-separator, .fl-node-ya0gw4cfrut9 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-ya0gw4cfrut9 .pp-heading-separator, .fl-node-ya0gw4cfrut9 .pp-heading').removeClass('pp-center');$('.fl-node-ya0gw4cfrut9 .pp-heading-separator, .fl-node-ya0gw4cfrut9 .pp-heading').addClass('pp-mobile-')}})(jQuery);jQuery(function($){$(function(){$('.fl-node-xbuzat7ngiyv .fl-photo-img').on('mouseenter',function(e){$(this).data('title',$(this).attr('title')).removeAttr('title')}).on('mouseleave',function(e){$(this).attr('title',$(this).data('title')).data('title',null)})});window._fl_string_to_slug_regex='a-zA-Z0-9'});(function($){UABBFAQModule=function(settings){this.settings=settings;this.node=settings.id;this.nodeClass='.fl-node-'+settings.id;this.close_icon=settings.close_icon;this.open_icon=settings.open_icon;this._init()};UABBFAQModule.prototype={settings:{},node:'',nodeClass:'',close_icon:'fa fa-plus',open_icon:'fa fa-minus',_init:function(){window.scroll=this.settings.scroll;var button_level=$(this.nodeClass).find('.uabb-faq-questions').first().closest('.uabb-faq-module');button_level.children('.uabb-faq-item').children('.uabb-faq-questions').on('click keypress',$.proxy(this._buttonClick,this));this._enableFirst()},_buttonClick:function(e){e.preventDefault();var open_icon=this.open_icon,close_icon=this.close_icon,button=$(e.target).closest('.uabb-faq-questions'),accordion=button.closest('.uabb-faq-module'),item=button.closest('.uabb-faq-item'),allContent=accordion.find('.uabb-faq-content'),allIcons=accordion.find('.uabb-faq-questions-button i.uabb-faq-button-icon'),content=button.siblings('.uabb-faq-content'),icon=button.find('i.uabb-faq-button-icon');icon_animation='none';if(accordion.hasClass('uabb-faq-collapse')){accordion.find('.uabb-faq-item-active').removeClass('uabb-faq-item-active');allContent.slideUp('normal');accordion.find('.uabb-faq-questions-button').attr('aria-expanded','false');accordion.find('.uabb-faq-content').attr('aria-hidden','true');if('none'===icon_animation){allIcons.removeClass(open_icon);allIcons.addClass(close_icon)}}
if(content.is(':hidden')){button.attr('aria-expanded','true');item.find('.uabb-faq-content').attr('aria-hidden','false');item.addClass('uabb-faq-item-active');content.slideDown('normal',this._slideDownComplete);if('none'===icon_animation){icon.removeClass(close_icon);icon.addClass(open_icon)}}else{button.attr('aria-expanded','false');item.find('.uabb-faq-content').attr('aria-hidden','true');item.removeClass('uabb-faq-item-active');content.slideUp('normal',this._slideUpComplete);if('none'===icon_animation){icon.removeClass(open_icon);icon.addClass(close_icon)}}},_focusIn:function(e){if(undefined!==e.target){var button=$(e.target).closest('.uabb-faq-questions-button');if(undefined!==button){button.attr('aria-selected','true')}}},_focusOut:function(e){if(undefined!==e.target){var button=$(e.target).closest('.uabb-faq-questions-button');if(undefined!==button){button.attr('aria-selected','false')}}},_slideUpComplete:function(){var content=$(this),accordion=content.closest('.uabb-faq-module');accordion.trigger('fl-builder.uabb-faq-complete')},_slideDownComplete:function(){var content=$(this),accordion=content.closest('.uabb-faq-module'),item=content.parent(),win=$(window);if(!accordion.hasClass('uabb-faq-edit')){if(item.offset().top<win.scrollTop()+100){if(window.scroll){$('html, body').animate({scrollTop:item.offset().top-100},500,'swing')}}}},_enableFirst:function(){if('undefined'!==typeof this.settings.enable_first){var firstitem=this.settings.enable_first;if('yes'===firstitem){$(this.nodeClass+' .uabb-faq-questions-button').eq(0).trigger('click')}}}}})(jQuery);jQuery(document).ready(function(){new UABBFAQModule({id:'zknfcm1068p3',scroll:'1',close_icon:'fas fa-plus',open_icon:'fas fa-minus',enable_first:'yes'});var pattern=new RegExp('^[\\w\\-]+$');var hashval=window.location.hash.substring(1);if(pattern.test(hashval)){var hashval_last_index=hashval.lastIndexOf('-');var tab_id=hashval.slice(0,hashval_last_index);var dataindex=hashval.slice(hashval_last_index+1,hashval.length);if(tab_id!==''){var tab_id="#"+tab_id;if(jQuery(tab_id).length>0){if(jQuery(tab_id).find('.uabb-faq__layout-accordion > .uabb-faq-item[data-index="'+dataindex+'"]')){jQuery('html, body').animate({scrollTop:jQuery(tab_id).offset().top-250},1000);var enable_first='yes';if(!(parseInt(dataindex)===0&&enable_first==='yes')){setTimeout(function(){jQuery(tab_id+' .uabb-faq-questions-button').eq(dataindex).trigger('click')},1000)}}}}}});(function($){FLBuilderPostGrid=function(settings){this.settings=settings;this.nodeClass='.fl-node-'+settings.id;this.matchHeight=settings.matchHeight;if('columns'==this.settings.layout){this.wrapperClass=this.nodeClass+' .fl-post-grid';this.postClass=this.nodeClass+' .fl-post-column'}else{this.wrapperClass=this.nodeClass+' .fl-post-'+this.settings.layout;this.postClass=this.wrapperClass+'-post'}
if(this._hasPosts()){this._initLayout();this._initInfiniteScroll()}};FLBuilderPostGrid.prototype={settings:{},nodeClass:'',wrapperClass:'',postClass:'',gallery:null,currPage:1,totalPages:1,_hasPosts:function(){return $(this.postClass).length>0},_initLayout:function(){switch(this.settings.layout){case'columns':this._columnsLayout();break;case'grid':this._gridLayout();break;case'gallery':this._galleryLayout();break}
$(this.postClass).css('visibility','visible');FLBuilderLayout._scrollToElement($(this.nodeClass+' .fl-paged-scroll-to'))},_columnsLayout:function(){$(this.wrapperClass).imagesLoaded($.proxy(function(){this._gridLayoutMatchHeight()},this));$(window).on('resize',$.proxy(function(){$(this.wrapperClass).imagesLoaded($.proxy(function(){this._gridLayoutMatchHeight()},this))},this))},_gridLayout:function(){var wrap=$(this.wrapperClass);wrap.masonry({columnWidth:this.nodeClass+' .fl-post-grid-sizer',gutter:parseInt(this.settings.postSpacing),isFitWidth:!0,itemSelector:this.postClass,transitionDuration:0,isRTL:this.settings.isRTL});wrap.imagesLoaded($.proxy(function(){this._gridLayoutMatchHeight();wrap.masonry()},this));$(window).scroll($.debounce(25,function(){wrap.masonry()}))},_gridLayoutMatchHeight:function(){var highestBox=0;if(!this._isMatchHeight()){$(this.nodeClass+' .fl-post-grid-post').css('height','');return}
$(this.nodeClass+' .fl-post-grid-post').css('height','').each(function(){if($(this).height()>highestBox){highestBox=$(this).height()}});$(this.nodeClass+' .fl-post-grid-post').height(highestBox)},_isMatchHeight:function(){var width=$(window).width(),breakpoints=FLBuilderLayoutConfig.breakpoints,matchLarge=''!=this.matchHeight.large?this.matchHeight.large:this.matchHeight.default,matchMedium=''!=this.matchHeight.medium?this.matchHeight.medium:this.matchHeight.default,matchSmall=''!=this.matchHeight.responsive?this.matchHeight.responsive:this.matchHeight.default;return(width>breakpoints.medium&&1==this.matchHeight.default)||(width>breakpoints.medium&&width<=breakpoints.large&&1==matchLarge)||(width>breakpoints.small&&width<=breakpoints.medium&&1==matchMedium)||(width<=breakpoints.small&&1==matchSmall)},_galleryLayout:function(){this.gallery=new FLBuilderGalleryGrid({'wrapSelector':this.wrapperClass,'itemSelector':'.fl-post-gallery-post','isRTL':this.settings.isRTL})},_initInfiniteScroll:function(){var isScroll='scroll'==this.settings.pagination||'load_more'==this.settings.pagination,pages=$(this.nodeClass+' .fl-builder-pagination').find('li .page-numbers:not(.next)');if(pages.length>1){total=pages.last().text().replace(/\D/g,'')
this.totalPages=parseInt(total)}
if(isScroll&&this.totalPages>1&&'undefined'===typeof FLBuilder){this._infiniteScroll();if('load_more'==this.settings.pagination){this._infiniteScrollLoadMore()}}},_infiniteScroll:function(settings){var path=$(this.nodeClass+' .fl-builder-pagination a.next').attr('href'),pagePattern=/(.*?(\/|\&|\?)paged-[0-9]{1,}(\/|=))([0-9]{1,})+(.*)/,wpPattern=/^(.*?\/?page\/?)(?:\d+)(.*?$)/,pageMatched=null,scrollData={navSelector:this.nodeClass+' .fl-builder-pagination',nextSelector:this.nodeClass+' .fl-builder-pagination a.next',itemSelector:this.postClass,prefill:!0,bufferPx:200,loading:{msgText:this.settings.loadingText,finishedMsg:'',img:FLBuilderLayoutConfig.paths.pluginUrl+'img/ajax-loader-grey.gif',speed:1}};if(pagePattern.test(path)){scrollData.path=function(currPage){pageMatched=path.match(pagePattern);path=pageMatched[1]+currPage+pageMatched[5];return path}}else if(wpPattern.test(path)){scrollData.path=path.match(wpPattern).slice(1)}
$(this.wrapperClass).infinitescroll(scrollData,$.proxy(this._infiniteScrollComplete,this));setTimeout(function(){$(window).trigger('resize')},100)},_infiniteScrollComplete:function(elements){var wrap=$(this.wrapperClass);elements=$(elements);if(this.settings.layout=='columns'){wrap.imagesLoaded($.proxy(function(){$('#infscr-loading').remove();this._gridLayoutMatchHeight();elements.css('visibility','visible')},this))}else if(this.settings.layout=='grid'){wrap.imagesLoaded($.proxy(function(){this._gridLayoutMatchHeight();wrap.masonry('appended',elements);wrap.masonry();elements.css('visibility','visible')},this))}else if(this.settings.layout=='gallery'){this.gallery.resize();elements.css('visibility','visible')}
if('load_more'==this.settings.pagination){$(this.wrapperClass+' .fl-post-grid-sizer.masonry-brick').appendTo(this.wrapperClass);$('#infscr-loading').appendTo(this.wrapperClass)}
elements.find('img[srcset]').each(function(index,img){img.outerHTML=img.outerHTML});this.currPage++;this._removeLoadMoreButton();node=$(wrap).closest('.fl-module-post-grid').data('node')
$('.fl-node-'+node).trigger('gridScrollComplete',this)},_infiniteScrollLoadMore:function(){var wrap=$(this.wrapperClass);$(window).unbind('.infscr');$(this.nodeClass+' .fl-builder-pagination-load-more .fl-button').on('click',function(){if($('#infscr-loading').length){$('#infscr-loading').remove()}
wrap.infinitescroll('retrieve');return!1})},_removeLoadMoreButton:function(){if('load_more'==this.settings.pagination&&this.totalPages==this.currPage){$(this.nodeClass+' .fl-builder-pagination-load-more').remove()}}}})(jQuery);(function($){$(function(){new FLBuilderPostGrid({id:'rpq0ucxam2sl',layout:'columns',pagination:'none',postSpacing:'60',postWidth:'300',matchHeight:{default:'0',large:'',medium:'',responsive:''},isRTL:!1,loadingText:'Loading...'})})})(jQuery)
;/*! For license information please see front.js.LICENSE.txt */
(()=>{var __webpack_modules__={"./assets/src/js/front.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _scss_front_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scss/front.scss */ \"./assets/src/scss/front.scss\");\n/* harmony import */ var _components_booking_form_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/booking-form.mjs */ \"./assets/src/js/components/booking-form.mjs\");\n\n\n\n\n(function (w, d) {\n  var iframe = d.querySelector('#cb-window');\n  var embed = d.querySelector('div.wpcb-form__embedded > iframe');\n  var cssSelector = getCssSelector();\n  var useModal = true;\n  w.wpcb_logger = [];\n  w.cbLink = '';\n  w.bookingForms = {};\n  var useGoogleAutoComplete = false;\n  if (d.querySelector('.wpcb.wpcb-form__native')) {\n    d.querySelectorAll('.wpcb.wpcb-form__native').forEach(function (form, counter) {\n      var overrides = window.jcbForms && window.jcbForms[form.dataset.formId] ? window.jcbForms[form.dataset.formId] : {};\n      // console.log(overrides);\n\n      useGoogleAutoComplete = w.jims_wpcb_variables.use_google_autocomplete === '1' && w.jims_wpcb_variables.google_api_key.length > 0;\n      w.bookingForms[counter] = new _components_booking_form_mjs__WEBPACK_IMPORTED_MODULE_3__[\"default\"](form, w.jims_wpcb_variables, useGoogleAutoComplete, overrides);\n    });\n  }\n\n  //disables the previous forms\n  if (w.jims_wpcb_variables.hasOwnProperty('cb3FormEnabled') && w.jims_wpcb_variables.cb3FormEnabled !== '0' || !w.jims_wpcb_variables.hasOwnProperty('cb3FormEnabled') && w.bookingForms) {\n    //remove iframes if a native form is present\n    iframe ? iframe.remove() : null;\n    embed ? embed.remove() : null;\n\n    //cancel events from previous forms\n    return;\n  }\n  var CbUrlChangeEvent = new CustomEvent('cburlchange', {\n    bubbles: true,\n    detail: {\n      data: function data() {\n        return w.wpcb_logger;\n      }\n    }\n  });\n  if (iframe) {\n    iframe.src = iframe.dataset.src;\n  }\n  console.log(cssSelector);\n  //check if in any case selector is empty\n  if (cssSelector.length === 0) return;\n\n  //listen for window load or hashchange\n  addDefaultListeners();\n\n  //listen for messages from iframe\n  w.addEventListener('message', function (event) {\n    try {\n      var data = JSON.parse(event.data);\n      var dataLayer = window.dataLayer || (window.dataLayer = []);\n      var pagePath = data.data.page_path;\n      console.log(data);\n      useModal = false;\n      if (data.event) {\n        dataLayer.push({\n          event: data.event,\n          data: data\n        });\n      }\n      w.wpcb_logger.push(data);\n      if (embed) {\n        setHashPath();\n      } else {\n        isModalActive() ? setHashPath() : null;\n      }\n    } catch (e) {\n      window.console && window.console.log(event);\n    }\n  });\n\n  // booking-success\n  w.addEventListener('cburlchange', function (evt) {\n    var lastState = w.wpcb_logger[w.wpcb_logger.length - 1].data;\n    var redirectUrl = getSuccessRedirectUrl();\n    if (lastState.page_path === '/booking-success' && redirectUrl.length > 0) {\n      w.location.replace(getSuccessRedirectUrl());\n    }\n  });\n\n  //set functionality for the button which open the modal\n  var button = document.querySelector('.jims-modal');\n  if (button) {\n    button.addEventListener('click', function (evt) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      modal_toggle();\n      return false;\n    });\n  }\n  document.querySelector('.jims-cb-modal').addEventListener('click', function (evt) {\n    if (evt.target.classList.contains('close__control')) {\n      modal_toggle();\n    }\n    if (evt.target.closest('div').classList.contains('jims-cb-modal') && !evt.target.classList.contains('inner')) {\n      modal_toggle();\n    }\n  });\n  function modal_toggle() {\n    var modal = document.querySelector('.jims-cb-modal');\n    modal.classList.toggle('hidden');\n    isModalActive() ? setHashPath() : setHashPath('');\n  }\n  function setHashPath() {\n    if (arguments.length && arguments[0].length > 0) {\n      window.location.hash = arguments[0];\n      setBrowserHistoryState();\n      return;\n    }\n    if (w.wpcb_logger.length > 0) {\n      var lastState = w.wpcb_logger[w.wpcb_logger.length - 1].data;\n      window.location.hash = lastState.page_path;\n      window.dispatchEvent(CbUrlChangeEvent);\n      setBrowserHistoryState();\n    }\n  }\n\n  /**\n   *\n   */\n  function setBrowserHistoryState() {\n    var url = new URL(window.location);\n    try {\n      if (window.navigation) {\n        window.history.pushState({}, '', url);\n      } else {\n        window.history.pushState({}, '', url);\n      }\n    } catch (e) {\n      console.debug(e);\n    }\n  }\n\n  /**\n   *\n   * @returns {boolean}\n   */\n  function isModalActive() {\n    var modal = document.querySelector('.jims-cb-modal');\n    return !modal.classList.contains('hidden');\n  }\n\n  /**\n   *\n   * @returns {string|*}\n   */\n  function getCssSelector() {\n    return typeof jims_wpcb_variables.cssSelector === 'undefined' || jims_wpcb_variables.embeddedFormOptions.cssSelector === null || jims_wpcb_variables.embeddedFormOptions.cssSelector.hasOwnProperty('length') && jims_wpcb_variables.embeddedFormOptions.cssSelector.length === 0 ? '#jims' : jims_wpcb_variables.cssSelector;\n  }\n\n  /**\n   *\n   * @returns {string|*}\n   */\n  function getSuccessRedirectUrl() {\n    return typeof jims_wpcb_variables.embeddedFormOptions.redirect_success_url === 'undefined' || jims_wpcb_variables.embeddedFormOptions.redirect_success_url === null || jims_wpcb_variables.embeddedFormOptions.redirect_success_url.hasOwnProperty('length') && jims_wpcb_variables.embeddedFormOptions.redirect_success_url.length === 0 ? '' : jims_wpcb_variables.embeddedFormOptions.redirect_success_url;\n  }\n\n  /**\n   * Update event handlers if iframe is not loader of has errors\n   */\n  function addDefaultListeners() {\n    getCBLink().then(function (result) {\n      if (result.hasOwnProperty('status') && result.status !== 'success') {\n        console.log('Looks like there was a problem. Status Code: ' + response.status);\n        return;\n      } else {\n        w.cbLink = result.cb_link;\n      }\n      w.addEventListener('load', reactToLocationHash);\n      w.addEventListener('hashchange', reactToLocationHash);\n    });\n  }\n\n  /**\n   * If location hash is equal to cssSelector\n   * decides what action should take\n   * open modal or redirect, depending if the iframe\n   * has sent a message or not\n   */\n  function reactToLocationHash() {\n    if (w.location.hash === cssSelector) {\n      if (window.jims_wpcb_variables.embeddedFormOptions.redirectOnly === \"1\") {\n        redirect();\n        return;\n      }\n      if (embed === null) {\n        useModal ? modal_toggle() : redirect();\n      }\n    }\n  }\n\n  /**\n   * Redirects to cb location\n   */\n  function redirect() {\n    var BookingFormLink = w.cbLink.length > 0 ? w.cbLink : getCBLinkFallback();\n    console.log(BookingFormLink);\n    if (w.jims_wpcb_variables) {\n      w.location.replace(\"\".concat(BookingFormLink));\n    }\n  }\n  function getCBLink() {\n    return _getCBLink.apply(this, arguments);\n  }\n  /**\n   * Returns the link to the cb page\n   * @returns {string}\n   */\n  function _getCBLink() {\n    _getCBLink = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().mark(function _callee() {\n      return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (!window.jims_wpcb_variables) {\n              _context.next = 4;\n              break;\n            }\n            _context.next = 3;\n            return fetchData(\"\".concat(window.jims_wpcb_variables.home_url, \"/wp-json/jims-wpcb/v1/customer-booking/cb-link\"), {\n              method: 'GET',\n              headers: {\n                'Content-Type': 'application/json',\n                'Accept': 'application/json'\n              }\n            });\n          case 3:\n            return _context.abrupt(\"return\", _context.sent);\n          case 4:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _getCBLink.apply(this, arguments);\n  }\n  function getCBLinkFallback() {\n    var trackingArr = [\"DivisionId=\".concat(window.jims_wpcb_variables.embeddedFormOptions.DivisionId)];\n    if (window.jims_wpcb_variables.embeddedFormOptions.gtmId && window.jims_wpcb_variables.embeddedFormOptions.gtmId.length > 0) {\n      trackingArr.push(\"gtmId=\".concat(window.jims_wpcb_variables.embeddedFormOptions.gtmId));\n    }\n    if (window.jims_wpcb_variables.embeddedFormOptions.gatId && window.jims_wpcb_variables.embeddedFormOptions.gatId.length > 0) {\n      trackingArr.push(\"gatId=\".concat(window.jims_wpcb_variables.embeddedFormOptions.gatId));\n    }\n    var propertiesArr = [\"countryCode=\".concat(window.jims_wpcb_variables.embeddedFormOptions.countryCode), \"jimsProperty=\".concat(window.jims_wpcb_variables.embeddedFormOptions.jimsProperty), \"primaryColor=\".concat(window.jims_wpcb_variables.embeddedFormOptions.primaryColor), \"textColor=\".concat(window.jims_wpcb_variables.embeddedFormOptions.textColor), \"logoUrl=\".concat(window.jims_wpcb_variables.embeddedFormOptions.logoUrl)];\n    trackingArr = trackingArr.concat(propertiesArr);\n    var properties = trackingArr.join('&');\n    return \"\".concat(window.jims_wpcb_variables.embeddedFormOptions.http_schema, \"://\").concat(window.jims_wpcb_variables.embeddedFormOptions.domain, \"/?\").concat(properties);\n  }\n\n  /**\n   * Fetches data from the server\n   * @param url\n   * @param options\n   * @returns {Promise<any>}\n   */\n  function fetchData(_x) {\n    return _fetchData.apply(this, arguments);\n  }\n  function _fetchData() {\n    _fetchData = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().mark(function _callee2(url) {\n      var options,\n        _args2 = arguments;\n      return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};\n            _context2.next = 3;\n            return fetch(url, options).then(function (response) {\n              if (!response.ok) {\n                throw new Error('Network response was not ok');\n              }\n              return response.json();\n            })[\"catch\"](function (error) {\n              console.error('There has been a problem with your fetch operation:', error);\n            });\n          case 3:\n            return _context2.abrupt(\"return\", _context2.sent);\n          case 4:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _fetchData.apply(this, arguments);\n  }\n})(window, document);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/front.js?")},"./assets/src/scss/front.scss":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/scss/front.scss?")},"./node_modules/@babel/runtime/helpers/regeneratorRuntime.js":(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);\nfunction _regeneratorRuntime() {\n  "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n    return exports;\n  }, module.exports.__esModule = true, module.exports["default"] = module.exports;\n  var exports = {},\n    Op = Object.prototype,\n    hasOwn = Op.hasOwnProperty,\n    defineProperty = Object.defineProperty || function (obj, key, desc) {\n      obj[key] = desc.value;\n    },\n    $Symbol = "function" == typeof Symbol ? Symbol : {},\n    iteratorSymbol = $Symbol.iterator || "@@iterator",\n    asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",\n    toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n  function define(obj, key, value) {\n    return Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), obj[key];\n  }\n  try {\n    define({}, "");\n  } catch (err) {\n    define = function define(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n      generator = Object.create(protoGenerator.prototype),\n      context = new Context(tryLocsList || []);\n    return defineProperty(generator, "_invoke", {\n      value: makeInvokeMethod(innerFn, self, context)\n    }), generator;\n  }\n  function tryCatch(fn, obj, arg) {\n    try {\n      return {\n        type: "normal",\n        arg: fn.call(obj, arg)\n      };\n    } catch (err) {\n      return {\n        type: "throw",\n        arg: err\n      };\n    }\n  }\n  exports.wrap = wrap;\n  var ContinueSentinel = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n  var getProto = Object.getPrototypeOf,\n    NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n  function defineIteratorMethods(prototype) {\n    ["next", "throw", "return"].forEach(function (method) {\n      define(prototype, method, function (arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if ("throw" !== record.type) {\n        var result = record.arg,\n          value = result.value;\n        return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {\n          invoke("next", value, resolve, reject);\n        }, function (err) {\n          invoke("throw", err, resolve, reject);\n        }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n          result.value = unwrapped, resolve(result);\n        }, function (error) {\n          return invoke("throw", error, resolve, reject);\n        });\n      }\n      reject(record.arg);\n    }\n    var previousPromise;\n    defineProperty(this, "_invoke", {\n      value: function value(method, arg) {\n        function callInvokeWithMethodAndArg() {\n          return new PromiseImpl(function (resolve, reject) {\n            invoke(method, arg, resolve, reject);\n          });\n        }\n        return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n      }\n    });\n  }\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = "suspendedStart";\n    return function (method, arg) {\n      if ("executing" === state) throw new Error("Generator is already running");\n      if ("completed" === state) {\n        if ("throw" === method) throw arg;\n        return doneResult();\n      }\n      for (context.method = method, context.arg = arg;;) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n        if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {\n          if ("suspendedStart" === state) throw state = "completed", context.arg;\n          context.dispatchException(context.arg);\n        } else "return" === context.method && context.abrupt("return", context.arg);\n        state = "executing";\n        var record = tryCatch(innerFn, self, context);\n        if ("normal" === record.type) {\n          if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;\n          return {\n            value: record.arg,\n            done: context.done\n          };\n        }\n        "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);\n      }\n    };\n  }\n  function maybeInvokeDelegate(delegate, context) {\n    var methodName = context.method,\n      method = delegate.iterator[methodName];\n    if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a \'" + methodName + "\' method")), ContinueSentinel;\n    var record = tryCatch(method, delegate.iterator, context.arg);\n    if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n    var info = record.arg;\n    return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);\n  }\n  function pushTryEntry(locs) {\n    var entry = {\n      tryLoc: locs[0]\n    };\n    1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n  }\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = "normal", delete record.arg, entry.completion = record;\n  }\n  function Context(tryLocsList) {\n    this.tryEntries = [{\n      tryLoc: "root"\n    }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n  }\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) return iteratorMethod.call(iterable);\n      if ("function" == typeof iterable.next) return iterable;\n      if (!isNaN(iterable.length)) {\n        var i = -1,\n          next = function next() {\n            for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n            return next.value = undefined, next.done = !0, next;\n          };\n        return next.next = next;\n      }\n    }\n    return {\n      next: doneResult\n    };\n  }\n  function doneResult() {\n    return {\n      value: undefined,\n      done: !0\n    };\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", {\n    value: GeneratorFunctionPrototype,\n    configurable: !0\n  }), defineProperty(GeneratorFunctionPrototype, "constructor", {\n    value: GeneratorFunction,\n    configurable: !0\n  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {\n    var ctor = "function" == typeof genFun && genFun.constructor;\n    return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));\n  }, exports.mark = function (genFun) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;\n  }, exports.awrap = function (arg) {\n    return {\n      __await: arg\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    void 0 === PromiseImpl && (PromiseImpl = Promise);\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n      return result.done ? result.value : iter.next();\n    });\n  }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {\n    return this;\n  }), define(Gp, "toString", function () {\n    return "[object Generator]";\n  }), exports.keys = function (val) {\n    var object = Object(val),\n      keys = [];\n    for (var key in object) keys.push(key);\n    return keys.reverse(), function next() {\n      for (; keys.length;) {\n        var key = keys.pop();\n        if (key in object) return next.value = key, next.done = !1, next;\n      }\n      return next.done = !0, next;\n    };\n  }, exports.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function reset(skipTempReset) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n    },\n    stop: function stop() {\n      this.done = !0;\n      var rootRecord = this.tryEntries[0].completion;\n      if ("throw" === rootRecord.type) throw rootRecord.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(exception) {\n      if (this.done) throw exception;\n      var context = this;\n      function handle(loc, caught) {\n        return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;\n      }\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i],\n          record = entry.completion;\n        if ("root" === entry.tryLoc) return handle("end");\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, "catchLoc"),\n            hasFinally = hasOwn.call(entry, "finallyLoc");\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n          } else {\n            if (!hasFinally) throw new Error("try statement without catch or finally");\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n      finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n      var record = finallyEntry ? finallyEntry.completion : {};\n      return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n    },\n    complete: function complete(record, afterLoc) {\n      if ("throw" === record.type) throw record.arg;\n      return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n    },\n    finish: function finish(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n      }\n    },\n    "catch": function _catch(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if ("throw" === record.type) {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n      throw new Error("illegal catch attempt");\n    },\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n      return this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      }, "next" === this.method && (this.arg = undefined), ContinueSentinel;\n    }\n  }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/@babel/runtime/helpers/regeneratorRuntime.js?')},"./node_modules/@babel/runtime/helpers/typeof.js":module=>{eval('function _typeof(obj) {\n  "@babel/helpers - typeof";\n\n  return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n  }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/@babel/runtime/helpers/typeof.js?')},"./node_modules/@babel/runtime/regenerator/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{eval('// TODO(Babel 8): Remove this file.\n\nvar runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  if (typeof globalThis === "object") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function("r", "regeneratorRuntime = r")(runtime);\n  }\n}\n\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/@babel/runtime/regenerator/index.js?')},"./assets/src/js/components/AddressAutoCompleteResult.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nclass AddressAutoCompleteResult {\n    constructor(address_details, prefixClass, target, autocompleteContainer) {\n        // assign the address details to the object\n        this.address_details = address_details;\n        this.prefixClass = prefixClass;\n        this.target = target;\n        this.autoCompleteContainer = autocompleteContainer;\n    }\n\n    /**\n     * Render the address details\n     * @returns {string}\n     */\n    render() {\n        this.element = document.createElement(\'div\');\n        this.element.classList.add(`${this.prefixClass}__autocomplete-result`);\n        this.element.innerHTML = this.template();\n        this.events();\n\n\n        return this.element;\n    }\n\n    events() {\n        this.element.addEventListener(\'click\', (evt) => {\n            evt.preventDefault();\n            this.target.value = this.address_details.full_address;\n            this.autoCompleteContainer.classList.remove(\'open\');\n            return false;\n        });\n    }\n\n    template() {\n        return `<span class="autocomplete-result-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><rect width="256" height="256" fill="none"/><circle cx="128" cy="104" r="32" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"/><path d="M208,104c0,72-80,128-80,128S48,176,48,104a80,80,0,0,1,160,0Z" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"/></svg></span>\n                    <span class="autocomplete-result-location-name">${this.address_details.full_address}</span>`;\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddressAutoCompleteResult);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/AddressAutoCompleteResult.mjs?')},"./assets/src/js/components/HttpRequest.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n\n\nclass HttpRequest {\n    base = '';\n\n    constructor(baseUrl) {\n        this.base = baseUrl;\n    }\n\n    get(url) {\n       return new Promise((resolve, reject) => {\n           fetch(`${this.base}${url}`)\n               .then(response => response.json())\n               .then(data => {\n                   resolve(data);\n               })\n               .catch(error => {\n                   reject(error);\n               });\n       });\n    }\n\n    post(url, data) {\n        return new Promise((resolve, reject) => {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].info(`${this.base}${url}`);\n            fetch(`${this.base}${url}`, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/json',\n                },\n                body: JSON.stringify(data),\n            })\n                .then(response => {\n                    if (response.ok) {\n                        resolve(response.json());\n                    } else {\n                        reject(response);\n                    }\n                })\n                .catch(error => {\n                    reject(error);\n                });\n        });\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HttpRequest);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/HttpRequest.mjs?")},"./assets/src/js/components/booking-form-division-step.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/* harmony import */ var _division_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./division.mjs */ \"./assets/src/js/components/division.mjs\");\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n/* harmony import */ var _step_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./step.mjs */ \"./assets/src/js/components/step.mjs\");\n\n\n\n\n\n/**\n * BookingFormDivisionStep\n */\nclass BookingFormDivisionStep extends _step_mjs__WEBPACK_IMPORTED_MODULE_3__[\"default\"] {\n\n    /**\n     * @type {{getDivisions: string}}\n     */\n    #endpoints = {\n        getDivisions: 'jims-wpcb/v1/service/divisions'\n    };\n\n    /**\n     * @type {Array}\n     */\n    divisions = [];\n\n    /**\n     *\n     * @type {null|Division}\n     */\n    selected = null;\n\n    divisionListContainerCSSSelector = '';\n\n    /**\n     * constructor\n     * @param bookingForm {BookingForm}\n     * @param mode {string} 'default' or 'icons' default mode shows the divisions as buttons, the icons mode shows the divisions as icons\n     */\n    constructor(bookingForm, mode = 'default') {\n        super(bookingForm, mode);\n        this.bookingForm = bookingForm;\n        this.mode = mode;\n        this.containerCSSSelector = `.${this.bookingForm.prefixClass}__step.division-selector`;\n        this.divisionListContainerCSSSelector = `.${this.bookingForm.prefixClass}__division-selector__list`\n    }\n\n    init(){\n        this.HTMLElement = this.getContainer();\n        this.load();\n\n        //listen for clicks\n        this.listen();\n\n        this.bookingForm.setNextButtonState(false);\n\n        this.initialized = true;\n    }\n\n    /**\n     * Listens for clicks on the division buttons\n     */\n    listen() {\n        this.#enableSearch();\n\n        this.HTMLElement.addEventListener('click', (event) => {\n            if (event.target.classList.contains(`${this.bookingForm.prefixClass}__division-selector__item`)) {\n                const divisionId = event.target.dataset.id;\n\n                console.log(this.divisions);\n\n                //unset all other divisions\n                this.divisions.forEach((division) => {\n                    if (division.id == divisionId) { // the == is because sometimes the divisionId is a string and sometimes it is a number\n                        division.select();\n                        this.bookingForm.setNextButtonState(true);\n                        this.updateSelectedDivision(division);\n\n                        //set the division id in the booking form\n                        this.bookingForm.setSelectedDivision(division.id);\n                    } else {\n                        division.unselect();\n                    }\n                });\n            } else {\n                throw new Error('BookingFormDivisionStep: click event target is not a division');\n            }\n        });\n    }\n\n    visible() {\n        super.visible();\n        this.bookingForm.setNextButtonState(this.selected !== null);\n    }\n\n    /**\n     * Loads the divisions from the API and creates the division objects and HTML elements\n     */\n    load() {\n        this.bookingForm.setStepTitle('Select a division');\n        this.bookingForm.loader.show();\n        this.bookingForm.setFormNotification(this.bookingForm.messages.divisions_loading);\n        this.bookingForm.setStepTitleVisibility(false);\n\n        //initiate the http request\n        let http = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"]( this.bookingForm.options.rest_url );\n\n        let query = new URLSearchParams({\n            'country_code': this.bookingForm.options.country,\n        });\n\n        //get the divisions\n        http.get( `${this.#endpoints.getDivisions}?${query.toString()}` ).then( ( response) => {\n\n            //render the divisions if the response is an array and has at least one item\n            if ( Array.isArray(response ) && response.length > 0 ) {\n\n                this.divisions = response.map(( division ) => {\n                    if( this.bookingForm.options.show_only_divisions.length > 0 && !this.bookingForm.options.show_only_divisions.includes(division.id) ) {\n                        return;\n                    }\n\n                    //create the division object\n                    const DivisionObject = new _division_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"](division.id, division.name, division.name.toLowerCase(), division.icon, this.bookingForm.prefixClass );\n\n                    //add the division object to division step object\n                    return DivisionObject;\n                });\n\n                //filter out the undefined divisions\n                this.divisions = this.divisions.filter(division => division !== undefined);\n\n                if(this.bookingForm.options.show_only_divisions.length > 0){\n                    //order divisions by the order of the show_only_divisions array\n                    this.divisions.sort((a, b) => {\n                        return this.bookingForm.options.show_only_divisions.indexOf(a.id) - this.bookingForm.options.show_only_divisions.indexOf(b.id);\n                    });\n                }\n\n                this.divisions.forEach((division) => {\n                    //render the division\n                    //append the division HTMLElement to the container\n                    this.getDivisionListContainer().appendChild(division.HTMLElement );\n                });\n\n                //if divisions are loaded, hide the loader\n                if ( this.divisions.length >= 1 ) {\n                    this.bookingForm.loader.hide();\n                }\n            }\n\n        }).catch( ( error ) => {\n            /**\n             * @var error {{code: number, message: string}}\n             */\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error( error );\n        });\n    }\n\n    getDivisionListContainer() {\n        if (this.divisionListContainerCSSSelector === '' || document.querySelector(this.divisionListContainerCSSSelector) === null) {\n            throw new Error('BookingFormDivisionStep: divisionListContainerCSSSelector is not set');\n        }\n\n        return this.HTMLElement.querySelector(this.divisionListContainerCSSSelector);\n    }\n\n    /**\n     * Updates the selected division\n     * @param DivisionObject {Division}\n     */\n    updateSelectedDivision( DivisionObject) {\n        if (DivisionObject instanceof _division_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) {\n            this.selected = DivisionObject;\n        }\n    }\n\n    /**\n     * Initialize search capabilities\n     */\n    #enableSearch() {\n        this.seachbar = this.HTMLElement.querySelector('.search-bar');\n        let handler = null;\n        this.seachbar.addEventListener('keyup', (evt) => {\n            //set timeout and cancel previous timeout\n            handler = setTimeout(() => {\n                clearTimeout(handler);\n                this.#search(evt.target.value);\n            }, 500);\n        });\n    }\n\n    #search(keyword) {\n        //hide all services\n        this.divisions.forEach((division) => {\n            division.hide();\n\n            if (division.name.toLowerCase().includes(keyword.toLowerCase())) {\n                division.show();\n            }\n        });\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingFormDivisionStep);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/booking-form-division-step.mjs?")},"./assets/src/js/components/booking-form-info-step.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/* harmony import */ var _step_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./step.mjs */ \"./assets/src/js/components/step.mjs\");\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n/* harmony import */ var _services_google_autocomplete_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/google-autocomplete.mjs */ \"./assets/src/js/services/google-autocomplete.mjs\");\n/* harmony import */ var _services_phone_number_validator_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/phone-number-validator.mjs */ \"./assets/src/js/services/phone-number-validator.mjs\");\n/* harmony import */ var _services_field_validator_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../services/field-validator.mjs */ \"./assets/src/js/services/field-validator.mjs\");\n/* harmony import */ var _services_google_address_validation_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../services/google-address-validation.mjs */ \"./assets/src/js/services/google-address-validation.mjs\");\n/* harmony import */ var _AddressAutoCompleteResult_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AddressAutoCompleteResult.mjs */ \"./assets/src/js/components/AddressAutoCompleteResult.mjs\");\n/**\n * BookingFormInfoStep\n * @module components/booking-form-info-step\n */\n\n\n\n\n\n\n\n\n\nclass BookingFormInfoStep extends _step_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n\n\n    endpoints = {\n        countries: '/api/countries',\n    };\n\n    bookingForm = null;\n\n    containers = {\n        selectedServices: null,\n        clientInfo: null\n    };\n\n    divisionId = null;\n\n    GoogleAutocomplete = null;\n\n    addressSuggestions = [];\n\n    countriesLoaded = false;\n\n    addressFieldContainer = null;\n\n    /**\n     * Selected Services\n     * @type {[]}\n     */\n    services = [];\n\n    HTMLElement = null;\n\n\n    #hooks = {\n        selectedLoaded: new CustomEvent('selectedLoaded', {detail: {step: 'info'}}),\n        formFieldValidationEvent: new CustomEvent('jims-wpcb-form-field-validation', {\n            bubbles: true,\n            detail: {\n                field: null,\n                status: false,\n            }\n        })\n    }\n\n    #memory = {}\n\n    constructor(bookingForm, mode = 'default') {\n        super(bookingForm, mode);\n        this.bookingForm = bookingForm;\n\n        this.containerCSSSelector = `.${this.bookingForm.prefixClass}__step.step.client-info`;\n    }\n\n    init() {\n        super.init();\n        this.HTMLElement = this.getContainer();\n\n\n        this.addressFieldContainer = this.HTMLElement.querySelector('.form-address-field');\n\n        //jims-wpcb__step__selected_services selected_services\n        this.containers.selectedServices = this.getChild(`.${this.bookingForm.prefixClass}__step__selected_services ul`);\n\n        //jims-wpcb__step__client_info client_info\n        this.containers.clientInfo = this.getChild(`.${this.bookingForm.prefixClass}__step__client_information`);\n\n        this.load();\n    }\n\n    setSelected() {\n        this.services = this.bookingForm.getSelectedServices();\n        this.divisionId = this.bookingForm.getSelectedDivision();\n\n        this.renderSelectedServices();\n\n        //dispatch event\n        this.HTMLElement.dispatchEvent(this.#hooks.selectedLoaded);\n    }\n\n    visible() {\n        super.visible();\n\n        //show submit button\n        this.bookingForm.setSubmitButtonVisibility(true);\n        this.bookingForm.setSubmitButtonState(true);\n\n        //get selected services\n        if(!this.hasPreselectedServices(this.bookingForm.options)){\n            this.setSelected();\n        }\n    }\n\n    load() {\n        const options = this.bookingForm.options;\n\n        //get selected division if step active else use the default division\n        this.bookingForm.setStepTitle('Book a Service:');\n        this.bookingForm.setStepTitleVisibility(true);\n\n        this.bookingForm.setPreviousButtonState(true);\n        this.bookingForm.setNextButtonState(false, true);\n\n        if(this.hasPreselectedServices(options)){\n            this.setSelected();\n        }\n\n        this.setupCountries();\n        this.setupAddressAutocomplete();\n\n        this.listen();\n    }\n\n    hasPreselectedServices(options) {\n        return options.bookingFormServiceIds && options.bookingFormServiceIds.length > 0;\n    }\n\n    listen() {\n        super.listen();\n\n        this.enableValidation();\n\n        this.HTMLElement.addEventListener('jims-wpcb-form-field-validation', (evt) => {\n            this.dirty = this.bookingForm.isDirty();\n\n            if(this.dirty){\n                this.bookingForm.setSubmitButtonState(true);\n            } else {\n                this.bookingForm.setSubmitButtonState(false);\n            }\n\n            Object.keys(this.bookingForm.formFieldValidationStatus).forEach((name) => {\n                let field = this.HTMLElement.querySelector(`[name=\"${name}\"]`);\n                if (this.bookingForm.formFieldValidationStatus[name]) {\n                    field.classList.remove('error');\n                } else {\n                    field.classList.add('error');\n                }\n            });\n        });\n\n        this.HTMLElement.addEventListener('keyup', (evt) => {\n            if (evt.target.nodeName === 'INPUT') {\n                //if classList contains phone, prevent user using letter keys\n                if (evt.target.classList.contains('phone') || evt.target.type === 'tel') {\n                    evt.target.value = evt.target.value.replace(/[^0-9]/g, '');\n                }\n            }\n        });\n    }\n\n\n    reset() {\n\n    }\n\n    renderSelectedServices() {\n        this.containers.selectedServices.innerHTML = '';\n\n        this.bookingForm.getSelectedServicesObjectList(this.services).then((services) => {\n            services.forEach((service) => {\n                if (this.services.includes(service.id)) {\n                    let li = document.createElement('li');\n                    li.innerHTML = service.name;\n                    this.containers.selectedServices.appendChild(li);\n                }\n            });\n        });\n    }\n\n    enableValidation() {\n        this.addMultipleEventListener(this.HTMLElement, ['change', 'click', 'blur', 'focusout'], (evt) => {\n            this.validate(evt);\n        });\n    }\n\n    getFieldType(field) {\n        if (field.nodeName === 'TEXTAREA') {\n            return 'textarea';\n        }\n\n        if (field.nodeName === 'SELECT') {\n            return 'select';\n        }\n\n        return field.type;\n    }\n\n    validate(evt) {\n        let PhoneValidator = new _services_phone_number_validator_mjs__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.bookingForm.options.rest_url);\n        let countryCode = this.HTMLElement.querySelector('select[name=\"country\"]').value;\n        let field = evt.target;\n\n        if (countryCode.length === 0) {\n            countryCode = this.bookingForm.options.country;\n        }\n\n        //check if field nodeName is INPUT | SELECT | TEXTAREA\n        if (!['INPUT', 'TEXTAREA'].includes(field.nodeName)) {\n            return;\n        }\n\n        if (field.name === 'address') {\n            this.updateValidationStatus(field, false);\n        }\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info('validation running')\n\n        let addressValidationTime = null;\n\n        //if target is required\n        if (field.hasAttribute('required')) {\n            field.classList.add('touched');\n            //if field is empty\n            if (field.type === 'tel') {\n                PhoneValidator.validate(\n                    countryCode,\n                    field.value,\n                ).then((response) => {\n                    this.bookingForm.formFieldValidationStatus[field.name] = response.result;\n                    this.HTMLElement.dispatchEvent(this.#hooks.formFieldValidationEvent);\n                });\n            } else {\n                if (field.name === 'address' && ((this.bookingForm.options.google_address_validation && this.bookingForm.options?.google_address_validation === 0) || this.bookingForm.options?.google_address_validation === '1')) {\n                    this.validateAddressField(field, countryCode);\n                } else {\n                    let status = _services_field_validator_mjs__WEBPACK_IMPORTED_MODULE_5__.FieldValidator.validate(this.getFieldType(field), field.value);\n                    this.bookingForm.formFieldValidationStatus[field.name] = status;\n                    this.HTMLElement.dispatchEvent(this.#hooks.formFieldValidationEvent);\n                }\n            }\n        }\n    }\n\n    /**\n     * Update the validation status of a field\n     * @param field\n     * @param result\n     */\n    updateValidationStatus(field, result) {\n        //validate field name to not include square brackets\n        if (field.name.includes('[') || field.name.includes(']')) {\n            return;\n        }\n\n        this.bookingForm.formFieldValidationStatus[field.name] = result;\n        this.HTMLElement.dispatchEvent(this.#hooks.formFieldValidationEvent);\n    }\n\n    /**\n     *\n     * @param field\n     * @param response\n     * @param messageElement\n     * @param AddressValidator\n     * @return {boolean}\n     */\n    handleAddressValidationResult(field, formattedAddress, response, messageElement, AddressValidator) {\n        this.updateValidationStatus(field, response.result);\n        field.value = formattedAddress;\n\n        if (response.result === false && !response.hasOwnProperty('incomplete')) {\n            let friendlyAddressParts = AddressValidator.getFriendlyAddressParts(response.data.address);\n\n            let message = [\n                'Malfomed address',\n                friendlyAddressParts.length > 0 ? `Missing ${friendlyAddressParts.join(', ')}` : '',\n                'Please enter a valid address'\n            ].join('. ');\n\n            messageElement.classList.remove('hidden');\n\n            //assign message and remove line returns\n            messageElement.innerHTML = message.replaceAll('\\n', '');\n\n            return false;\n        }\n    }\n\n    toggleLoaderOnAddress(open = true) {\n\n        if(open){\n            this.addressFieldContainer.classList.add('field-loading');\n        } else {\n            this.addressFieldContainer.classList.remove('field-loading');\n        }\n    }\n\n    validateAddressField(field, countryCode) {\n        //check if field is focused\n        if (document.activeElement === field) {\n            this.updateValidationStatus(field, false);\n            return;\n        }\n\n        if (field.value.length < 5) {\n            return;\n        }\n\n        this.toggleLoaderOnAddress(true);\n        field.classList.remove('error');\n        let AddressValidator = new _services_google_address_validation_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.bookingForm.options.google_api_key);\n        let messageElement = this.HTMLElement.querySelector('.address-error-message');\n\n        //disable country select\n        this.setCountrySelectState('disabled');\n\n\n        //hide message\n        messageElement.classList.add('hidden');\n        messageElement.innerHTML = '';\n\n        if (this.bookingForm.googleAutocompleteIsVisible()) {\n            this.observeGoogleAutocomplete();\n            this.updateValidationStatus(field, false);\n            return false;\n        }\n\n        //if the google address validation is passed check if the country is correct\n        this.bookingForm.getAddressObject(field.value, countryCode).then((addressObject) => {\n            if (addressObject.exception) {\n                // field.classList.add('error');\n                messageElement.classList.remove('hidden');\n                messageElement.innerHTML = 'Please enter a valid address';\n\n                this.toggleLoaderOnAddress(false);\n                this.updateValidationStatus(field, false);\n                return false;\n            }\n\n            let calculatedCountryCode = addressObject.country.length > 3\n                ? this.bookingForm.countriesCodes.getCountryCode(addressObject.country)\n                : addressObject.country;\n\n            if (countryCode !== calculatedCountryCode) {\n                messageElement.classList.remove('hidden');\n\n                //assign message and remove line returns\n                messageElement.innerHTML = `Please enter a valid address for ${this.bookingForm.countriesCodes.getCountryName(countryCode)}`;\n\n                this.toggleLoaderOnAddress(false);\n                this.updateValidationStatus(field, false);\n            } else {\n                let formattedAddress = AddressValidator.formatAddress(addressObject);\n\n                AddressValidator.validateAddress({\n                    \"address\": {\n                        regionCode: countryCode,\n                        addressLines: [formattedAddress]\n                    }\n                }).then((response) => {\n                    this.toggleLoaderOnAddress(false);\n                    this.handleAddressValidationResult(field, formattedAddress, response, messageElement, AddressValidator);\n                }).finally(() => {\n                    this.setCountrySelectState('enabled');\n                });\n            }\n        }).catch((error) => {\n            messageElement.classList.remove('hidden');\n            messageElement.innerHTML = 'Please enter a valid address';\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info(error);\n\n            this.toggleLoaderOnAddress(false);\n            this.updateValidationStatus(field, false);\n        }).finally(() => {\n            this.setCountrySelectState('enabled');\n        });\n    }\n\n    /**\n     * @return\n     */\n    observeGoogleAutocomplete() {\n        if (!this.bookingForm.googleAutoCompleteActive()) return;\n\n        let observer = new MutationObserver((mutations) => {\n            mutations.forEach((mutation) => {\n                if (mutation.target.style.display === 'none') {\n                    this.HTMLElement.querySelector('form [name=address]').dispatchEvent(new Event('change', {\n                        cancelable: true,\n                        bubbles: true\n                    }));\n                }\n            });\n        });\n\n        observer.observe(document.querySelector('.pac-container'), {\n            attributes: true,\n            attributeFilter: ['style']\n        });\n    }\n\n    setupCountries() {\n        if(this.countriesLoaded) return;\n\n        let http = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.bookingForm.options.rest_url);\n        let countriesSelect = this.HTMLElement.querySelector('select[name=\"country\"]');\n        const config = this.bookingForm.options;\n\n        if (countriesSelect === null) { return false; }\n\n        let countriesResponse = [];\n        http.get(this.bookingForm.endpoints.countries).then((response) => {\n            countriesResponse = response;\n        }).catch((error) => {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error(error);\n        }).finally(() => {\n           if(countriesResponse.hasOwnProperty('length') && countriesResponse.length > 0){\n               this.bookingForm.countries = countriesResponse;\n               countriesSelect.innerHTML = '';\n               this.bookingForm.countries.forEach((country) => {\n                   let option = document.createElement('option');\n                   option.value = country.symbol;\n                   option.innerText = country.name;\n\n                   if (config.country && country.symbol === config.country) {\n                       option.setAttribute('selected', 'selected');\n                       this.setFlag(country.symbol);\n                   }\n\n                   countriesSelect.appendChild(option);\n               });\n\n               if(this.bookingForm.countries.length > 0){\n                   this.countriesLoaded = true;\n               }\n           }\n        });\n\n        countriesSelect.addEventListener('change', (evt) => {\n            this.setFlag(evt.target.value);\n            if (this.bookingForm.useGoogleAutocomplete) {\n                this.GoogleAutocomplete.setCountry(evt.target.value);\n            }\n\n            //revalidate address field\n            let addressField = this.HTMLElement.querySelector('input[name=\"address\"]');\n            if (addressField.value.length > 5) {\n                const e = new Event(\"change\", {\n                    'bubbles': true,\n                    'cancelable': true\n                });\n                addressField.dispatchEvent(e);\n            }\n        });\n    }\n\n    /**\n     * Requests address autocomplete suggestions from findajim service\n     * @param address\n     * @param addressInput\n     */\n    getAddressSuggestions(address) {\n        const httpRequest = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.bookingForm.options.rest_url);\n        httpRequest.post(this.bookingForm.endpoints.address, {\n            \"address\": address,\n            \"country_code\": this.HTMLElement.querySelector('select[name=\"country\"]').value\n        }).then((response) => {\n            this.addressSuggestions = response;\n            this.setAddressSuggestions();\n        });\n    }\n\n    /**\n     * Adds options to auto-complete for address\n     */\n    setAddressSuggestions() {\n        const autocompleteElementContainer = this.HTMLElement.querySelector(`.${this.prefixClass}__autocomplete`);\n        autocompleteElementContainer.innerHTML = '';\n        autocompleteElementContainer.classList.add('open');\n\n        //populate datalist with suggestions\n        this.addressSuggestions.forEach((address) => {\n            let autocompleteElement = new _AddressAutoCompleteResult_mjs__WEBPACK_IMPORTED_MODULE_7__[\"default\"](\n                address,\n                this.prefixClass,\n                this.HTMLElement.querySelector('input[name=\"address\"]'),\n                autocompleteElementContainer\n            );\n            autocompleteElementContainer.append(autocompleteElement.render());\n        });\n    }\n\n    setFlag(countryCode) {\n        let countryImage = countryCode.toLowerCase();\n        this.HTMLElement.querySelector('.icon-country img').setAttribute('src', `${this.bookingForm.options.wpcb_url}assets/dist/img/${countryImage}.png`);\n    }\n\n    setCountrySelectState(state = 'disabled') {\n        let countrySelect = this.HTMLElement.querySelector('select[name=\"country\"]');\n        if(state === 'enabled'){\n            countrySelect.removeAttribute('disabled');\n            return;\n        }\n        countrySelect.setAttribute('disabled', 'disabled');\n    }\n\n    /**\n     * Refreshes the address suggestions\n     */\n    setupAddressAutocomplete() {\n        const addressInput = this.HTMLElement.querySelector('input[name=\"address\"]');\n\n        if (this.bookingForm.useGoogleAutocomplete) {\n            this.GoogleAutocomplete = new _services_google_autocomplete_mjs__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n                addressInput,\n                this.HTMLElement,\n                {\n                    countryCode: this.bookingForm.options.country,\n                },\n                this.bookingForm.options.google_api_key\n            );\n        } else {\n            let handler = null;\n            addressInput.addEventListener('keyup', (evt) => {\n                handler = setTimeout(() => {\n                    clearTimeout(handler);\n                    this.getAddressSuggestions(evt.target.value);\n                }, 500);\n            });\n        }\n    }\n\n    addMultipleEventListener(element, events, callback) {\n        events.forEach((event) => {\n            element.addEventListener(event, callback);\n        });\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingFormInfoStep);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/booking-form-info-step.mjs?")},"./assets/src/js/components/booking-form-services-step.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n/* harmony import */ var _step_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./step.mjs */ \"./assets/src/js/components/step.mjs\");\n/* harmony import */ var _booking_form_division_step_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./booking-form-division-step.mjs */ \"./assets/src/js/components/booking-form-division-step.mjs\");\n/* harmony import */ var _service_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./service.mjs */ \"./assets/src/js/components/service.mjs\");\n/* harmony import */ var _service_group_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./service-group.mjs */ \"./assets/src/js/components/service-group.mjs\");\n\n\n\n\n\n\n\n/**\n * Booking Form Services Step\n * @module components/booking-form-services-step\n * @version 1.0.0\n */\nclass BookingFormServiceStep extends _step_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n    #endpoints = {\n        services: 'jims-wpcb/v1/service/division/services',\n    };\n\n    /**\n     * Service[]\n     * @type {[]}\n     */\n    services = [];\n\n    /**\n     * ServiceGroup[]\n     * @type {[]}\n     */\n    groups = [];\n\n    selected = [];\n\n    division = null;\n\n    #divisionUpdated = false;\n\n    #memory = {\n        servicesResponse: {}\n    };\n\n    /**\n     * Custom events\n     * @type {{servicesLoaded: CustomEvent<{services: []}>}}\n     */\n    #hooks = {\n        servicesLoaded: new CustomEvent('servicesLoaded', {detail: {services: this.services}}),\n        serviceStatusChange: new CustomEvent('serviceStatusChange', {detail: {status: null, id: null}})\n    };\n\n    constructor(bookingForm, mode = 'default') {\n        super(bookingForm, mode);\n\n        //{{prefix_class}}__step step services\n        this.containerCSSSelector = `.${this.bookingForm.prefixClass}__step.step.services`;\n\n        //define the service list container\n        this.serviceListContainerCSSSelector = this.#isServiceGroupingEnabled(this.bookingForm)\n            ? `.${this.bookingForm.prefixClass}-service-category-container`\n            : `.${this.bookingForm.prefixClass}-service__results.results ul`;\n    }\n\n    init() {\n        this.HTMLElement = this.getContainer();\n        this.load();\n\n        //listen for clicks\n        this.listen();\n\n        this.initialized = true;\n    }\n\n    visible() {\n        super.visible();\n        this.bookingForm.setSubmitButtonVisibility(false);\n        this.bookingForm.setPreviousButtonState(true);\n\n        //show the next button, remove hidden class and set the button state\n        //todo fix this to be more clean\n        this.bookingForm.setNextButtonState(true, true);\n        this.bookingForm.setNextButtonState(this.selected.length > 0);\n    }\n\n    listen() {\n        super.listen();\n\n        this.#enableSearch();\n\n        this.HTMLElement.addEventListener('serviceStatusChange', (event) => {\n            this.selected = event.detail.status === true\n                ? this.addSelected(this.selected, event.detail.id)\n                : this.removeFromSelected(this.selected, event.detail.id);\n\n            this.bookingForm.setSelectedServices(this.selected);\n\n            this.bookingForm.setNextButtonState(this.selected.length > 0);\n        });\n    }\n\n    dispatchServiceStatusChangeEvent(serviceId, status = null) {\n        this.#hooks.serviceStatusChange.detail.status = status;\n        this.#hooks.serviceStatusChange.detail.id = serviceId;\n\n        this.HTMLElement.dispatchEvent(this.#hooks.serviceStatusChange);\n    }\n\n    load() {\n        //set loader for services\n        this.bookingForm.setFormNotification(this.bookingForm.messages.services_loading);\n        this.bookingForm.loader.show();\n        this.bookingForm.setStepTitleVisibility(false);\n\n        //get the service list container\n        const serviceListContainer = this.HTMLElement.querySelector(this.serviceListContainerCSSSelector);\n\n        //if the service list container is null, avoid loading the services\n        if (serviceListContainer === null) {\n            this.bookingForm.loader.removeServiceLoader();\n\n            //todo: show error message if container is null\n            throw new Error('Service list container is null');\n\n            if (this.bookingForm.options.bookingFormServiceIds.length === 0) return;\n        }\n\n\n        this.getServices().then((response) => {\n            this.bookingForm.setFormNotification(this.bookingForm.messages.search);\n\n            //reset services and groups\n            if (this.#divisionUpdated) {\n                this.reset(serviceListContainer);\n\n                if (this.#isServiceGroupingEnabled(this.bookingForm)) {\n                    this.renderInGroups(response, serviceListContainer);\n                } else {\n                    this.renderSimple(response, serviceListContainer);\n                }\n\n                this.HTMLElement.dispatchEvent(this.#hooks.servicesLoaded);\n            }\n        }).catch((error) => {\n            console.log(error);\n        }).finally(() => {\n            this.bookingForm.loader.removeServiceLoader();\n        });\n    }\n\n    reset(serviceListContainer) {\n        this.services = [];\n        this.groups = [];\n        this.selected = [];\n        serviceListContainer.innerHTML = '';\n    }\n\n    renderInGroups(response, servicesContainer) {\n        const options = this.bookingForm.options;\n        let hiddenServices = [];\n        let visibleServices = [];\n\n        if (options.bookingFormServiceIds && options.bookingFormServiceIds.length > 0) {\n            let serviceData = [];\n            let groups = Object.values(response);\n            groups.forEach((group) => {\n                let groupServices = group.services;\n                if (Array.isArray(groupServices)) {\n                    //merge all groupServices into one serviceData array\n                    Object.values(groupServices).forEach((service) => {\n                        serviceData.push(service);\n                    });\n                    response = serviceData;\n                }\n            });\n        }\n\n        let serviceGroups = Object.values(response);\n\n        //ordering groups by order property, the bigger the order the higher the group\n        serviceGroups = serviceGroups.sort((a, b) => {\n            return (a.order < b.order) ? 1 : -1;\n        });\n\n        //render groups\n        serviceGroups.forEach((serviceGroup) => {\n            let group = new _service_group_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"](serviceGroup.name, serviceGroup.order, serviceGroup.description, this);\n            let groupServices = serviceGroup.services;\n\n            if (!Array.isArray(groupServices)) {\n                groupServices = Object.values(groupServices);\n            }\n\n            if (options.alphabetical_order === '1') {\n                //sort services alphabetically\n                groupServices = this.OrderServicesAlphabetically(groupServices);\n            }\n\n            groupServices = this.filterServiceVisibility(groupServices);\n\n            if (groupServices.length > 0) {\n                groupServices.forEach((service) => {\n                    visibleServices.push(service.id);\n\n                    let newService = new _service_mjs__WEBPACK_IMPORTED_MODULE_4__[\"default\"](service.friendly_name, service.id, service?.description, true);\n                    newService.setParentElement(this);\n                    group.addService(newService);\n                    this.services.push(newService);\n                });\n\n                group.createDomElement();\n                this.groups.push(group);\n\n                servicesContainer.appendChild(group.element);\n            }\n        });\n    }\n\n    renderSimple(response, servicesContainer) {\n        let services = this.filterServiceVisibility(Object.values(response));\n        let hiddenServices = [];\n        let visibleServices = [];\n\n        services.forEach((service) => {\n            //exclude services that are not in the show only services array\n            if(this.bookingForm.options.show_only_services.length > 0 && this.bookingForm.options.show_only_services.indexOf(service.id) === -1){\n                return;\n            }\n\n            visibleServices.push(service.id);\n            this.renderService(service);\n        });\n\n        //hidden services variable is referring to the services that are not available through the API\n        //and are set in the booking form shortcode, normally they exist on FMS but are not available\n        // on national level\n        hiddenServices = this.bookingForm.options.bookingFormServiceIds.filter((id) => {\n            return visibleServices.indexOf(id) === -1;\n        });\n\n        if (hiddenServices.length > 0) {\n            hiddenServices.forEach((id) => {\n                this.services.push(new _service_mjs__WEBPACK_IMPORTED_MODULE_4__[\"default\"](`Custom Service`, id));\n            });\n        }\n\n        //render services\n        if (this.services.length > 0) {\n\n            if (this.bookingForm.options.alphabetical_order === '1') {\n                //sort services alphabetically\n                this.services = this.OrderServicesAlphabetically(this.services);\n            }\n\n            this.services.forEach((service) => {\n                if (servicesContainer !== null)\n                    servicesContainer.appendChild(service.element);\n\n                if (this.bookingForm.options.bookingFormServiceIds && this.bookingForm.options.bookingFormServiceIds.indexOf(service.id) !== -1 && !service.selected) {\n                    service.toggleSelected();\n                }\n            });\n\n        }\n    }\n\n    renderService(service){\n        let newService = new _service_mjs__WEBPACK_IMPORTED_MODULE_4__[\"default\"](service.friendly_name, service.id);\n        newService.setParentElement(this);\n        this.services.push(newService);\n    }\n\n    addSelected(selected, id){\n        if(selected.indexOf(id) === -1){\n            selected.push(id);\n        }\n\n        return selected;\n    }\n\n    removeFromSelected(selected, removedId){\n        return selected.filter((id) => id !== removedId);\n    }\n\n\n    /**\n     * Filters services based on the show only services and excluded services options\n     *\n     * @param response\n     * @return {*}\n     */\n    filterServiceVisibility(response) {\n        const services = response;\n        const options = this.bookingForm.options;\n\n        //check if excluded services are set or show only services are set\n        // if both the show only services and excluded services are set, the excluded services will be ignored\n        if (options.exclude_services.length > 0 || options.show_only_services.length > 0) {\n            let excludedServices = options.exclude_services;\n            let showOnlyServices = options.show_only_services;\n\n            //if show only services are set, remove all services that are not in the show only services array\n            if (showOnlyServices.length > 0) {\n                response = response.filter((service) => {\n                    return showOnlyServices.indexOf(service.id) !== -1;\n                });\n\n                if (response.length === 0) {\n                    response = services;\n                }\n            }\n\n            //if excluded services are set, remove all services that are in the excluded services array\n            if (excludedServices.length > 0 && showOnlyServices.length === 0) {\n                response = response.filter((service) => {\n                    return excludedServices.indexOf(service.id) === -1;\n                });\n            }\n        }\n\n        return response;\n    }\n\n    /**\n     * Orders services alphabetically\n     * @param serviceList\n     * @return {*}\n     * @constructor\n     */\n    OrderServicesAlphabetically(serviceList) {\n        return serviceList.sort((a, b) => {\n            let aName = a.name.toLowerCase();\n            let bName = b.name.toLowerCase();\n\n            if (aName < bName) return -1;\n            if (aName > bName) return 1;\n            return 0;\n        });\n    }\n\n    /**\n     * Get the division services from the api\n     * @return {Promise<unknown>}\n     */\n    getServices() {\n        const http = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.bookingForm.options.rest_url);\n        let divisionId = this.getParentProperty('options').bookingFormDivisionId;\n        this.#divisionUpdated = false;\n\n        //get the division id from the division step, if it's activated\n        //loop through bookingform steps and find if any is an instance of BookingFormDivisionStep\n        const divisionStep = Object.values(this.bookingForm.steps).find(step => step instanceof _booking_form_division_step_mjs__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n\n        if (divisionStep !== undefined) {\n            //set the division id\n            divisionId = divisionStep.selected.id;\n        }\n\n        //update services only\n        if (this.division === null || this.division !== divisionId) {\n            this.division = divisionId;\n            this.#divisionUpdated = true;\n\n            //create query string\n            let queryString = new URLSearchParams({\n                'division_id': divisionId,\n                'use_grouping': this.#isServiceGroupingEnabled(this.bookingForm) ? '1' : '0',\n                'country_code': this.getParentProperty('options').country,\n                'service_list': this.getServiceListName()\n            });\n\n            this.#memory.servicesResponse = http.get(`${this.#endpoints.services}?${queryString.toString()}`);\n        }\n\n        return this.#memory.servicesResponse;\n    }\n\n    getServiceListName() {\n        return this.bookingForm.options.bookingFormServiceList !== undefined\n            ? this.bookingForm.options.bookingFormServiceList\n            : '';\n    }\n\n    /**\n     * Returns true if the service grouping is enabled and no preselected services are set\n     * @return {boolean}\n     */\n    isServiceGroupingEnabled() {\n        const options = this.bookingForm.options;\n\n        if (options.grouping_enabled === undefined) return false;\n\n        return options.grouping_enabled === '1' &&\n            !(options.bookingFormServiceIds && options.bookingFormServiceIds.length > 0);\n    }\n\n    /**\n     * Initialize search capabilities\n     */\n    #enableSearch() {\n        this.seachbar = this.HTMLElement.querySelector('.search-bar');\n        let handler = null;\n        this.seachbar.addEventListener('keyup', (evt) => {\n            //set timeout and cancel previous timeout\n            handler = setTimeout(() => {\n                clearTimeout(handler);\n                this.#search(evt.target.value);\n            }, 500);\n        });\n    }\n\n    #search(keyword) {\n        //hide all services\n        this.services.forEach((service) => {\n            service.hide();\n\n            if (service.name.toLowerCase().includes(keyword.toLowerCase())) {\n                service.show();\n            }\n        });\n    }\n\n    /**\n     * @return {boolean}\n     */\n    #isServiceGroupingEnabled(bookingForm) {\n        return bookingForm.options.grouping_enabled === '1' &&\n            !(bookingForm.options.bookingFormServiceIds && bookingForm.options.bookingFormServiceIds.length > 0);\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingFormServiceStep);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/booking-form-services-step.mjs?")},"./assets/src/js/components/booking-form-step-generator.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _decorators_booking_form_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../decorators/booking-form.mjs */ "./assets/src/js/decorators/booking-form.mjs");\n/* harmony import */ var _booking_form_division_step_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./booking-form-division-step.mjs */ "./assets/src/js/components/booking-form-division-step.mjs");\n/* harmony import */ var _booking_form_services_step_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./booking-form-services-step.mjs */ "./assets/src/js/components/booking-form-services-step.mjs");\n/* harmony import */ var _booking_form_info_step_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./booking-form-info-step.mjs */ "./assets/src/js/components/booking-form-info-step.mjs");\n/**\n * a factory class for booking form step\n *\n * Booking Form Step\n * @module components/booking-form-step\n * @version 1.0.0\n */\n\n\n\n\n\nclass BookingFormStepGenerator {\n\n    /**\n     *\n     * @type {{parent: null, component: string, isCurrent: boolean, isVisited: boolean, isLastStep: boolean, isSkipped: boolean, name: string, isFirstStep: boolean, selector: string, isDisabled: boolean, isOptional: boolean, isHidden: boolean}}\n     */\n    step_props = {\n        "name": \'\',\n        "component": \'\',\n        "parent": null,\n        "isLastStep": false,\n        "isFirstStep": false,\n        "isCurrent": false,\n        "isDisabled": false,\n        "isHidden": false,\n        "isOptional": false,\n        "isSkipped": false,\n        "isVisited": false,\n        "isValid": false,\n    }\n\n    /**\n     * @type {string}\n     * @type {null}\n     */\n    $object = null;\n\n    $steps = {};\n\n    constructor() {\n        // register default steps here\n        this.steps = {\n            \'divisions\': _booking_form_division_step_mjs__WEBPACK_IMPORTED_MODULE_1__["default"],\n            \'services\': _booking_form_services_step_mjs__WEBPACK_IMPORTED_MODULE_2__["default"],\n            \'info\': _booking_form_info_step_mjs__WEBPACK_IMPORTED_MODULE_3__["default"],\n        };\n    }\n\n    createStep(name, component, parent) {\n        //check if form element exists\n        if (parent) {\n            let props = this.step_props;\n            props.name = name;\n            props.component = component;\n            props.parent = parent;\n\n            return (0,_decorators_booking_form_mjs__WEBPACK_IMPORTED_MODULE_0__.StepDecorator)(new this.registeredSteps[name](parent), props);\n        }\n    }\n\n    get registeredSteps() {\n        return this.steps;\n    }\n\n    addStep(name, classObject) {\n        this.steps[name] = classObject;\n    }\n\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingFormStepGenerator);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/booking-form-step-generator.mjs?')},"./assets/src/js/components/booking-form.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _types_booking_request_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types/booking-request.mjs */ \"./assets/src/js/types/booking-request.mjs\");\n/* harmony import */ var _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/* harmony import */ var _service_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./service.mjs */ \"./assets/src/js/components/service.mjs\");\n/* harmony import */ var _loader_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./loader.mjs */ \"./assets/src/js/components/loader.mjs\");\n/* harmony import */ var _AddressAutoCompleteResult_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AddressAutoCompleteResult.mjs */ \"./assets/src/js/components/AddressAutoCompleteResult.mjs\");\n/* harmony import */ var _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../services/error-message.mjs */ \"./assets/src/js/services/error-message.mjs\");\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n/* harmony import */ var _services_google_analytics_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../services/google-analytics.mjs */ \"./assets/src/js/services/google-analytics.mjs\");\n/* harmony import */ var chart_js_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! chart.js/helpers */ \"./node_modules/chart.js/helpers/helpers.js\");\n/* harmony import */ var _booking_form_step_generator_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./booking-form-step-generator.mjs */ \"./assets/src/js/components/booking-form-step-generator.mjs\");\n/* harmony import */ var _service_group_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./service-group.mjs */ \"./assets/src/js/components/service-group.mjs\");\n/* harmony import */ var _services_google_address_validation_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../services/google-address-validation.mjs */ \"./assets/src/js/services/google-address-validation.mjs\");\n/* harmony import */ var _prompt_contractor_consent_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./prompt-contractor-consent.mjs */ \"./assets/src/js/components/prompt-contractor-consent.mjs\");\n/* harmony import */ var _services_country_codes_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../services/country-codes.mjs */ \"./assets/src/js/services/country-codes.mjs\");\n/* harmony import */ var _types_fms_provider_mjs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../types/fms-provider.mjs */ \"./assets/src/js/types/fms-provider.mjs\");\n/* harmony import */ var _types_franchisee_mjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../types/franchisee.mjs */ \"./assets/src/js/types/franchisee.mjs\");\n/* harmony import */ var _services_jims_services_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../services/jims-services.mjs */ \"./assets/src/js/services/jims-services.mjs\");\n/**\n * Form Component\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Booking Form\n * @type {Form}\n */\nclass BookingForm {\n\n    /**\n     * Form element\n     * @type {{}}\n     */\n    formElement = {};\n\n    dirty = true;\n\n    formFieldValidationStatus = {};\n\n    /**\n     * @type CustomEvent\n     */\n    formFieldValidationEvent = null;\n\n    /**\n     * @type CustomEvent\n     */\n    contractorConsentEvent = null;\n\n    contractorPopupActivated = false;\n\n    /**\n     * @type CustomEvent\n     */\n    servicesLoadedEvent = null;\n\n    usedJimsBefore = false;\n\n    useGoogleAutocomplete = false;\n\n    googleAnalytics = null;\n\n    sendUnservicedLead = false;\n\n    options = {};\n\n    countries = [\n        {\n            \"name\": \"Australia\",\n            \"symbol\": \"AU\"\n        },\n        {\n            \"name\": \"New Zealand\",\n            \"symbol\": \"NZ\"\n        }\n    ];\n\n    serviceList = [];\n\n    selected = {\n        services: [],\n        division: null,\n    }\n\n    groups = [];\n\n    endpoints = {\n        services: 'jims-wpcb/v1/service/division/services',\n        countries: 'jims-wpcb/v1/service/countries',\n        address: 'jims-wpcb/v1/customer-booking/address',\n        details: 'jims-wpcb/v1/customer-booking/address/details',\n        fsePhoto: 'jims-wpcb/v1/customer-booking/url/fse-photo',\n        create: {\n            'direct': 'jims-wpcb/v1/customer-booking/create',\n            'step1': 'jims-wpcb/v1/customer-booking/create?booking_step=1',\n            'step2': 'jims-wpcb/v1/customer-booking/create?booking_step=2',\n        },\n    }\n\n    messages = {\n        'loading': 'Loading...',\n        'divisions_loading': 'Loading Divisions...',\n        'services_loading': 'Loading Services...',\n        'search': 'Searching for Franchisee in your Area... Please do not close screen',\n        'submitting': 'Submitting your request... Please do not close screen”',\n    };\n\n    errorMessages = {\n        text: 'Please enter a valid text',\n        email: 'Please enter a valid email',\n        phone: 'Please enter a valid phone number'\n    };\n\n    /**\n     * Progress\n     * @type {number}\n     */\n    progress = 0;\n\n    /**\n     *\n     * @type {null}\n     */\n    bookingRequest = null;\n\n    /**\n     * Required fields\n     */\n    requiredFields = [\n        'firstname',\n        'lastname',\n        'email',\n        'phone',\n        'address',\n    ];\n\n    prefixClass = 'jims-wpcb';\n\n\n    /**\n     *\n     * @type {{Object:BookingFormDivisionStep|BookingFormServiceStep|BookingFormInfoStep}}\n     */\n    steps = {};\n\n    /**\n     *\n     * @type {contractorConsentPrompt|null}\n     */\n    contractorConsentPrompt = null;\n\n    /**\n     * Current step\n     * @type {number}\n     */\n    currentStep = 0;\n\n\n    navButtons = {};\n\n    deviceState = {};\n\n    /**\n     *\n     * @param formElement, form element\n     * @param options object\n     * @param useGoogleAutocomplete boolean\n     */\n    constructor(formElement, options, useGoogleAutocomplete, overrides = {}) {\n        this.formElement = formElement;\n        this.options = this.applyOverrides(options, overrides);\n        this.useGoogleAutocomplete = useGoogleAutocomplete;\n\n        if(options.requiredFields){\n            this.requiredFields = Object.values(options.requiredFields);\n        }\n\n        //if window is not defined, define it\n        if (!window) {\n            const window = {};\n        }\n\n        //assume that the Google Analytics script is already loaded\n        this.googleAnalytics = new _services_google_analytics_mjs__WEBPACK_IMPORTED_MODULE_7__[\"default\"](window);\n\n        this.initialize();\n    }\n\n\n    initialize() {\n        //set up loader\n        this.loader = new _loader_mjs__WEBPACK_IMPORTED_MODULE_3__[\"default\"](`.${this.getSelector()} .${this.prefixClass}-loader-wrapper`);\n        this.contractorConsentPrompt = new _prompt_contractor_consent_mjs__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this);\n        this.countriesCodes = new _services_country_codes_mjs__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\n        this.setSelectedDivision(this.options.bookingFormDivisionId);\n        this.setSelectedServices(this.options.bookingFormServiceIds);\n\n\n        if (this.options.enable_popup === '1') {\n\n            if (document.querySelector('html').hasAttribute('class')\n                && document.querySelector('html').getAttribute('class').indexOf('avia-') > -1) {\n                //move formElement to the end of the body\n                document.body.appendChild(this.formElement);\n            } else {\n                //append the formElement to the start of the body\n                document.body.insertBefore(this.formElement, document.body.firstChild);\n            }\n\n            this.listenForPopup();\n        }\n\n        this.navButtons = {\n            prev: this.formElement.querySelector(`.${this.prefixClass}-button--prev`),\n            next: this.formElement.querySelector(`.${this.prefixClass}-button--next`),\n            submit: this.formElement.querySelector(`.${this.prefixClass}-button--submit`)\n        }\n\n        //load steps\n        this.loadSteps();\n\n        //set up default loader message\n        // this.formElement.querySelector('.loader-message').innerHTML = this.messages.services_loading;\n        this.contractorConsentPrompt.init();\n        if(this.formElement.querySelector('.loader-message').innerHTML.length === 0){\n            this.setFormNotification(this.messages.loading);\n        }\n\n        this.onContractorConsent = new CustomEvent('prompt-contractor-consent', {\n            bubbles: true,\n            detail: {\n                field: null,\n                status: false,\n            }\n        });\n\n        this.servicesLoadedEvent = new CustomEvent('jims-wpcb-services-loaded', {\n            bubbles: true,\n        });\n\n        // Important Note: the order of these functions is important\n        // for example setupProgress must be called first\n        // then setupAddressAutocomplete\n        // then setupCountries\n        // this is because setupCountries depends on Autocomplete\n        this.setupProgress();\n        this.setupPhone();\n\n\n        //add event listeners\n        this.setupEvents();\n        this.calculateDeviceHeight();\n    }\n\n    removeURLHash() {\n        window.location.hash = '';\n    }\n\n    listenForPopup() {\n        let hash = window.location.hash;\n\n        if (hash === '#jims') {\n            //open the popup\n            this.formElement.querySelector(`.${this.prefixClass}-popup-container`).classList.add('open');\n        }\n\n        //listen for hash change\n        window.addEventListener('hashchange', (evt) => {\n            if (window.location.hash === '#jims') {\n                this.formElement.querySelector(`.${this.prefixClass}-popup-container`).classList.add('open');\n\n                //remove hash\n                history.pushState(\"\", document.title, window.location.pathname + window.location.search);\n            }\n        });\n\n        //listen for close button\n        this.formElement.querySelector(`.${this.prefixClass}-popup-close`).addEventListener('click', (evt) => {\n            evt.preventDefault();\n\n            this.revertDocumentOverflow();\n            this.revertBodyOverflow();\n\n            this.formElement.querySelector(`.${this.prefixClass}-popup-container`).classList.remove('open');\n\n            //remove hash\n            history.pushState(\"\", document.title, window.location.pathname + window.location.search);\n        });\n    }\n\n    openPopup() {\n        this.setDocumentOverflow('hidden');\n        this.setBodyOverflow('hidden');\n\n        this.formElement.querySelector(`.${this.prefixClass}-popup-container`).classList.add('open');\n        //remove hash\n        history.pushState(\"\", document.title, window.location.pathname + window.location.search);\n    }\n\n    setDocumentOverflow(overflow) {\n        this.deviceState.documentOverflow = false;\n\n        if (document.documentElement.style.overflow !== '') {\n            this.deviceState.documentOverflow = document.documentElement.style.overflow;\n        }\n\n        document.documentElement.style.overflow = overflow;\n    }\n\n    revertDocumentOverflow() {\n        if (this.deviceState.documentOverflow !== false) {\n            document.documentElement.style.overflow = this.deviceState.documentOverflow;\n        } else {\n            document.documentElement.style.overflow = '';\n        }\n    }\n\n    setBodyOverflow(overflow) {\n        this.deviceState.bodyOverflow = false;\n\n        if (document.body.style.overflow !== '') {\n            this.deviceState.bodyOverflow = document.body.style.overflow;\n        }\n        document.body.style.overflow = overflow;\n    }\n\n    revertBodyOverflow() {\n        if (this.deviceState.bodyOverflow !== false) {\n            document.body.style.overflow = this.deviceState.bodyOverflow;\n        } else {\n            document.body.style.overflow = '';\n        }\n    }\n\n    getSelector() {\n        let classes = [];\n        for (let cssClass of this.formElement.classList.values()) {\n            classes.push(cssClass);\n        }\n\n        return classes.join('.');\n    }\n\n    applyOverrides(options, overrides) {\n        //clone option is important, in other case it overrides the wpcb variables\n        const overrideOptions = (0,chart_js_helpers__WEBPACK_IMPORTED_MODULE_8__.clone)(options);\n\n        if (overrides.division_id && (overrideOptions.bookingFormDivisionId !== overrides.division_id)) {\n            overrideOptions.bookingFormDivisionId = overrides.division_id;\n        }\n\n        if (overrides.service_ids) {\n            overrideOptions.bookingFormServiceIds = overrides.service_ids;\n        }\n\n        if(overrides.service_list){\n            overrideOptions.bookingFormServiceList = overrides.service_list;\n        }\n\n        if (overrides.country) {\n            overrideOptions.country = overrides.country;\n        }\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(overrideOptions, 'overrideOptions');\n\n        //delete properties from overrides\n        delete overrides.division_id;\n        delete overrides.service_ids;\n        delete overrides.service_list;\n\n        //apply rest of the overrides\n        for (const [key, value] of Object.entries(overrides)) {\n            overrideOptions[key] = value;\n        }\n\n        return overrideOptions;\n    }\n\n    /**\n     * Checks the rendered steps and initializes the js objects for steps, therefore\n     * the behavior of the steps. Then shows the first step.\n     */\n    loadSteps() {\n        const generator = new _booking_form_step_generator_mjs__WEBPACK_IMPORTED_MODULE_9__[\"default\"]();\n\n        //find all divs with class jims-wpcb-form-step\n        let steps = this.formElement.querySelectorAll(`.${this.prefixClass}__step`);\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('loading steps');\n\n        if(steps.length === 0){\n            throw new Error('No steps found');\n        }\n\n        steps.forEach((step, index) => {\n            if (step.dataset.name && step.dataset.name.length > 0) {\n                this.steps[step.dataset.name] = generator.createStep(step.dataset.name, step, this);\n            }\n        });\n\n        if (this.options.bookingFormServiceIds && this.options.bookingFormServiceIds.length > 0) {\n            const lastStep = Object.values(this.steps)[Object.values(this.steps).length - 1];\n            lastStep.init();\n            lastStep.show();\n            this.loader.removeServiceLoader();\n        }else {\n            //show the first step\n            const firstStep = Object.values(this.steps)[0];\n\n            //initialize the first step\n            firstStep.init();\n\n            //removes the hidden class from the first step and calculates the status of the next button\n            firstStep.show();\n        }\n    }\n\n    calculateDeviceHeight() {\n        let wrapper = this.formElement.querySelector('.jims-wpcb-form__wrapper');\n\n        if (this.deviceState.formHeight === undefined) {\n            this.deviceState.formHeight = wrapper.getBoundingClientRect().height;\n        }\n\n        let rect = wrapper.getBoundingClientRect();\n\n        //detect orientation\n        let orientation = window.matchMedia(\"(orientation: portrait)\");\n\n        if (orientation.matches && window.innerWidth < 768) {\n            wrapper.style.maxHeight = `${window.innerHeight - rect.y}px`;\n        } else {\n            wrapper.style.maxHeight = `inherit`;\n        }\n    }\n\n    /**\n     * Sets up the phone number\n     */\n    setupPhone() {\n        const phoneElement = this.formElement.querySelector('.title-container .phone');\n        const notificationPhoneElement = this.formElement.querySelector('.call-us');\n        const data = ['href', `tel:${this.options.phone}`.trim().replace(/\\s/g, '')];\n\n        phoneElement.parentElement.setAttribute(...data);\n        notificationPhoneElement.setAttribute(...data);\n\n        notificationPhoneElement.querySelector('span.phone').innerHTML = this.options.phone;\n        phoneElement.innerHTML = this.options.phone;\n    }\n\n    setSelectedServices(services) {\n        this.selected.services = services;\n    }\n\n    getSelectedServices() {\n        return this.selected.services;\n    }\n\n    /**\n     * @param serviceIds\n     * @returns {Promise<*>}\n     */\n    async getSelectedServicesObjectList(serviceIds = []) {\n          if(this.options.bookingFormServiceIds.length > 0){\n            const jimsServices = new _services_jims_services_mjs__WEBPACK_IMPORTED_MODULE_16__[\"default\"](this.options.rest_url, this.options.bookingFormDivisionId, this.options.country);\n\n            //returns the services ungrouped\n            return await jimsServices.getServiceList().then((response) => {\n                let services = [];\n\n                if(Object.keys(response).length > 0){\n                    Object.values(response).forEach((service) => {\n\n                        if (serviceIds.length > 0 && !serviceIds.includes(service.id)) {\n                            return;\n                        }\n\n                        services.push( new _service_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"](service.friendly_name, service.id, service?.description, false) );\n                    });\n                }\n\n                //check if there are services outside the selected list\n                if(serviceIds.length > 0 && services.length === 0){\n                    _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('There are services outside the selected list, please use the corrrect list to display the name of the service.');\n                   serviceIds.forEach((id) => {\n                       services.push(new _service_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Custom Service', id, '', false));\n                   });\n                }\n\n                return services;\n            });\n        }\n\n        return this.steps.services.services;\n    }\n\n    setSelectedDivision(division) {\n        this.selected.division = parseInt(division);\n    }\n\n    getSelectedDivision() {\n        return this.selected.division;\n    }\n\n    getFieldType(field) {\n        if (field.nodeName === 'TEXTAREA') {\n            return 'textarea';\n        }\n\n        if (field.nodeName === 'SELECT') {\n            return 'select';\n        }\n\n        return field.type;\n    }\n\n    googleAutocompleteIsVisible() {\n        if (document.querySelector('.pac-container') !== null) {\n            //check if pac-container has style display none\n            return document.querySelector('.pac-container').style.display !== 'none';\n        }\n    }\n\n    googleAutoCompleteActive() {\n        return document.querySelector('.pac-container') !== null;\n    }\n\n\n    reset(resetForm = true, skipFields = []) {\n\n        if(resetForm){\n            let savedFields= {};\n\n            //remove touched class from all fields\n            this.formElement.querySelectorAll('.touched').forEach((field) => {\n                savedFields[field.name] = field.value;\n                field.classList.remove('touched');\n            });\n\n            this.formElement.querySelector('form').reset();\n\n            //restore saved fields\n            Object.keys(savedFields).forEach((name) => {\n                if(skipFields.includes(name)) {\n                    let field = this.formElement.querySelector(`[name=\"${name}\"]`);\n                    field.value = savedFields[name];\n                    field.classList.add('touched');\n                }\n            });\n        }\n\n        this.formElement.querySelector('.jims-wpcb-loader-wrapper').classList.remove('open', 'success', 'error');\n        // this.navButtons.submit.classList.add('disabled');\n        this.resetNotification();\n        this.usedJimsBefore = false;\n    }\n\n    /**\n     *\n     * @param status\n     * @param requiredFields\n     * @returns {boolean}\n     */\n    isDirty() {\n        //filter formFieldValidationStatus for false values\n        let dirtyFields = Object.values(this.formFieldValidationStatus).filter((value) => {\n            return value === false;\n        });\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info( 'Dirty Check', dirtyFields, this.formElement.querySelectorAll('.touched').length, this.requiredFields.length);\n\n        return (dirtyFields.length > 0) || !(this.formElement.querySelectorAll('.touched').length === this.requiredFields.length);\n    }\n\n    /**\n     *\n     */\n    setupEvents() {\n\n        this.navButtons.submit.addEventListener('click', (evt) => {\n            evt.preventDefault();\n            this.formElement.querySelector('form').dispatchEvent(new Event('submit', {\n                cancelable: true,\n                bubbles: true\n            }));\n\n            return false;\n        });\n\n        this.formElement.querySelector('.try-again').addEventListener('click', (evt) => {\n            evt.preventDefault();\n            this.reset(true, ['firstname', 'lastname', 'email', 'phone']);\n\n            this.formElement.querySelector('form').dispatchEvent(new Event('change', {\n                cancelable: true,\n                bubbles: true\n            }));\n\n            return false;\n        });\n\n        //Resets the form and clears all fields\n        this.formElement.querySelector('.booking-action.new').addEventListener('click', (evt) => {\n            this.reset();\n        });\n\n        this.formElement.querySelector('.used-before').addEventListener('click', (evt) => {\n            if (evt.target.classList.contains('yes')) {\n                this.usedJimsBefore = true;\n            }\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('used before', this.usedJimsBefore);\n            this.loader.modifyClass(['used'], 'remove');\n            if (this.previous_response.fms_data.hasOwnProperty('payload') && this.usedJimsBefore === false) {\n                let selectedFSE = this.findAvailableFSEorContractor(this.previous_response.fms_data.payload.avaliableFSEs, [\n                    {\n                        key: 'only_available_previous_client',\n                        value: false\n                    }\n                ]);\n\n                _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('selectedFSE', selectedFSE);\n\n                if(selectedFSE !== null && selectedFSE.isContractor()) {\n                    this.openContractorPrompt(this.contractorConsentPrompt, selectedFSE);\n                    return;\n                }\n            }\n\n            // this.loader.classList.remove('used');\n            this.setFormNotification(this.messages.submitting);\n\n            //and run processFormStep1\n            this.processFormStep1(this.previous_response, this._fields, this.usedJimsBefore).then((response) => {\n                this.processFormDirect(response);\n            }).catch((error) => {\n                _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(error, 'processformstep1');\n                this.setErrorMessageNotification(error);\n            });\n        });\n\n        //Submit form\n        this.formElement.querySelector('form').addEventListener('submit', (evt) => {\n            evt.preventDefault();\n            this.googleAnalytics.sendEvent('form', 'submit', 'booking-submit', 1)\n\n            this.validateAndSubmitForm();\n            return false;\n        });\n\n        //Live validation event\n        this.formElement.addEventListener('jims-wpcb-form-field-validation', (evt) => {\n            this.dirty = this.isDirty();\n            // if (!this.dirty) {\n            //     this.navButtons.submit.classList.remove('disabled');\n            // } else {\n            //     this.navButtons.submit.classList.add('disabled');\n            // }\n\n            Object.keys(this.formFieldValidationStatus).forEach((name) => {\n                let field = this.formElement.querySelector(`[name=\"${name}\"]`);\n                if (this.formFieldValidationStatus[name]) {\n                    field.classList.remove('error');\n                } else {\n                    field.classList.add('error');\n                }\n            });\n        });\n\n        this.formElement.addEventListener('jims-wpcb-services-loaded', () => {\n            this.loader.removeServiceLoader();\n        });\n\n        this.formElement.addEventListener('prompt-contractor-consent', this.handlePromptContractorConsent.bind(this));\n\n        //Update selected services\n        // this.formElement.addEventListener('change', (evt) => {\n        //     this.loadSelectedServices();\n        // });\n\n        this.navButtons.prev.addEventListener('click', (evt) => {\n            this.prevStep();\n        });\n\n        this.navButtons.next.addEventListener('click', (evt) => {\n            this.nextStep();\n        });\n\n        this.formElement.querySelector('.try-again').addEventListener('mouseup', (evt) => {\n            this.loader.removeError();\n            this.usedJimsBefore = false;\n            this.contractorPopupActivated = false;\n        });\n\n\n        //Tooltip\n        this.formElement.querySelectorAll('.certification').forEach((cert_item) => {\n            //cert item on mouseup open and focus tooltip\n            cert_item.addEventListener('mouseup', (evt) => {\n                let tooltip = cert_item.querySelector('.tooltip');\n                tooltip.classList.add('open');\n                tooltip.focus();\n            });\n\n            //cert item on focusout close tooltip\n            cert_item.querySelector('.tooltip').addEventListener('focusout', (evt) => {\n                cert_item.querySelector('.tooltip').classList.remove('open');\n            });\n        });\n\n        if (window !== undefined) {\n            window.addEventListener('resize', (evt) => {\n                //recalculate form wrapper height\n                this.calculateDeviceHeight();\n\n\n                let rect = this.formElement.getBoundingClientRect();\n                //if form is visible on the screen scroll to the top of the form\n                if (rect.top < 0 && rect.bottom >= window.scrollY) {\n                    //scroll to the top of the form\n                    this.formElement.scrollIntoView({behavior: \"instant\", block: \"start\", inline: \"start\"});\n                }\n            });\n        }\n    }\n\n    validateAndSubmitForm() {\n        if (!this.dirty) {\n            this.processForm();\n        } else {\n            this.highlightInvalidFields();\n        }\n    }\n\n    highlightInvalidFields(){\n        //get all fields\n        let fields = this.formElement.querySelectorAll(`.${this.prefixClass}__step__client_information__details input, .${this.prefixClass}__step__client_information textarea`);\n        let firstWithError = null;\n\n        Object.values(fields).forEach((field, index) => {\n            let fieldsHasInvalidValue = (Object.keys(this.formFieldValidationStatus).includes(field.name) === true && this.formFieldValidationStatus[field.name] === false);\n            let isRequired = field.hasAttribute('required') && field.value.length === 0;\n\n            if(isRequired || fieldsHasInvalidValue){\n                field.classList.add('error');\n\n                if(firstWithError === null){\n                    firstWithError = field;\n                }\n\n            } else {\n                field.classList.remove('error');\n            }\n        });\n\n        if(firstWithError !== null){\n            firstWithError.focus();\n        }\n    }\n\n    /**\n     * Runs on form submission\n     * @returns void\n     */\n    processForm() {\n        this.setFormNotification(this.messages.search);\n\n\n        this.formElement.querySelector('.jims-wpcb-loader-wrapper').classList.add('open');\n        const form = this.formElement.querySelector('form');\n        //firstname, lastname, email, phone, address, comments, businessName, services\n        //get all required fields from form\n        let addressString = form.querySelector('input[name=\"address\"]').value;\n        let countryCode = form.querySelector('select[name=\"country\"]').value;\n        let selectedServices = this.getSelectedServices();\n        let contractorPrompt = this.contractorConsentPrompt;\n\n        //reset the sendUnservicedLead flag\n        this.sendUnservicedLead = false;\n\n        this.getAddressObject(addressString, countryCode).then((addressObject) => {\n            const googleValidator = new _services_google_address_validation_mjs__WEBPACK_IMPORTED_MODULE_11__[\"default\"](this.options.google_api_key);\n\n            //fix address formatting issues\n            addressObject = googleValidator.getStreetNumber(addressObject);\n            addressObject.full_address = googleValidator.formatAddress(addressObject);\n\n            const fields = this.getRequestFields(form, addressObject, selectedServices);\n            this.BookingRequest = new _types_booking_request_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](fields.firstname, fields.lastname, fields.email, fields.phone, fields.address, fields.comments, fields.services);\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(fields, _types_booking_request_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n            //Send request to create booking: allocation step\n            this.send(this.endpoints.create.step1, fields).then((response) => {\n                _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(response);\n\n                //if the server returns a step\n                if (response.status === 'step') {\n                    this._fields = fields;\n                    this.previous_response = response;\n                    _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('step 1', response);\n\n\n                    //check if response.fmsData has property 'previousFSEId', which means the user probably has used Jims before\n                    if (response.fms_data.payload.hasOwnProperty('previousFSEId') && response.fms_data.payload.previousFSEId > 0) {\n                        //prompt question\n                        //on answer update form message to 'Submitting your request...'\n                        this.openPromptUsedJimsBefore();\n                    } else {\n\n                        let selectedFSE = this.findAvailableFSEorContractor(response.fms_data.payload.avaliableFSEs, [\n                            {\n                                key: 'only_available_previous_client',\n                                value: false\n                            }\n                        ]);\n\n                        //check if is a contractor\n                        if (selectedFSE !== null && selectedFSE.isContractor()) {\n                            // this.loader.classList.remove('used');\n                            this.setFormNotification(this.messages.submitting);\n                            this.openContractorPrompt(contractorPrompt, selectedFSE);\n                            return;\n                        }\n\n                        //if the response does not have property 'previousFSEId' and the server respond with multiple available FSEs, proceed to step 2\n                        this.processFormStep2(response, fields, false).then((response_alloc) => {\n                            this.processFormDirect(response_alloc);\n                        }).catch((error) => {\n                            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(error, 'processformstep2');\n                            this.setErrorMessageNotification(error);\n                        });\n                    }\n                } else {\n                    //if there is a direct booking from the allocation request\n                    this.processFormDirect(response);\n                }\n\n            }).catch((error) => {\n                _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(error, 'processform');\n                this.setErrorMessageNotification(error);\n            });\n        });\n    }\n\n    /**\n     * Opens the prompt for the user to accept if he/she wants to\n     * transfer contact details to a contractor\n     */\n    openContractorPrompt(contractorPrompt, selectedFSE) {\n\n        if(selectedFSE === null) {\n            this.setErrorMessageNotification({statusText: 'No available contractor'});\n            return;\n        }\n\n        if(selectedFSE.isContractor()) {\n            contractorPrompt.open();\n            contractorPrompt.setName(selectedFSE.display_name);\n            contractorPrompt.showCompanyName(selectedFSE.company_name);\n            contractorPrompt.setRating(selectedFSE.star_rating);\n            contractorPrompt.setPhoto(selectedFSE);\n\n\n            //set labels for the prompt\n            contractorPrompt.setLabels({\n                'contractor': selectedFSE.display_name\n            });\n        }\n    }\n\n    /**\n     * This step is normal procedure if no previousFSEId is found\n     */\n    processFormStep2(response, fields, used_jims_before) {\n        let error = {\n            statusText: _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"][\"default\"],\n        }\n\n        let data = response;\n        if (data.hasOwnProperty('fms_data')) {\n            data = Array.isArray(response.fms_data) ? response.fms_data[response.fms_data.length - 1] : response.fms_data;\n        }\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('process 1, step 2 ', used_jims_before);\n\n        if (data.result === false && (data.bookingConfirmCode > 0 && data.bookingConfirmCode <= 9)) {\n            error.statusText = _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fms_errors[data.bookingConfirmCode];\n        }\n\n        if (data.payload.hasOwnProperty('avaliableFSEs') && data.payload.avaliableFSEs.length > 0) {\n            let selectedFSE = response.fms_data.payload.avaliableFSEs[0];\n            return this.send(this.endpoints.create.step2, this.getFinalRequestFields(fields, response, selectedFSE, used_jims_before));\n        }\n\n        return new Promise((resolve, reject) => {\n            reject(error);\n        });\n    }\n\n    /**\n     *\n     * @param response\n     * @param fields\n     * @param used_jims_before\n     * @return {Promise<*>}\n     */\n    processFormStep1(response, fields, used_jims_before) {\n        if (!response.fms_data.hasOwnProperty('payload')) return;\n\n        let selectedFSE = null;\n        let unavailableFSE = false;\n        let payload = response.fms_data.payload;\n        let availableFSEs = payload.avaliableFSEs;\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(payload.hasOwnProperty('previousFSEId'), payload.previousFSEId > 0, used_jims_before === false, availableFSEs.length > 1);\n\n        if (payload.hasOwnProperty('previousFSEId') && payload.previousFSEId > 0 && used_jims_before === false) {\n\n            //check if availableFSEs has only one item and that item has only_available_previous_client === true\n            if (availableFSEs.length === 1 && availableFSEs[0].only_available_previous_client === true) {\n                unavailableFSE = true;\n                this.sendUnservicedLead = true;\n            }\n\n            if(availableFSEs.length > 1) {\n                availableFSEs = availableFSEs.filter((fse) => {\n                    return fse.only_available_previous_client === false;\n                });\n            }\n\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(availableFSEs);\n        }\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(payload);\n\n        //check if response.fmsData has property 'previousFSEId'\n        if (used_jims_before && payload.hasOwnProperty('previousFSEId') && unavailableFSE === false) {\n            //if yes, check if the previousFSEId exists in the response.fmsData.availableFSEs array of objects as object.business_id\n            let previousFSEId = payload.previousFSEId;\n\n            availableFSEs.forEach((fse) => {\n                if (fse.business_id === previousFSEId) {\n                    selectedFSE = fse;\n                }\n            });\n        }\n\n        if (selectedFSE === null) {\n            selectedFSE = availableFSEs[0];\n        }\n\n        if (this.sendUnservicedLead === true) {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('sending unserviced lead');\n            selectedFSE = null;\n        }\n\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(selectedFSE);\n\n        //$booking_request_id, $provider, $provider_id, confirmCodes\n        //run the second step\n        return this.send(this.endpoints.create.step2, this.getFinalRequestFields(fields, response, selectedFSE, used_jims_before));\n    }\n\n    /**\n     * Classic form submission, without any steps and prompts\n     * @param response\n     */\n    processFormDirect(response) {\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(response);\n        if (response.status === 'success') {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('direct success', response);\n            this.formElement.querySelector('.jims-wpcb-loader-wrapper').classList.add('success');\n            this.setFseInfo(response);\n            this.googleAnalytics.sendEvent('form', 'booking', 'booking-success', 1)\n\n            if (this.options.use_redirect === '1') {\n                window.location.href = this.options.redirect_success_url;\n            } else {\n                this.setFormNotification(response.notification_message, 'success');\n            }\n        } else {\n            this.formElement.querySelector('.jims-wpcb-loader-wrapper').classList.add('error');\n\n            if ((response.fms_data !== undefined\n                    && Object.keys(response.fms_data).length > 1)\n                && this.contractorPopupActivated\n                && this.contractorConsentPrompt.getAnswer() !== true) {\n\n                //set error message the no provider available\n                // response.notification_message = ErrorMessage.fms_errors[1];\n                response.notification_message = _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fms_errors[3];\n            }\n\n            this.setErrorMessageNotificationForField('address', response);\n        }\n    }\n\n    /**\n     * Updates the error message notification\n     * if there is a custom message on js frontend\n     * @param fieldType string\n     */\n    setErrorMessageNotificationForField(fieldType, response) {\n        let message = response.notification_message;\n\n        if (response.fms_data.hasOwnProperty('errors') && response.fms_data.errors.hasOwnProperty(fieldType)) {\n            message = _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasOwnProperty(fieldType) ? _services_error_message_mjs__WEBPACK_IMPORTED_MODULE_5__[\"default\"][fieldType] : message;\n        }\n\n        this.setFormNotification(message, 'error');\n    }\n\n    setErrorMessageNotification(error) {\n        this.formElement.querySelector('.jims-wpcb-loader-wrapper').classList.add('error');\n        this.setFormNotification(error.statusText, 'error');\n    }\n\n    setFormNotification(message) {\n        let notificationElement = this.formElement.querySelector('.loader-message');\n        notificationElement.innerHTML = message;\n    }\n\n    setStepTitle(title) {\n        //.jims-wpcb-select-service-title\n        let titleElement = this.formElement.querySelector(`.${this.prefixClass}-select-service-title`);\n        titleElement.innerHTML = title;\n    }\n\n    setStepTitleVisibility(isVisible) {\n        //.jims-wpcb-select-service-title\n        let titleElement = this.formElement.querySelector(`.${this.prefixClass}-select-service-title`);\n        if (isVisible === false) {\n            titleElement.style.display = 'none';\n        } else {\n            titleElement.style.display = 'block';\n        }\n    }\n\n    /**\n     * Opens the prompt for Used Jims Before\n     */\n    openPromptUsedJimsBefore() {\n        // this.loader.classList.add('open', 'used');\n        this.loader.modifyClass(['open', 'used'], 'add');\n    }\n\n    /**\n     * Handles the prompt answer for contractor consent\n     * @param answer\n     * @param status\n     */\n    handlePromptContractorConsent(evt) {\n        if (this.contractorConsentPrompt === null) {\n            throw new Error('Contractor Consent Prompt is not defined');\n        }\n        this.contractorPopupActivated = true;\n        this.setFormNotification(this.messages.submitting);\n\n        if (this.contractorConsentPrompt.getAnswer() !== true) {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('contractor consent declined');\n            this.sendUnservicedLead = true;\n        }\n\n        this.processFormStep1(this.previous_response, this._fields, false).then((response) => {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('contractor consent', response);\n            this.processFormDirect(response);\n        }).catch((error) => {\n            _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info(error, 'contractor consent');\n            this.setErrorMessageNotification(error);\n        });\n    }\n\n    resetNotification() {\n        let notificationElement = this.formElement.querySelector('.loader-message');\n        notificationElement.innerHTML = this.messages.search;\n    }\n\n    /**\n     * Gets the full place object from google\n     * @param address\n     * @param countryCode\n     * @returns {Promise<unknown>}\n     */\n    getAddressObject(address, countryCode = 'AU') {\n        let http = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.options.rest_url);\n        return http.post(this.endpoints.details, {'address': address, 'countryCode': countryCode}).then((response) => {\n\n            let result = response;\n            if (response !== null) {\n\n                /* check if has full_address property\n                and if not check if its an array\n                and if yes, check if the first item has full_address property\n                and reassign it to response */\n\n                if (response.hasOwnProperty('full_address')) {\n                    result = response;\n                } else if (Array.isArray(response) && response.length > 0 && response[0].hasOwnProperty('full_address')) {\n                    result = response[0];\n                }\n\n                //replace country name with country code\n                this.countries.forEach((country) => {\n                    if (result['country'] === country.name) {\n                        result['country'] = country.symbol;\n                    }\n                });\n            }\n\n            return result;\n        });\n    }\n\n    /**\n     *\n     * @param stepInputIsValid {boolean}\n     * @param isLastStep {boolean}\n     * @return {boolean}\n     */\n    isNextButtonDisabled() {\n       return this.navButtons.next.disabled === true;\n    }\n\n    setNextButtonState(hasNextStep, hide = false) {\n        if (hasNextStep) {\n            hide ? this.navButtons.next.disabled = false : null;\n            this.navButtons.next.classList.remove('disabled');\n        } else {\n            hide ? this.navButtons.next.disabled = true : null;\n            this.navButtons.next.classList.add('disabled');\n        }\n    }\n\n    setPreviousButtonState(hasPreviousStep, hide = false) {\n        if (hasPreviousStep) {\n            hide ? this.navButtons.prev.disabled = false : null;\n            this.navButtons.prev.classList.remove('disabled');\n        } else {\n            hide ? this.navButtons.prev.disabled = true : null;\n            this.navButtons.prev.classList.add('disabled');\n        }\n    }\n\n    setSubmitButtonVisibility(isSubmitButtonVisible) {\n        if (isSubmitButtonVisible === false) {\n            this.navButtons.submit.classList.add('hidden');\n        } else {\n            this.navButtons.submit.classList.remove('hidden');\n        }\n    }\n\n    setSubmitButtonState(isSubmitButtonDisabled) {\n        if (isSubmitButtonDisabled) {\n            this.navButtons.submit.classList.add('disabled');\n        } else {\n            this.navButtons.submit.classList.remove('disabled');\n        }\n    }\n\n    setFsePhoto(fseData) {\n        const provider = new _types_fms_provider_mjs__WEBPACK_IMPORTED_MODULE_14__[\"default\"](fseData, {\n            siteUrl: this.options.rest_url,\n        });\n\n        provider.setPhoto('.fse-photo img');\n    }\n\n    setSuccessVideo(isJimsFse) {\n        let videoURL = 'https://www.youtube.com/embed/jclpE6EFdBk';\n\n        if (isJimsFse) {\n            videoURL = 'https://www.youtube.com/embed/cUNrjZx0n3M';\n        }\n\n        this.formElement.querySelector('.success-video iframe').setAttribute('src', videoURL);\n    }\n\n    /**\n     * Returns a franchisee object\n     * @param availableFseList\n     * @param filters array\n     * @returns {Franchisee|null}\n     */\n    findAvailableFSEorContractor(availableFseList, filters = []){\n\n        if(availableFseList === undefined ) {\n            return null;\n        }\n\n        if (!Array.isArray(availableFseList) || availableFseList.length === 0 ) {\n            return null;\n        }\n\n        if(availableFseList.length > 1 && filters.length > 0) {\n\n            availableFseList = availableFseList.filter((fse) => {\n                let valid = [];\n                filters.forEach(filter => {\n                    valid.push(fse[filter.key] === filter.value);\n                });\n\n                return valid.indexOf(false) === -1;\n            });\n        }\n\n        return availableFseList.length > 0 ? new _types_franchisee_mjs__WEBPACK_IMPORTED_MODULE_15__[\"default\"](availableFseList[0]) : null;\n    }\n\n    setFseInfo(response) {\n        let fseData = null;\n        //check if fms_data is array\n        if (Array.isArray(response.fms_data)) {\n            fseData = response.fms_data[fms_data.length - 1].payload.bookedProvider;\n        } else {\n            fseData = response.fms_data.payload.bookedProvider;\n        }\n\n        this.setFsePhoto(fseData);\n        this.setSuccessVideo(fseData.is_jims_franchisee);\n\n        this.formElement.querySelector(`.${this.prefixClass}-success-fse .fse-name`).innerText = fseData.display_name;\n\n        if (fseData.is_jims_franchisee === false) {\n            this.formElement.querySelectorAll(`.${this.prefixClass}-success-fse .ttl .provider-type`).forEach((providerTypeReference) => {\n                providerTypeReference.innerText = 'Contractor';\n            });\n\n\n            if (!!fseData.pl_insurance) {\n                this.formElement.querySelector('.public-liability-amount').innerText = this.formatCurrency(fseData.pl_insurance, true);\n            } else {\n                this.formElement.querySelector('.public-liability').classList.add('hidden');\n            }\n        }\n\n        if (!fseData.is_police_checked && fseData.is_jims_franchisee === false) {\n            this.formElement.querySelector('.police-checked').classList.add('hidden');\n        }\n\n        if (!fseData.is_gold_contractor) {\n            this.formElement.querySelector('.gold-contractor').classList.add('hidden');\n        }\n\n        this.setFSECallBackMessage(fseData);\n        this.setFSEWorkGuarantee(fseData);\n        this.setFSERatingStars(fseData, 3);\n    }\n\n    /**\n     *\n     * @param amount\n     * @param removeDecimal\n     * @return {*|string}\n     */\n    formatCurrency(amount, removeDecimal = false) {\n        if (isNaN(amount)) return amount;\n\n        let AUDollar = new Intl.NumberFormat('en-US', {\n            style: 'currency',\n            currency: 'AUD',\n        });\n\n        if (removeDecimal) {\n            //search for the dot, and remove all characters after it\n            amount = parseInt(`${amount}`.split('.')[0]);\n        }\n\n        return AUDollar.format(amount).replace(/[A-z]{1,2}\\$/, '$');\n    }\n\n    setFSECallBackMessage(fseData) {\n        //set callback message\n        let callbackMessage = fseData.call_back_message;\n\n        // find the word will and remove all characters before it\n        let willIndex = callbackMessage.indexOf('will');\n        callbackMessage = callbackMessage.substring(willIndex);\n\n        //make the first letter uppercase\n        callbackMessage = callbackMessage.charAt(0).toUpperCase() + callbackMessage.slice(1);\n\n        this.formElement.querySelector('.eta_phone').innerText = callbackMessage;\n    }\n\n    setFSEWorkGuarantee(fseData) {\n        let isJimsFse = fseData.is_jims_franchisee;\n        let tooltip = this.formElement.querySelector('.work-guarantee-tooltip');\n        let contractorTooltipHTML = `A Bizza work guarantee to the value of $200 covers this contractor for workmanship errors and/or accidents.<br/><br/>Check individual contractors to see if they also offer their own work guarantee.<br/><br/>Contact Bizza for more info. `;\n\n        fseData.is_work_guaranteed = isJimsFse ? true : fseData.is_work_guaranteed;\n\n        if (!fseData.is_work_guaranteed) {\n            this.formElement.querySelector('.work-guarantee').classList.add('hidden');\n        }\n\n        this.formElement.querySelector('.work-guarantee-amount').innerText = isJimsFse ? '$1,000,000' : '$200';\n\n        tooltip.innerHTML = isJimsFse ? tooltip.innerHTML : contractorTooltipHTML;\n    }\n\n    setFSERatingStars(fseData, startMinToShow = 3) {\n        let rating = fseData.star_rating;\n\n        if ((rating == 0 || rating === null || rating === undefined) || (!isNaN(rating) && rating < startMinToShow)) {\n            Object.values(this.formElement.querySelectorAll('.rating')).forEach((ratingContainer) => {\n                ratingContainer.classList.add('hidden');\n            });\n            return;\n        } else {\n            Object.values(this.formElement.querySelectorAll('.rating')).forEach((ratingContainer) => {\n                ratingContainer.classList.remove('hidden');\n            });\n        }\n\n        let ratingNumber = Number(rating);\n\n        let ratingTextElements = this.formElement.querySelectorAll(`.${this.prefixClass}-success-fse__code .rating .rating-count`);\n\n        Object.values(ratingTextElements).forEach((ratingTextElement) => {\n            ratingTextElement.innerText = ratingNumber.toFixed(1);\n        });\n\n        this.updateRatingStars(Math.round(rating.toFixed(1)));\n    }\n\n    updateRatingStars(rating) {\n        let ratingStars = this.formElement.querySelectorAll('.jims-wpcb-success-fse .rating-stars');\n\n        Object.values(ratingStars).forEach((ratingStarContainer) => {\n            let stars = ratingStarContainer.querySelectorAll('.star');\n            if (stars.length === 0) return;\n\n            for (let i = 0; i < rating; i++) {\n                if (i < rating) {\n                    stars[i].classList.add('active');\n                } else {\n                    stars[i].classList.remove('active');\n                }\n            }\n        });\n    }\n\n    /**\n     * Manages progress, steps, and navigation\n     * @returns {number}\n     */\n    setProgress() {\n        this.googleAnalytics.sendEvent('form', 'step', 'booking-step', this.currentStep + 1);\n\n        //get progress bars\n        let progressBars = this.formElement.querySelectorAll('.jims-wpcb-progress.progress div.step');\n\n        //remove hidden class for progress bars with index less than current step\n        for (let i = 0; i < progressBars.length; i++) {\n            if (i < this.currentStep + 1) {\n                progressBars[i].classList.remove('hidden');\n            } else {\n                progressBars[i].classList.add('hidden');\n            }\n        }\n    }\n\n    /**\n     * Create divs inside the progress bar for each step\n     */\n    setupProgress() {\n        //set progress\n        this.setProgress();\n    }\n\n    setBookingRequest() {\n        this.bookingRequest = new _types_booking_request_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](data.firstname, data.lastname, data.email, data.phone, data.address, data.comments, data.businessName);\n    }\n\n    setCurrentStep(step) {\n        this.currentStep = step;\n    }\n\n    /**\n     * Submit form\n     */\n    nextStep() {\n        //count steps\n        let steps = Object.values(this.steps);\n        let currentStep = this.currentStep;\n\n        //set next step\n        this.setCurrentStep(this.currentStep + 1);\n\n        //if current step is less than total steps\n        if (currentStep < steps.length) {\n            //hide current step\n            if (steps[currentStep]) {\n                steps[currentStep].hide();\n            }\n\n            //show next step\n            if( steps[currentStep + 1]) {\n                steps[currentStep + 1].init();\n                steps[currentStep + 1].show();\n            }\n\n            this.setProgress();\n        }\n    }\n\n    /**\n     * Previous step\n     */\n    prevStep() {\n        //count steps\n        let steps = Object.values(this.steps);\n        let currentStep = this.currentStep;\n\n        //set previous step\n        this.setCurrentStep(this.currentStep - 1);\n\n        //if current step is greater than 1\n        if (currentStep > 0) {\n            //hide current step\n            steps[currentStep].hide();\n\n            //show previous step\n            if (steps[currentStep - 1]){\n                steps[currentStep - 1].show();\n            }\n\n            this.setProgress();\n        }\n    }\n\n\n    /**\n     *\n     * @param form\n     * @param addressObject\n     * @param selectedServices\n     * @return {{firstname: string | number | any, address, comments: string | number | any, phone: string | number | any, businessName: string | number | any, division_id: string | number | any, services, email: string | number | any, lastname: string | number | any}}\n     */\n    getRequestFields(form, addressObject, selectedServices) {\n        return {\n            firstname: form.querySelector('input[name=\"firstname\"]').value,\n            lastname: form.querySelector('input[name=\"lastname\"]').value,\n            email: form.querySelector('input[name=\"email\"]').value,\n            phone: form.querySelector('input[name=\"phone\"]').value,\n            address: addressObject,\n            comments: form.querySelector('textarea[name=\"comments\"]').value,\n            businessName: form.querySelector('input[name=\"businessName\"]').value,\n            services: selectedServices,\n            division_id: form.querySelector('input[name=\"division\"]').value\n        }\n    }\n\n    /**\n     *\n     * @param fields\n     * @param previous_response\n     * @param selectedFSE\n     * @param used_jims_before\n     * @return {*&{booking_id: *, previous_response: {result: boolean, payload: {avaliableFSEs: *[], confirmCodes: *, booking_request_id: *, provider_id: *}, message: string, returnType: number, statusCode: number}}}\n     */\n    getFinalRequestFields(fields, previous_response, selectedFSE, used_jims_before) {\n        let payload = previous_response.fms_data.payload;\n        let business_id = -1;\n\n        if (selectedFSE !== null) {\n            business_id = selectedFSE.business_id;\n        }\n\n        return {\n            ...fields,\n            'booking_id': previous_response.booking_id,\n            'used_jims_before': used_jims_before,\n            'is_contractor': this.contractorPopupActivated,\n            'previous_response': {\n                'result': true,\n                'message': \"\",\n                'statusCode': 0,\n                'returnType': 1,\n                'payload': {\n                    'booking_request_id': payload.bookingRequestId,\n                    'avaliableFSEs': [selectedFSE],\n                    'provider_id': business_id,\n                    'confirmCodes': payload.confirmCodes,\n                    'previousLeadId': payload.previousLeadId,\n                }\n            }\n        }\n    }\n\n    /**\n     *\n     * @param endpoint\n     * @param data\n     * @returns {Promise<unknown>}\n     */\n    send(endpoint, data) {\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_6__[\"default\"].info('request', data);\n        const http = new _HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.options.rest_url);\n\n        if (endpoint === this.endpoints.create.direct) {\n            endpoint = `${endpoint}?token=bypass`;\n        } else {\n            endpoint = `${endpoint}&token=bypass`;\n        }\n\n        return http.post(endpoint, data);\n    }\n\n    /**\n     * @returns {boolean}\n     * @returns {Element | SVGSymbolElement | SVGMetadataElement | SVGUseElement | SVGAnimateElement | SVGFEImageElement | SVGPathElement | SVGViewElement | SVGFEConvolveMatrixElement | SVGFECompositeElement | SVGEllipseElement | SVGFEOffsetElement | SVGTextElement | SVGDefsElement | SVGFETurbulenceElement | SVGImageElement | SVGFEFuncGElement | SVGMPathElement | SVGTSpanElement | SVGClipPathElement | SVGLinearGradientElement | SVGFEFuncRElement | SVGScriptElement | SVGFEColorMatrixElement | SVGFEComponentTransferElement | SVGStopElement | SVGMarkerElement | SVGFEMorphologyElement | SVGFEMergeElement | SVGFEPointLightElement | SVGForeignObjectElement | SVGFEDiffuseLightingElement | SVGStyleElement | SVGFEBlendElement | SVGCircleElement | SVGPolylineElement | SVGDescElement | SVGFESpecularLightingElement | SVGLineElement | SVGFESpotLightElement | SVGFETileElement | SVGPatternElement | SVGTitleElement | SVGSwitchElement | SVGRectElement | SVGFEDisplacementMapElement | SVGFEFuncAElement | SVGFEFuncBElement | SVGFEMergeNodeElement | SVGTextPathElement | SVGFEFloodElement | SVGMaskElement | SVGAElement | SVGAnimateTransformElement | SVGSetElement | SVGSVGElement | SVGAnimateMotionElement | SVGGElement | SVGFEDistantLightElement | SVGFEDropShadowElement | SVGRadialGradientElement | SVGFilterElement | SVGPolygonElement | SVGFEGaussianBlurElement | HTMLSelectElement | HTMLLegendElement | HTMLElement | HTMLTableCaptionElement | HTMLTextAreaElement | HTMLModElement | HTMLHRElement | HTMLOutputElement | HTMLEmbedElement | HTMLCanvasElement | HTMLScriptElement | HTMLInputElement | HTMLMetaElement | HTMLStyleElement | HTMLObjectElement | HTMLTemplateElement | HTMLBRElement | HTMLAudioElement | HTMLIFrameElement | HTMLMapElement | HTMLTableElement | HTMLAnchorElement | HTMLMenuElement | HTMLPictureElement | HTMLParagraphElement | HTMLTableCellElement | HTMLTableSectionElement | HTMLQuoteElement | HTMLProgressElement | HTMLLIElement | HTMLTableRowElement | HTMLSpanElement | HTMLTableColElement | HTMLOptGroupElement | HTMLDataElement | HTMLDListElement | HTMLFieldSetElement | HTMLSourceElement | HTMLBodyElement | HTMLDivElement | HTMLUListElement | HTMLDetailsElement | HTMLHtmlElement | HTMLAreaElement | HTMLPreElement | HTMLMeterElement | HTMLOptionElement | HTMLImageElement | HTMLLinkElement | HTMLHeadingElement | HTMLSlotElement | HTMLVideoElement | HTMLTitleElement | HTMLButtonElement | HTMLHeadElement | HTMLDialogElement | HTMLTrackElement | HTMLOListElement | HTMLDataListElement | HTMLLabelElement | HTMLFormElement | HTMLTimeElement | HTMLBaseElement}\n     */\n    hasServices() {\n        return this.formElement.querySelector('[name=\"services\"]:checked');\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingForm);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/booking-form.mjs?")},"./assets/src/js/components/division.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Created by Administrator on 2023/09/29.\n */\n\n/**\n * @class Division\n * @description\n * @property {number} id\n * @property {string} name\n * @property {string} friendlyName\n * @property {string} icon\n * @property {boolean} selected\n * @property {HTMLElement} HTMLElement\n */\nclass Division {\n\n    /**\n     * @type {number}\n     */\n    id = 0;\n\n    /**\n     * @type {string}\n     */\n    name = '';\n\n\n    /**\n     * @type {string}\n     */\n    friendlyName = '';\n\n    /**\n     * @type {string}\n     */\n    icon = '';\n\n    /**\n     * @type {string}\n     */\n    CSSClassPrefix = '';\n\n\n    /**\n     * @type {boolean}\n     */\n    #selected = false;\n\n    /**\n     * @type {HTMLElement}\n     */\n    HTMLElement = null;\n\n    /**\n     *\n     * @param id\n     * @param name\n     * @param friendlyName\n     * @param icon\n     * @param CSSClassPrefix\n     */\n    constructor(id, name, friendlyName, icon, CSSClassPrefix = '') {\n        this.id = id;\n        this.name = name;\n        this.friendlyName = name;\n        this.icon = icon;\n        this.mode = icon.length > 0 ? 'withIcon' : 'default';\n        this.CSSClassPrefix = CSSClassPrefix;\n\n        this.#createHTMLElement();\n    }\n\n    select() {\n        this.#selected = true;\n        this.HTMLElement.classList.add('selected');\n    }\n\n    unselect() {\n        this.#selected = false;\n        this.HTMLElement.classList.remove('selected');\n    }\n\n    isSelected() {\n        return this.#selected;\n    }\n\n    hide() {\n        this.HTMLElement.style.display = 'none';\n    }\n\n    show() {\n        this.HTMLElement.style.display = 'grid';\n    }\n\n    /**\n     *\n     * @return {*}\n     */\n    #createHTMLElement() {\n        const element = document.createElement('div');\n        element.classList.add(`${this.CSSClassPrefix}__division-selector__item`);\n\n        if (this.mode === 'default'){\n            element.classList.add(`no-image`);\n        }\n\n        element.setAttribute('data-id', this.id);\n        element.setAttribute('data-name', this.name);\n        element.innerHTML = this.#getTemplate(this.CSSClassPrefix, this.icon, this.friendlyName, this.mode);\n        this.HTMLElement = element;\n        return element;\n    }\n\n    /**\n     * @param {number} id\n     */\n    set id(id) {\n        this.checkProperty('id', id);\n        this.id = id;\n    }\n\n    /**\n     * @param {string} name\n     */\n    set name(name) {\n        this.checkProperty('name', name);\n        this.name = name;\n    }\n\n    /**\n     * @param {string} friendlyName\n     */\n    set friendlyName(friendlyName) {\n        this.checkProperty('friendlyName', friendlyName);\n        this.friendlyName = friendlyName;\n    }\n\n    /**\n     * @param {string} icon\n     */\n    set icon(icon) {\n        this.checkProperty('icon', icon);\n        this.icon = icon;\n    }\n\n    /**\n     * @param name {string}\n     * @param value {string|number|boolean}\n     */\n    checkProperty(name, value) {\n        if (this[name] && !this.isEmptyOfNull(value)) {\n            this[name] = value;\n        } else {\n            throw new Error('Division property is not exist or value is null');\n        }\n    }\n\n    /**\n     * @param {string} value\n     * @returns {boolean}\n     */\n    isEmptyOfNull(value) {\n        return value === null || value === undefined || value === '';\n    }\n\n    /**\n     * @returns {string}\n     */\n    #getTemplate(prefixClass = '', iconPath = '', title = '', mode = 'default') {\n        return {\n            default: `<span class=\"${prefixClass}__division-selector__item-title\">${title}</span>`,\n            withIcon: `<img src=\"${iconPath}\" class=\"${prefixClass}__division-selector__item-image\" alt=\"${title}\">\n            <span class=\"${prefixClass}__division-selector__item-title\">${title}</span>`\n        }[mode];\n    };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Division);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/division.mjs?")},"./assets/src/js/components/loader.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nclass Loader {\n    constructor(selector) {\n        this.element = document.querySelector(selector);\n    }\n\n    hasClass(className) {\n        return this.element.classList.contains(className);\n    }\n\n    modifyClass(classNames, action) {\n        this.element.classList[action](...classNames);\n    }\n\n    show() {\n        this.element.classList.add('open');\n    }\n\n    hide() {\n        this.element.classList.remove('open');\n    }\n\n    addError() {\n        this.element.classList.add('error');\n    }\n\n    removeError() {\n        this.hide();\n        this.element.classList.remove('error');\n    }\n\n    addSuccess() {\n        this.element.classList.add('success');\n    }\n\n    removeSuccess() {\n        this.hide();\n        this.element.classList.remove('success');\n    }\n\n    addServiceLoader() {\n        this.show();\n        this.element.classList.add('service_load');\n    }\n\n    removeServiceLoader() {\n        this.hide();\n        this.element.classList.remove('service_load');\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Loader);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/loader.mjs?")},"./assets/src/js/components/prompt-contractor-consent.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _types_fms_provider_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types/fms-provider.mjs */ \"./assets/src/js/types/fms-provider.mjs\");\n/**\n * Created by Administrator on 2023/10/26.\n */\n\n\n\n\n/**\n * @class PromptContractorConsent\n */\nclass PromptContractorConsent {\n\n\n    /**\n     *\n     * @type {boolean}\n     */\n    #accept = false\n\n    /**\n     *\n     * @type {HTMLElement}\n     */\n    #container = null\n\n    /**\n     *\n     * @type {HTMLElement}\n     */\n    #nameElement = null\n\n\n    /**\n     *\n     * @type {HTMLElement}\n     */\n    #companyNameElement = null\n\n    /**\n     * @type {BookingForm}\n     */\n    #parent = null\n\n\n    /**\n     *\n     * @type {boolean}\n     */\n    #status = false\n\n\n    #callback = null\n\n    /**\n     *\n     * @type {{subheader: string, header: string, message: string}}\n     */\n    #labels = {\n        'header': 'No Franchisee Available',\n        'subheader': 'We don\\'t have a Franchisee available, but we have an independent contractor \"{{contractor}}\" who can give you a quote',\n        'message': 'I give my Consent for my details to be passed on to an independent contractor'\n    };\n\n    /**\n     * @param parent {BookingForm}\n     */\n    constructor(parent, labels = {}) {\n        this.#parent = parent;\n\n        if (Object.keys(labels).length > 0) {\n            this.#labels = labels;\n        }\n    }\n\n    init() {\n        console.log(`.${this.#parent.prefixClass}-loader-wrapper`);\n        this.#container = this.#parent.formElement.querySelector(`.${this.#parent.prefixClass}-loader-wrapper`);\n        this.#nameElement = this.#container.querySelector('.data-consent .fse-name');\n        this.#companyNameElement = this.#container.querySelector('.data-consent .company-name');\n\n\n        console.log(this.#container);\n        this.listen();\n    }\n\n    open() {\n        this.#status = true;\n        if (this.#container === undefined) {\n            this.init();\n        }\n\n        if (this.#container) {\n            this.#container.classList.add('consent', 'open');\n        } else {\n            throw new Error('Contractor Prompt Container not found');\n        }\n    }\n\n    close(soft = true) {\n        this.#status = false;\n\n        if (soft) {\n            this.#container.classList.remove('consent');\n        } else {\n            this.#container.classList.remove('consent', 'open');\n        }\n    }\n\n    /**\n     *\n     * @return {boolean}\n     */\n    getStatus() {\n        return this.#status;\n    }\n\n    /**\n     *\n     * @return {boolean}\n     */\n    getAnswer() {\n        return this.#accept;\n    }\n\n    /**\n     *\n     * @param {Number} number\n     */\n    setStars(number) {\n        number = Math.round(number.toFixed(2) );\n\n        let stars = this.#container.querySelectorAll('.rating-stars .star');\n        stars.forEach((star, index) => {\n            if (index < number) {\n                star.classList.add('active');\n            } else {\n                star.classList.remove('active');\n            }\n        })\n    }\n\n    setName(name) {\n        this.#nameElement.innerText = name;\n    }\n\n    showCompanyName(companyName = '') {\n        if ( companyName !== null && companyName.length > 0) {\n            this.#companyNameElement.classList.remove('hidden');\n            this.#companyNameElement.innerText = companyName;\n        } else {\n            this.#companyNameElement.classList.add('hidden');\n        }\n    }\n\n    setRating(number, minRating = 3) {\n        //round number to 2 decimals\n        let rating = Number(number);\n\n        this.setStars(rating);\n        this.#container.querySelector('.rating.stars .rating-count').classList.remove('hidden');\n\n        if(parseFloat( rating ) > minRating){\n            this.#container.querySelector('.rating.stars').classList.remove('hidden');\n            this.#container.querySelector('.rating.stars .rating-count').classList.remove('hidden');\n            this.#container.querySelector('.contractor-no-rating').classList.add('hidden');\n            this.#container.querySelector('.rating.stars .rating-count').innerText = number.toFixed(1);\n        }else {\n            this.#container.querySelector('.rating.stars').classList.add('hidden');\n            this.#container.querySelector('.rating.stars .rating-count').classList.add('hidden');\n            this.#container.querySelector('.contractor-no-rating').classList.remove('hidden');\n        }\n    }\n\n    setPhoto(fseData = null){\n        if (fseData) {\n            const contractor = new _types_fms_provider_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](fseData, {\n                'siteUrl': this.#parent.options.rest_url\n            });\n\n            contractor.setPhoto('.data-consent .fse-photo img');\n        }\n    }\n\n    hasLabels() {\n        //check if labels are set and if they are not empty\n        return Object.keys(this.#labels).length > 0\n            && Object.values(this.#labels).every((label) => label.length > 0);\n    }\n\n    setLabels(vars) {\n        console.log(vars);\n        //replace vars in labels\n        Object.keys(this.#labels).forEach((key) => {\n            this.#labels[key] = this.#labels[key].replace(/{{(.*?)}}/g, (match, p1) => {\n                return vars[p1];\n            });\n        });\n        console.log(this.#labels);\n\n        this.#container.querySelector('.data-consent h3').innerText = this.#labels.header;\n        this.#container.querySelector(`.data-consent .${this.#parent.prefixClass}-data-consent-message`).innerText = this.#labels.subheader;\n        this.#container.querySelector(`.data-consent .${this.#parent.prefixClass}-data-consent-consent`).innerText = this.#labels.message;\n    }\n\n    listen() {\n        this.#container.querySelector(`.data-consent`).addEventListener('click', (e) => {\n            e.preventDefault();\n\n            if(e.target.classList.contains('accept') || e.target.classList.contains('decline')) {\n                this.#accept = !!e.target.classList.contains('accept');\n\n\n                //close the prompt\n                this.close(true);\n\n                //if callback is set, call it\n                this.#parent.formElement.dispatchEvent(this.#parent.onContractorConsent);\n            }\n\n            return false;\n        })\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PromptContractorConsent);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/prompt-contractor-consent.mjs?")},"./assets/src/js/components/service-group.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _service_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./service.mjs */ \"./assets/src/js/components/service.mjs\");\n/**\n *\n */\n\n\nclass ServiceGroup {\n\n    /**\n     * @type {Service[]}\n     */\n    services = [];\n\n    /**\n     * @type {string}\n     */\n    name = '';\n\n    /**\n     * @type {number}\n     */\n    gravity = 0;\n\n    /**\n     * @type {string}\n     */\n    description = '';\n\n    /**\n     * @type {HTMLElement}\n     */\n    element = null;\n\n    /**\n     *\n     * @type {BookingForm}\n     */\n    parent = null;\n\n\n    /**\n     *\n     * @param name {string}\n     * @param gravity {number}\n     * @param description {string}\n     * @param parent {BookingForm}\n     */\n    constructor(name, gravity, description, parent) {\n        this.name = name;\n        this.gravity = gravity;\n        this.parent = parent;\n        this.description = '';\n\n        if(description){\n            this.description = description;\n        }\n    }\n\n    createDomElement(){\n        let element = document.createElement('div');\n        element.classList.add(`${this.parent.prefixClass}-service-category`);\n        element.innerHTML = this.getTemplate();\n\n        this.element = element;\n\n        if(this.services.length > 0){\n            this.services.forEach(service => {\n                this.element.querySelector('ul').appendChild(service.element);\n            });\n        }\n    }\n\n    addService(service) {\n        this.services.push(service);\n    }\n\n    getTemplate() {\n        return `\n            <div class=\"minor-cont\">\n                <h3 class=\"${this.parent.prefixClass}-service-category-title\">${this.name}</h3>\n                <p class=\"${this.parent.prefixClass}-service-category-description\">${this.description}</p>\n            </div>\n            <ul></ul>\n        `;\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ServiceGroup);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/service-group.mjs?")},"./assets/src/js/components/service.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nclass Service {\n\n    selected = false;\n\n    /**\n     * @type {null|Step}\n     */\n    parent = null\n\n    constructor(name, id, description = '', inGroup = false) {\n        this.name = this.normalizeName(name);\n        this.id = id;\n        this.description = description;\n        this.inGroup = inGroup;\n        this.element = this.create();\n        this.selectedElement = this.createSelected();\n\n        this.element.addEventListener('mousedown', (evt) => {\n           this.toggleSelected();\n        });\n    }\n\n    setParentElement(step){\n        this.parent = step;\n    }\n\n    update(id, name, checked){\n        this.selected = checked;\n        this.id = id;\n        this.name = name;\n\n        this.element.innerHTML = this.render();\n        this.updateCheckbox(checked);\n    }\n\n    /**\n     * Create the service element\n     * @returns {*}\n     */\n    create() {\n        const element = document.createElement('li');\n        element.classList.add('service');\n        element.innerHTML = this.render();\n\n        return element;\n    }\n\n    /**\n     * Create the selected service element\n     * this is rendered in the third step of the form, with the finalized services\n     * @returns {*}\n     */\n    createSelected() {\n        const element = document.createElement('li');\n        element.classList.add('service-id-' + this.id);\n        element.classList.add('selected-service');\n        element.innerHTML = this.render();\n\n        return element;\n    }\n\n    render(){\n      let description = this.inGroup ? `<span class=\"selected-services__description\">${this.description}</span>` : '';\n\n      return `\n        <div>\n            <label class=\"service__label\">\n                <input type=\"checkbox\" name=\"services[]\" value=\"${this.id}\">\n                <span class=\"service__name\"><span class=\"service__checkbox\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\"><path d=\"M 22.566406 4.730469 L 20.773438 3.511719 C 20.277344 3.175781 19.597656 3.304688 19.265625 3.796875 L 10.476563 16.757813 L 6.4375 12.71875 C 6.015625 12.296875 5.328125 12.296875 4.90625 12.71875 L 3.371094 14.253906 C 2.949219 14.675781 2.949219 15.363281 3.371094 15.789063 L 9.582031 22 C 9.929688 22.347656 10.476563 22.613281 10.96875 22.613281 C 11.460938 22.613281 11.957031 22.304688 12.277344 21.839844 L 22.855469 6.234375 C 23.191406 5.742188 23.0625 5.066406 22.566406 4.730469 Z\"></path></svg>\n                </span>\n                <span class=\"selected-services__title\">${this.name}</span>\n                ${description}\n            </label>\n        </div>`;\n\n       //<span class=\"selected-services__description\">${this.description}</span>\n    }\n\n    /**\n     *\n     */\n    setSelected() {\n        this.selected = true;\n    }\n\n    unselect() {\n        this.selected = false;\n    }\n\n    toggleSelected() {\n        this.selected = !this.selected;\n        this.updateCheckbox(this.selected);\n\n        console.log('toggle selected');\n\n        if(this.parent.dispatchServiceStatusChangeEvent !== undefined){\n            this.parent.dispatchServiceStatusChangeEvent(this.id, this.selected);\n        }\n    }\n\n    updateCheckbox(selected){\n        if (selected === false) {\n            this.element.querySelector('input').checked = false;\n            this.element.classList.remove('checked');\n            return;\n        }\n\n        if (selected) {\n            this.element.querySelector('input').checked = true;\n            this.element.classList.add('checked');\n        }\n    }\n\n    init() {\n        console.log(this.name + ' initialized');\n    }\n\n    hide() {\n        this.element.classList.add('hidden');\n    }\n\n    show() {\n        this.element.classList.remove('hidden');\n    }\n\n    /**\n     * Replace tabs with spaces\n     */\n    normalizeName(string) {\n        return string.replace(/\\t/g, ' ');\n    }\n\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Service);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/service.mjs?")},"./assets/src/js/components/step.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _services_log_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/log.mjs */ \"./assets/src/js/services/log.mjs\");\n/**\n * Created by Konstantinos on 2023/10/06.\n */\n\n\n\n/**\n * @class Step\n * @classdesc An abstract class that represents a step in a workflow.\n */\nclass Step {\n\n    /**\n     * @type {string}\n     */\n    containerCSSSelector = '';\n    /**\n     * @type {BookingForm}\n     */\n    bookingForm = null;\n\n    /**\n     * @type {Object.<string, string>}\n     */\n    #endpoints = {};\n\n    mode = 'default';\n\n    /**\n     * @type {null|HTMLElement}\n     */\n    HTMLElement = null;\n\n    /**\n     * @type {boolean}\n     */\n    initialized = false;\n\n    /**\n     * @type {boolean}\n     */\n    hidden = true;\n\n    /**\n     * @type {string}\n     */\n    constructor(BookingForm, mode = 'default') {\n        this.bookingForm = BookingForm;\n        this.mode = mode;\n    }\n\n    hide() {\n        this.hidden = true;\n        this.HTMLElement.classList.add('hidden');\n    }\n\n    show() {\n        this.hidden = false;\n        this.HTMLElement.classList.remove('hidden');\n\n        if (this.initialized){\n            this.visible();\n        }\n    }\n\n    /**\n     * This method initializes the step\n     * however usually we need to create an override for this method\n     */\n    init() {\n        //get the container, this statement is placed here because the container might not be available in the constructor\n        this.HTMLElement = this.getContainer();\n        console.log(this.HTMLElement);\n\n        //set initialized to true\n        this.initialized = true;\n    }\n\n    load(){};\n\n    listen(){};\n\n    visible() {\n        _services_log_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].info(`Step ${this.bookingForm.currentStep} is visible`);\n\n        //disable the previous button if we are at the first step\n        if( this.bookingForm.currentStep === 0 ){\n            this.bookingForm.setPreviousButtonState(false);\n        }\n    }\n    /**\n     * Returns the container HTMLElement\n     * @returns {HTMLElement}\n     */\n    getContainer() {\n        if (this.containerCSSSelector === '' || this.bookingForm.formElement.querySelector(this.containerCSSSelector) === null) {\n            throw new Error('containerClass is not defined or was not found in the DOM');\n        }\n\n        return this.getParentProperty('formElement').querySelector(this.containerCSSSelector);\n    }\n\n    getChild(selector){\n         let child = this.HTMLElement.querySelector(selector);\n\n         if(child === null){\n             throw new Error(`Child with selector ${selector} was not found`);\n         }\n\n         return child;\n    }\n\n    getParentProperty(propertyName) {\n        if (this.bookingForm[propertyName] === undefined) {\n            throw new Error(`Parent property ${propertyName} is not defined`);\n        }\n\n        return this.bookingForm[propertyName];\n    }\n\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Step);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/components/step.mjs?")},"./assets/src/js/decorators/booking-form.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   StepDecorator: () => (/* binding */ StepDecorator)\n/* harmony export */ });\n/**\n * Step Decorators\n */\n\n/**\n *\n * @param step Object\n * @constructor\n */\nfunction StepDecorator(step, parent) {\n    // if props is not an object, return the step\n    if (typeof props !== 'object') {\n        return step;\n    }\n\n    // loop through props and assign them to the step\n    for (let prop in props) {\n        if (props.hasOwnProperty(prop)) {\n            //if prop already exists, skip it\n            if (step.hasOwnProperty(prop)) {\n                continue;\n            }\n\n            step[prop] = props[prop];\n        }\n    }\n\n    return step;\n}\n\n\n\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/decorators/booking-form.mjs?")},"./assets/src/js/services/country-codes.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Created by Administrator on 2023/10/30.\n */\n\nclass CountryCodes {\n\n    /**\n     * Contains all country codes as keys with the name of the country as the value\n     * @type {{}}\n     */\n    #countryCodes = {\n        "AD": "Andorra",\n        "AE": "United Arab Emirates",\n        "AF": "Afghanistan",\n        "AG": "Antigua and Barbuda",\n        "AI": "Anguilla",\n        "AL": "Albania",\n        "AM": "Armenia",\n        "AO": "Angola",\n        "AQ": "Antarctica",\n        "AR": "Argentina",\n        "AS": "American Samoa",\n        "AT": "Austria",\n        "AU": "Australia",\n        "AW": "Aruba",\n        "AX": "Åland Islands",\n        "AZ": "Azerbaijan",\n        "BA": "Bosnia and Herzegovina",\n        "BB": "Barbados",\n        "BD": "Bangladesh",\n        "BE": "Belgium",\n        "BF": "Burkina Faso",\n        "BG": "Bulgaria",\n        "BH": "Bahrain",\n        "BI": "Burundi",\n        "BJ": "Benin",\n        "BL": "Saint Barthélemy",\n        "BM": "Bermuda",\n        "BN": "Brunei",\n        "BO": "Bolivia",\n        "BQ": "Bonaire, Sint Eustatius and Saba",\n        "BR": "Brazil",\n        "BS": "Bahamas",\n        "BT": "Bhutan",\n        "BV": "Bouvet Island",\n        "BW": "Botswana",\n        "BY": "Belarus",\n        "BZ": "Belize",\n        "CA": "Canada",\n        "CC": "Cocos (Keeling) Islands",\n        "CD": "Democratic Republic of the Congo",\n        "CF": "Central African Republic",\n        "CG": "Republic of the Congo",\n        "CH": "Switzerland",\n        "CI": "Ivory Coast",\n        "CK": "Cook Islands",\n        "CL": "Chile",\n        "CM": "Cameroon",\n        "CN": "China",\n        "CO": "Colombia",\n        "CR": "Costa Rica",\n        "CU": "Cuba",\n        "CV": "Cape Verde",\n        "CW": "Curaçao",\n        "CX": "Christmas Island",\n        "CY": "Cyprus",\n        "CZ": "Czech Republic",\n        "DE": "Germany",\n        "DJ": "Djibouti",\n        "DK": "Denmark",\n        "DM": "Dominica",\n        "DO": "Dominican Republic",\n        "DZ": "Algeria",\n        "EC": "Ecuador",\n        "EE": "Estonia",\n        "EG": "Egypt",\n        "EH": "Western Sahara",\n        "ER": "Eritrea",\n        "ES": "Spain",\n        "ET": "Ethiopia",\n        "FI": "Finland",\n        "FJ": "Fiji",\n        "FK": "Falkland Islands",\n        "FM": "Micronesia",\n        "FO": "Faroe Islands",\n        "FR": "France",\n        "GA": "Gabon",\n        "GB": "United Kingdom",\n        "GD": "Grenada",\n        "GE": "Georgia",\n        "GF": "French Guiana",\n        "GG": "Guernsey",\n        "GH": "Ghana",\n        "GI": "Gibraltar",\n        "GL": "Greenland",\n        "GM": "Gambia",\n        "GN": "Guinea",\n        "GP": "Guadeloupe",\n        "GQ": "Equatorial Guinea",\n        "GR": "Greece",\n        "GS": "South Georgia and the South Sandwich Islands",\n        "GT": "Guatemala",\n        "GU": "Guam",\n        "GW": "Guinea-Bissau",\n        "GY": "Guyana",\n        "HK": "Hong Kong",\n        "HM": "Heard Island and McDonald Islands",\n        "HN": "Honduras",\n        "HR": "Croatia",\n        "HT": "Haiti",\n        "HU": "Hungary",\n        "ID": "Indonesia",\n        "IE": "Ireland",\n        "IL": "Israel",\n        "IM": "Isle of Man",\n        "IN": "India",\n        "IO": "British Indian Ocean Territory",\n        "IQ": "Iraq",\n        "IR": "Iran",\n        "IS": "Iceland",\n        "IT": "Italy",\n        "JE": "Jersey",\n        "JM": "Jamaica",\n        "JO": "Jordan",\n        "JP": "Japan",\n        "KE": "Kenya",\n        "KG": "Kyrgyzstan",\n        "KH": "Cambodia",\n        "KI": "Kiribati",\n        "KM": "Comoros",\n        "KN": "Saint Kitts and Nevis",\n        "KP": "North Korea",\n        "KR": "South Korea",\n        "KW": "Kuwait",\n        "KY": "Cayman Islands",\n        "KZ": "Kazakhstan",\n        "LA": "Laos",\n        "LB": "Lebanon",\n        "LC": "Saint Lucia",\n        "LI": "Liechtenstein",\n        "LK": "Sri Lanka",\n        "LR": "Liberia",\n        "LS": "Lesotho",\n        "LT": "Lithuania",\n        "LU": "Luxembourg",\n        "LV": "Latvia",\n        "LY": "Libya",\n        "MA": "Morocco",\n        "MC": "Monaco",\n        "MD": "Moldova",\n        "ME": "Montenegro",\n        "MF": "Saint Martin",\n        "MG": "Madagascar",\n        "MH": "Marshall Islands",\n        "MK": "North Macedonia",\n        "ML": "Mali",\n        "MM": "Myanmar",\n        "MN": "Mongolia",\n        "MO": "Macao",\n        "MP": "Northern Mariana Islands",\n        "MQ": "Martinique",\n        "MR": "Mauritania",\n        "MS": "Montserrat",\n        "MT": "Malta",\n        "MU": "Mauritius",\n        "MV": "Maldives",\n        "MW": "Malawi",\n        "MX": "Mexico",\n        "MY": "Malaysia",\n        "MZ": "Mozambique",\n        "NA": "Namibia",\n        "NC": "New Caledonia",\n        "NE": "Niger",\n        "NF": "Norfolk Island",\n        "NG": "Nigeria",\n        "NI": "Nicaragua",\n        "NL": "Netherlands",\n        "NO": "Norway",\n        "NP": "Nepal",\n        "NR": "Nauru",\n        "NU": "Niue",\n        "NZ": "New Zealand",\n        "OM": "Oman",\n        "PA": "Panama",\n        "PE": "Peru",\n        "PF": "French Polynesia",\n        "PG": "Papua New Guinea",\n        "PH": "Philippines",\n        "PK": "Pakistan",\n        "PL": "Poland",\n        "PM": "Saint Pierre and Miquelon",\n        "PN": "Pitcairn",\n        "PR": "Puerto Rico",\n        "PS": "Palestine",\n        "PT": "Portugal",\n        "PW": "Palau",\n        "PY": "Paraguay",\n        "QA": "Qatar",\n        "RE": "Réunion",\n        "RO": "Romania",\n        "RS": "Serbia",\n        "RU": "Russia",\n        "RW": "Rwanda",\n        "SA": "Saudi Arabia",\n        "SB": "Solomon Islands",\n        "SC": "Seychelles",\n        "SD": "Sudan",\n        "SE": "Sweden",\n        "SG": "Singapore",\n        "SH": "Saint Helena",\n        "SI": "Slovenia",\n        "SJ": "Svalbard and Jan Mayen",\n        "SK": "Slovakia",\n        "SL": "Sierra Leone",\n        "SM": "San Marino",\n        "SN": "Senegal",\n        "SO": "Somalia",\n        "SR": "Suriname",\n        "SS": "South Sudan",\n        "ST": "São Tomé and Príncipe",\n        "SV": "El Salvador",\n        "SX": "Sint Maarten",\n        "SY": "Syria",\n        "SZ": "Swaziland",\n        "TC": "Turks and Caicos Islands",\n        "TD": "Chad",\n        "TF": "French Southern Territories",\n        "TG": "Togo",\n        "TH": "Thailand",\n        "TJ": "Tajikistan",\n        "TK": "Tokelau",\n        "TL": "Timor-Leste",\n        "TM": "Turkmenistan",\n        "TN": "Tunisia",\n        "TO": "Tonga",\n        "TR": "Turkey",\n        "TT": "Trinidad and Tobago",\n        "TV": "Tuvalu",\n        "TW": "Taiwan",\n        "TZ": "Tanzania",\n        "UA": "Ukraine",\n        "UG": "Uganda",\n        "UM": "United States Minor Outlying Islands",\n        "US": "United States",\n        "UY": "Uruguay",\n        "UZ": "Uzbekistan",\n        "VA": "Vatican City",\n        "VC": "Saint Vincent and the Grenadines",\n        "VE": "Venezuela",\n        "VG": "British Virgin Islands",\n        "VI": "U.S. Virgin Islands",\n        "VN": "Vietnam",\n        "VU": "Vanuatu",\n        "WF": "Wallis and Futuna",\n        "WS": "Samoa",\n        "YE": "Yemen",\n        "YT": "Mayotte",\n        "ZA": "South Africa",\n        "ZM": "Zambia",\n        "ZW": "Zimbabwe"\n    };\n\n    /**\n     * Returns the country name for the given country code\n     * @param countryCode\n     * @returns {string}\n     */\n    getCountryName(countryCode) {\n        return this.#countryCodes[countryCode];\n    }\n\n    /**\n     * Returns the country code for the given country name\n     * @param countryName\n     * @param $default\n     * @returns {string}\n     */\n    getCountryCode(countryName, $default = \'AU\') {\n        for (let countryCode in this.#countryCodes) {\n            if (this.#countryCodes[countryCode] === countryName) {\n                return countryCode;\n            }\n        }\n        return $default;\n    }\n\n    getAllCountryCodes() {\n        return this.#countryCodes;\n    }\n\n    getAllCountryNames() {\n        return Object.values(this.#countryCodes);\n    }\n\n    countryExists(countryName) {\n        return this.getAllCountryNames().includes(countryName);\n    }\n\n    isCountryCode(countryCode) {\n        return this.getAllCountryCodes().hasOwnProperty(countryCode);\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CountryCodes);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/country-codes.mjs?')},"./assets/src/js/services/error-message.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Error Message\n */\nconst ErrorMessage = {\n    default: 'Booking Processing Error. We apologize for the inconvenience. Unfortunately, we cannot process your request online at this time. However your inquiry has been forwarded to our Call Centre, and they will call you shortly.',\n    previous_response: 'The data appeared to be incomplete. Please try again.',\n    address: 'Invalid address, the address can\\'t be validated',\n    fms_errors: [\n        'Booked',\n        'Unavailable in Your Area. We regret to inform you that we currently do not have a local Jim\\'s Franchisee in your area who can provide this service.',\n        'Service Already Requested. We\\'re sorry, it appears that a service request for this address was submitted within the last 12 hours. If you haven\\'t made the booking, please call our Call Centre for any questions or immediate assistance.',\n        'Unfortunately, all our Franchisees for this location are currently unavailable. If a Franchisee does become available, they will be in contact.',\n        'Invalid Address. We couldn\\'t locate your address, but don\\'t worry. Your inquiry has been forwarded to our Call Centre, and they will contact you shortly.',\n        'Booking Processing Error. We apologize for the inconvenience. Unfortunately, we cannot process your request online at this time. However your inquiry has been forwarded to our Call Centre, and they will call you shortly.',\n        'Booking Processing Error. We apologize for the inconvenience. Unfortunately, we cannot process your request online at this time. However your inquiry has been forwarded to our Call Centre, and they will call you shortly.',\n        'This is a test mode message. No action is required.',\n        'Service Already Requested. We\\'re sorry, it appears that a service request for this address was submitted within the last 12 hours. If you haven\\'t made the booking, please call our Call Centre for any questions or immediate assistance.',\n        'Booking Processing Error. We apologize for the inconvenience. Unfortunately, we cannot process your request online at this time. However your inquiry has been forwarded to our Call Centre, and they will call you shortly.',\n        'Booking Processing Error. We apologize for the inconvenience. Unfortunately, we cannot process your request online at this time. However your inquiry has been forwarded to our Call Centre, and they will call you shortly.'\n    ]\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ErrorMessage);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/error-message.mjs?")},"./assets/src/js/services/field-validator.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FieldValidator: () => (/* binding */ FieldValidator)\n/* harmony export */ });\n/**\n * Created by Administrator on 2023/7/17.\n *\n */\n\nconst FieldValidator = new class {\n\n    validate(type, value){\n        return this[type](value);\n    }\n\n    text(value, min = 2, max = 1000){\n        return !this.isEmpty(value) && value.length >= min && value.length <= max;\n    }\n\n    textarea(value, min = 2, max = 1000){\n        return !this.isEmpty(value) && value.length >= min && value.length <= max;\n    }\n\n    number(value, min = 0, max = 1000){\n        return !this.isEmpty(value) && value > min && value < max;\n    }\n\n    email(value){\n        //change the following regex to accept also emails like this thomas.hill@adhesion.co.nz\n\n        return !this.isEmpty(value) && /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/.test(value);\n    }\n\n    checkbox(value){\n        return !value;\n    }\n\n    /**\n     *\n     * @param {string|number|null} value\n     */\n    isEmpty(value){\n        return value == null || value == '';\n    }\n}\n\n\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/field-validator.mjs?")},"./assets/src/js/services/google-address-validation.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _log_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./log.mjs */ \"./assets/src/js/services/log.mjs\");\n/* harmony import */ var _country_codes_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./country-codes.mjs */ \"./assets/src/js/services/country-codes.mjs\");\n/**\n *\n */\n\n\n\nclass GoogleAddressValidation {\n\n    ConfirmationLevels = {\n        CONFIRMATION_LEVEL_UNSPECIFIED: 1,\n        CONFIRMED: 1,\n        UNCONFIRMED_BUT_PLAUSIBLE: 0.5,\n        UNCONFIRMED_AND_SUSPICIOUS: -1,\n    };\n\n    constructor(ApiKey) {\n        this.ApiKey = ApiKey;\n    }\n\n    getGoogleValidation(addressObject) {\n\n        return new Promise((resolve, reject) => {\n            let url = `https://addressvalidation.googleapis.com/v1:validateAddress?key=${this.ApiKey}`;\n\n            //make a post request to google address validation api\n            fetch(url, {\n                method: 'POST',\n                body: JSON.stringify(addressObject)\n            }).then((response) => {\n                return response.json();\n            }).then((data) => {\n                resolve(data);\n            }).catch((error) => {\n                resolve({error: error});\n            });\n        });\n    }\n\n    validateAddress(addressObject) {\n        let CustomError = {\n            AddressComponentsAreValid: false,\n            inputDetailIsValid: false,\n            result: false,\n            incomplete: true,\n            data: null\n        };\n\n        if (!Array.isArray(addressObject.address.addressLines)) {\n            console.log(addressObject, 'invalid');\n            return this.promise( CustomError)\n        }\n\n        if(addressObject.address.addressLines.length === 0 || addressObject.address.addressLines[0] === \"\") {\n            console.log('invalid address');\n            return this.promise( CustomError);\n        }\n\n        return new Promise((resolve, reject) => {\n           this.getGoogleValidation(addressObject).then((data) => {\n                if(data.error) {\n                     reject(data.error);\n                } else {\n                    let AddressComponentsAreValid = this.checkAddressComponents(data.result);\n                    let inputDetailIsValid = this.checkInputDetail(data.result);\n\n                    resolve({\n                        formattedAddress: data.address ? data.address.formattedAddress : addressObject.address.addressLines.join(' '),\n                        AddressComponentsAreValid: AddressComponentsAreValid,\n                        inputDetailIsValid: inputDetailIsValid,\n                        result: AddressComponentsAreValid && inputDetailIsValid,\n                        data: data.result\n                    });\n                }\n           }).catch((error) => {\n               reject(error);\n           });\n        });\n    }\n\n    /**\n     * Check if the address is valid\n     * @param data\n     * @returns {boolean}\n     */\n    checkAddressComponents(data) {\n        let valid = false;\n        let types = [];\n        let unconfirmedComponentTypesAllowance = 1;\n\n        //count how many addressComponents are in the address\n        let addressComponents = Object.keys(data.address.addressComponents).length;\n\n        //filter out the addressComponents with componentType \"point_of_interest\"\n        data.address.addressComponents = Object.values(data.address.addressComponents).filter((component) => {\n            return component.componentType !== \"point_of_interest\";\n        });\n\n        //count the addressComponents with confirmationLevel of \"CONFIRMED\"\n        let confirmedAddressComponents = 2;\n        for (let key in data.address.addressComponents) {\n            if (data.address.addressComponents[key].confirmationLevel === \"CONFIRMED\") {\n                confirmedAddressComponents++;\n            }\n\n            if (data.address.addressComponents[key].confirmationLevel === \"CONFIRMED\" || data.address.addressComponents[key].confirmationLevel === \"UNCONFIRMED_BUT_PLAUSIBLE\") {\n                types.push(data.address.addressComponents[key].componentType);\n            }\n\n            // if ( data.address.addressComponents[key].componentType === 'subpremise' && data.address.addressComponents[key].confirmationLevel === \"UNCONFIRMED_BUT_PLAUSIBLE\") {\n            //     unconfirmedComponentTypesAllowance = 2;\n            // }\n        }\n\n        //compare the number of addressComponents with the number of confirmed addressComponents\n        //if addressComponents.length - 1 <= confirmedAddressComponents.length, then the address is valid\n        if (addressComponents - unconfirmedComponentTypesAllowance <= confirmedAddressComponents && addressComponents >= 5) {\n            valid = true;\n        }\n\n        if (!types.includes('route') || !types.includes('street_number')) {\n           valid = false;\n        }\n\n        return valid;\n    }\n\n    getFriendlyAddressParts(address){\n\n        if (!address.hasOwnProperty('missingComponentTypes') && !address.hasOwnProperty('unconfirmedComponentTypes')) {\n            return [];\n        }\n\n        let replacements = {\n            'STREET_NUMBER': 'Street Number',\n            'ROUTE': 'Street Name',\n            'LOCALITY': 'Suburb',\n            'ADMINISTRATIVE_AREA_LEVEL_1': 'State',\n            'POSTAL_CODE': 'Postcode',\n            'COUNTRY': 'Country',\n        };\n\n\n        let friendlyAddressParts = [];\n\n        if(address.missingComponentTypes) {\n            address.missingComponentTypes.forEach((part) => {\n                part = part.toUpperCase();\n\n                if (replacements.hasOwnProperty(part) && !friendlyAddressParts.includes(replacements[part])) {\n                    friendlyAddressParts.push(replacements[part]);\n\n                    //remove from missingComponentTypes\n                    delete address.missingComponentTypes[ address.missingComponentTypes.indexOf(part) ];\n                }\n            });\n\n        }\n\n        if(address.unconfirmedComponentTypes){\n            address.unconfirmedComponentTypes.forEach((part) => {\n                part = part.toUpperCase();\n\n                if (replacements.hasOwnProperty(part) && !friendlyAddressParts.includes(replacements[part])) {\n                    friendlyAddressParts.push(replacements[part]);\n\n                    //remove from unconfirmedComponentTypes\n                    delete address.unconfirmedComponentTypes[ address.unconfirmedComponentTypes.indexOf(part) ];\n                }\n            });\n        }\n\n        //remove duplicates\n        friendlyAddressParts = [...new Set(friendlyAddressParts)];\n\n        return friendlyAddressParts;\n    }\n\n    /**\n     * Check if the input granularity and validation granularity are both \"PREMISE\"\n     * @param data\n     * @return {boolean}\n     */\n    checkInputDetail(data) {\n        let valid = false;\n\n        //check if address components are more than 3\n        if( Object.keys(data.address.addressComponents).length > 3) {\n            valid = true;\n            let score = 0;\n            //loop through address components\n           Object.values(data.address.addressComponents).forEach((component) => {\n               //check if the component has a confirmation level of \"CONFIRMED\"\n               score += this.ConfirmationLevels[component.confirmationLevel];\n           });\n\n            //check if the score is greater than 3\n            if(score / Object.keys(data.address.addressComponents).length > 0.75) {\n                valid = true;\n            } else {\n                valid = false;\n            }\n\n            _log_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"].info('score', score, 'length', Object.keys(data.address.addressComponents).length, 'valid', valid);\n        }\n\n\n        return valid;\n    }\n\n    /**\n     * Format the address\n     * @param addressObject {{full_address: string, geocode_y: string, geocode_x: string, street_number: string, street_name: string, suburb: string, state: string, postcode: string, country: string, unit_number: string, unit_number: string}}\n     */\n    formatAddress(addressObject){\n        let valid = true;\n        console.log(addressObject);\n\n        //if unit number is not empty and contains a string like \"unit 1\" or \"unit 1/2\" replace it with \"1\" or \"1/2\"\n        if(addressObject.unit_number !== null && addressObject.unit_number !== undefined && addressObject.unit_number !== \"\") {\n            addressObject.unit_number = addressObject.unit_number.replace(/unit\\s?/i, '');\n        }\n\n        addressObject = this.getStreetNumber(addressObject);\n\n        //check if all address components are present and not empty except for unit_number\n        Object.keys(addressObject).filter( (key) => {\n            return key !== 'unit_number';\n        }).forEach((key) => {\n            if(addressObject[key] === null || addressObject[key] === undefined || addressObject[key] === \"\") {\n               valid = false;\n            }\n        });\n\n        if (!valid) {\n            return addressObject.full_address;\n        }\n\n        //format the address \"{{unit number}} {{street number}} {{street name}}, {{suburb}}, {{state}} {{postcode}}, {{country}}\"\n        let address = \"{{unit_number}}{{street_number}} {{street_name}}, {{suburb}}, {{state}}, {{postcode}}, {{country}}\";\n\n        //replace the template with the addressObject\n        for(let key in addressObject){\n            let value = addressObject[key];\n\n            //if kew is country replace it with the country code\n            if(key === 'country') {\n                const countryCodes = new _country_codes_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n\n                if(countryCodes.countryExists(value)) {\n                    value = countryCodes.getCountryCode(value);\n                }\n            }\n\n            if(key === 'unit_number' && value !== null && value !== undefined && value !== \"\") {\n                value = `${value}/`\n            }\n            address = address.replace(`{{${key}}}`, value);\n        }\n\n        return address;\n    }\n\n    getStreetNumber(addressObject) {\n        console.log(addressObject);\n\n        //if street number is empty\n        let streetNumberIsEmpty = (addressObject.street_number === null || addressObject.street_number === undefined || addressObject.street_number === \"\");\n        let unitNumberIsEmpty = (addressObject.unit_number === null || addressObject.unit_number === undefined || addressObject.unit_number === \"\");\n        let calculatedValues = this.extractUnitAndStreetNumber(addressObject.full_address);\n\n        if (streetNumberIsEmpty && calculatedValues) {\n            addressObject.street_number = calculatedValues.streetNumber;\n            addressObject.unit_number = calculatedValues.unitNumber;\n        }\n\n\n        return addressObject;\n    }\n\n    extractUnitAndStreetNumber(address) {\n        if(address === undefined || address === null || address === \"\") return false;\n\n        //trim spaces in the front and back\n        address = address.trim();\n\n        //remove duplicate spaces\n        address = address.replace(/\\s+/g, ' ');\n\n        let hasUnitNumberSeparator = address.match(/[\\/\\-]/);\n        let unitNumberRegex = new RegExp(/(([0-9A-Za-z]+)\\s?)?[\\/\\-]\\s?([0-9A-Za-z]+)/);\n\n        const segments = address.split(' ');\n        if (segments.length === 0) return false;\n\n        let s = segments[0];\n        if (hasUnitNumberSeparator) {\n            let parts = address.match(unitNumberRegex);\n\n            return {\n                unitNumber: parts[2] !== undefined ? parts[2] : '',\n                streetNumber: parts[3] !== undefined ? parts[3] : ''\n            };\n        }\n\n        //If no unit/street formats are found, check for numeric value followed by a string or just a numeric value\n        if (segments.length > 0 && segments[0].match(/^\\d{1,5}[A-Za-z]{0,4}$/)) {\n            return {\n                unitNumber: '',\n                streetNumber: segments[0]\n            };\n        }\n\n\n        return false;\n    }\n\n    promise(resolveObject) {\n        return new Promise((resolve, reject) => {\n            resolve(resolveObject );\n        });\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GoogleAddressValidation);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/google-address-validation.mjs?")},"./assets/src/js/services/google-analytics.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Google Analytics\n * this class assumes that the Google Analytics script is already loaded\n */\nclass GoogleAnalytics {\n    constructor(window, throwError = false) {\n        //check if window.gtag is defined\n        if (typeof window.gtag === 'undefined') {\n            //listen for the script to be loaded\n            window.addEventListener('load', () => {\n                if (typeof window.dataLayer === 'undefined') {\n                    if (throwError) throw new Error('Google Analytics script is not loaded');\n\n                    console.error('Google Analytics script is not loaded');\n                } else {\n                    this.createGtag(window);\n                }\n            });\n        } else {\n            this.createGtag(window);\n        }\n    }\n\n    createGtag(window) {\n        this.gtag = function () {\n            window.dataLayer.push(arguments);\n        };\n    }\n\n    /**\n     *\n     * @param category\n     * @param action\n     * @param label\n     * @param value\n     */\n    sendEvent(category, action, label, value) {\n        if (this.gtag) {\n            this.gtag('event', action, {\n                'event_category': category,\n                'event_label': label,\n                'value': value\n            });\n        }\n        //this console.info is left on purpose\n        console.info(`Google Analytics event sent: ${category}, ${action}, ${label}, ${value}`);\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GoogleAnalytics);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/google-analytics.mjs?")},"./assets/src/js/services/google-autocomplete.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nclass GoogleAutocomplete {\n    constructor(element, parentFormElement, options, googleMapsApiKey) {\n        this.element = element;\n        this.options = options;\n        this.initScript(googleMapsApiKey);\n        this.country = options.countryCode.toLowerCase();\n        this.parentFormElement = parentFormElement;\n        this.autocomplete = null;\n        this.address = null;\n        this.place = null;\n        this.placeChanged = null;\n    }\n\n    initScript(googleMapsApiKey) {\n        if (this.element && !document.getElementById('google-maps')) {\n            let script = document.createElement('script');\n            script.id = 'google-maps';\n            script.src = `https://maps.googleapis.com/maps/api/js?key=${googleMapsApiKey}&libraries=places&language=en`;\n            document.body.appendChild(script);\n\n            script.onload = () => {\n                this.init();\n            }\n        } else if (this.element && document.getElementById('google-maps') !== null) {\n            document.getElementById('google-maps').addEventListener('load', () => {\n                this.init();\n            });\n        }\n    }\n\n    init() {\n        if (this.element) {\n            this.autocomplete = new google.maps.places.Autocomplete(this.element, {\n                types: ['geocode'],\n                componentRestrictions: {country: this.country},\n                language: 'en'\n            });\n\n            this.autocomplete.addListener('place_changed', this.onPlaceChanged.bind(this));\n        }\n    }\n\n    setCountry(country) {\n        this.country = country;\n        if (this.autocomplete) {\n            this.onCountryChanged();\n        }\n    }\n\n    onPlaceChanged(evt) {\n        this.place = this.autocomplete.getPlace();\n        this.address = this.place.formatted_address;\n        this.placeChanged = true;\n\n        this.element.dispatchEvent(new Event('change', {\n            detail: {\n                place: this.place,\n                address: this.address\n            },\n            'bubbles': true,\n            'cancelable': true\n        }));\n    }\n\n    onCountryChanged() {\n        this.autocomplete.setComponentRestrictions({country: this.country});\n    }\n\n    /**\n     * Get countryCode from the select element named country\n     * @returns string\n     */\n    getCountryFromDocument() {\n        //get the select element named country\n        let countryElement = this.parentFormElement.querySelector('select[name=\"country\"]');\n\n        countryElement.addEventListener('change', (e) => {\n            this.setCountry(e.target.value);\n        });\n    }\n\n    getPlace() {\n        return this.place;\n    }\n\n    getAddress(composed = false) {\n        return composed ? this.composeAddress() : this.address;\n    }\n\n    isPlaceChanged() {\n        return this.placeChanged;\n    }\n\n    resetPlaceChanged() {\n        this.placeChanged = false;\n    }\n\n    getFormattedPlace() {\n        //the result should be and object with the following properties\n        //street_number, street_name, suburb, state, postcode, country, full_address, lat, lng\n        //get the data from this.place\n        let result = {\n            street_number: '',\n            street_name: '',\n            suburb: '',\n            state: '',\n            postcode: '',\n            country: '',\n            full_address: '',\n            geocode_y: '',\n            geocode_x: ''\n        };\n        let address_components = {};\n\n        if (this.place) {\n            result.full_address = this.place.formatted_address;\n            result.geocode_y = this.place.geometry.location.lat();\n            result.geocode_x = this.place.geometry.location.lng();\n\n            address_components = this.getAddressComponents();\n        }\n\n        return {\n            ...result,\n            ...address_components\n        };\n    }\n\n    getAddressComponents() {\n        let address_components = this.place.address_components;\n\n        let address = {\n            street_number: '',\n            street_name: '',\n            suburb: '',\n            state: '',\n            country: '',\n            postcode: '',\n            unit_number: '',\n        };\n\n        for (let component of address_components) {\n            if (component.types.includes('street_number')) {\n                address.street_number = component.long_name;\n            }\n\n            if (component.types.includes('route')) {\n                address.street_name = component.long_name;\n            }\n\n            if (component.types.includes('locality')) {\n                address.suburb = component.long_name;\n            }\n\n            if (component.types.includes('administrative_area_level_1')) {\n                address.state = component.short_name;\n            }\n\n            if (component.types.includes('country')) {\n                address.country = component.long_name;\n            }\n\n            if (component.types.includes('postal_code')) {\n                address.postcode = component.long_name;\n            }\n\n            if (component.types.includes('subpremise')) {\n                address.unit_number = component.long_name;\n            }\n\n        }\n\n        return address;\n    }\n\n    composeAddress() {\n        //the format of the address should be\n        //street_number street_name, suburb, state, postcode, country\n        let address = this.getAddressComponents();\n        let unit_number = address.unit_number ? `#${address.unit_number}, ` : '';\n        return `${unit_number}${address.street_number} ${address.street_name}, ${address.suburb}, ${address.state}, ${address.postcode}, ${address.country}`;\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GoogleAutocomplete);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/google-autocomplete.mjs?")},"./assets/src/js/services/jims-services.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/**\n * Jims Services\n */\n\n\n/**\n *\n * This class is used to handle the api requests for jims services custom order\n * and category groupings.\n */\nclass JimsServices {\n\n    rest_url = '';\n\n    division_id = 0;\n\n    countryCode = 'AU';\n\n    routes = {\n        divisions: 'jims-wpcb/v1/service/divisions',\n        services: 'jims-wpcb/v1/service/division/services',\n        order: 'jims-wpcb/v1/customize/service-order',\n        categories: 'jims-wpcb/v1/customize/service-groups',\n        descriptions: 'jims-wpcb/v1/customize/service-descriptions',\n        options: 'jims-wpcb/v1/customize/options',\n        delete_caches: 'jims-wpcb/v1/options/clear-transients'\n    }\n\n    constructor(base_url, division_id, country_code = 'AU') {\n        this.rest_url = base_url;\n        this.division_id = division_id;\n        this.countryCode = country_code;\n\n        this.request = new _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.rest_url);\n    }\n\n    getDivisionList() {\n        return this.request.get(this.routes.divisions);\n    }\n\n    getServiceList(division_id = 0, use_grouping = 0, country_code = 'AU') {\n        if (this.division_id === 0) return false;\n\n        //create query string\n        let queryString = new URLSearchParams({\n            'division_id': division_id !==0 ?  division_id : this.division_id,\n            'use_grouping': use_grouping !==0 ? use_grouping : '0',\n            'country_code': country_code !== '' && country_code.length === 2 ? this.countryCode : this.countryCode\n        });\n\n        return this.request.get(`${this.routes.services}?${queryString.toString()}`);\n    }\n\n    /**\n     * @param data\n     * @returns {Promise<*>}\n     */\n    setOrder(data) {\n        return this.request.post(this.routes.order, data);\n    }\n\n    /**\n     * @return {Promise<unknown>}\n     */\n    getOrder() {\n        return this.request.get(this.routes.order);\n    }\n\n    /**\n     * @param data\n     * @return {Promise<unknown>}\n     */\n    setCategories(data) {\n        return this.request.post(this.routes.categories, data);\n    }\n\n    /**\n     * @return {Promise<unknown>}\n     */\n    getCategories() {\n        return this.request.get(this.routes.categories);\n    }\n\n    setServiceDescriptions(data) {\n        return this.request.post(this.routes.descriptions, data);\n    }\n\n    getServiceDescriptions() {\n        return this.request.get(this.routes.descriptions);\n    }\n\n    setOptions(data) {\n        this.deleteCaches().then((response) => {\n            console.log(response);\n        });\n        return this.request.post(this.routes.options, data);\n    }\n\n    getOptions() {\n        return this.request.get(this.routes.options);\n    }\n\n    deleteCaches() {\n        return this.request.post(this.routes.delete_caches, {});\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (JimsServices);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/jims-services.mjs?")},"./assets/src/js/services/log.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst log = new class {\n\n    /**\n     * Checks if the host is localhost, 127.0.0.1 or the domain name has .local in the end\n     * @return boolean\n     */\n    isDev(){\n        //get window host\n        let host = window.location.host;\n\n        //check if is local web server\n        if(host === 'localhost' || host === '127.0.0.1' || host.endsWith('.local') || window.wpcbDebug === true){\n            return true;\n        }\n\n        return false;\n    }\n\n    //create function for each console method and do console log only if isDev is true\n    log(...args){\n        if(this.isDev()){\n            console.log(...args);\n        }\n    }\n\n    warn(...args){\n        if(this.isDev()){\n            console.warn(...args);\n        }\n    }\n\n    error(...args){\n        if(this.isDev()){\n            console.error(...args);\n        }\n    }\n\n    info(...args){\n        if(this.isDev()){\n            console.info(...args);\n        }\n    }\n\n    debug(...args){\n        if(this.isDev()){\n            console.debug(...args);\n        }\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (log);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/log.mjs?")},"./assets/src/js/services/phone-number-validator.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/HttpRequest.mjs */ "./assets/src/js/components/HttpRequest.mjs");\n/**\n * Created by Konstantinos Tsatsarounos on 2023/7/11.\n *\n * This class validates Australian, New Zealand, Canadian, and United Kingdom phone numbers.\n */\n\n\nclass PhoneNumberValidator {\n\n    endpoint = \'jims-wpcb/v1/input-validation/phone\';\n\n    constructor(rest_url) {\n        this.countryCode = "";\n        this.phoneNumber = "";\n        this.rest_url = rest_url;\n    }\n\n    /**\n     * This method validates Australian, New Zealand, Canadian, and United Kingdom phone numbers.\n     * @param {string} countryCode\n     * @param {string} phoneNumber\n     * @returns Promise\n     */\n    validate(countryCode, phoneNumber) {\n        this.countryCode = countryCode;\n        this.phoneNumber = phoneNumber;\n\n        //remove non numeric characters\n        this.removeNonNumericCharacters();\n\n        let request = new _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__["default"](this.rest_url);\n\n        //create url query string\n        let query = new URLSearchParams();\n        query.append(\'country\', this.countryCode);\n        query.append(\'number\', this.phoneNumber);\n\n        return request.get(`${this.endpoint}?${query.toString()}`);\n    }\n\n    removeNonNumericCharacters() {\n        this.phoneNumber = this.phoneNumber.replace(/[^0-9]/g, \'\');\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PhoneNumberValidator);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/services/phone-number-validator.mjs?')},"./assets/src/js/types/booking-request.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * @namespace Types\n * @type {Types.BookingRequest}\n */\nclass BookingRequest {\n\n    firstname = '';\n\n    lastname = '';\n\n    email = '';\n\n    phone = '';\n\n    address = [];\n\n    comments = '';\n\n    businessName = '';\n\n    services = [];\n\n    constructor(firstname, lastname, email, phone, address, comments, businessName, services) {\n        this.firstname = firstname;\n        this.lastname = lastname;\n        this.email = email;\n        this.phone = phone;\n        this.address = address;\n        this.comments = comments;\n        this.businessName = businessName;\n        this.services = services;\n    }\n\n    getProperties() {\n        return {\n            firstname: this.firstname,\n            lastname: this.lastname,\n            email: this.email,\n            phone: this.phone,\n            address: this.address,\n            comments: this.comments,\n            businessName: this.businessName,\n            services: this.services\n        };\n    }\n\n    getFormData() {\n        const formData = new FormData();\n        formData.append('firstname', this.firstname);\n        formData.append('lastname', this.lastname);\n        formData.append('email', this.email);\n        formData.append('phone', this.phone);\n        formData.append('address', this.address);\n        formData.append('comments', this.comments);\n        formData.append('businessName', this.businessName);\n        return formData;\n    }\n\n    getJSON() {\n        return JSON.stringify(this.getProperties());\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BookingRequest);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/types/booking-request.mjs?")},"./assets/src/js/types/fms-provider.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/HttpRequest.mjs */ \"./assets/src/js/components/HttpRequest.mjs\");\n/* harmony import */ var _franchisee_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./franchisee.mjs */ \"./assets/src/js/types/franchisee.mjs\");\n/**\n * Created by Konstantinos Tsatsarounos on 3/11/23\n */\n\n\n\n/**\n * A wrapper for the Franchisee object\n *\n */\nclass FmsProvider {\n\n    #endpoints = {\n        'photo' : 'jims-wpcb/v1/customer-booking/url/fse-photo'\n    };\n\n    #requiredProperties = [\n        'business_id',\n        'agaccount_id',\n        'pl_insurance',\n        'call_back_message',\n        'display_name',\n        'star_rating',\n        'is_jims_franchisee',\n        'is_gold_contractor',\n        'is_jims_franchisee',\n        'is_police_checked',\n        'is_work_guaranteed',\n        'only_available_previous_client'\n    ];\n\n    #options = {};\n\n    /**\n     * @type {Franchisee}\n     */\n    provider = null;\n\n    /**\n     * @param {Object|Franchisee} provider\n     * @param options\n     */\n    constructor(provider, options={}) {\n        if (!this.validate(provider)) {\n            throw new Error('Invalid provider object');\n        }\n\n        this.#options = options;\n\n        //check if provider is a Franchisee object\n        this.provider = provider instanceof _franchisee_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? provider : new _franchisee_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"](provider);\n    }\n\n    /**\n     * @returns object of checks, ex: is police checked, work warranty\n     */\n    getChecks() {\n        return {\n            isPoliceChecked: this.provider.is_police_checked,\n            isWorkWarranty: this.provider.is_work_guaranteed\n        };\n    }\n\n    getMessage() {\n        return this.provider.call_back_message;\n    }\n\n    getVideo() {\n        throw new Error('Not implemented');\n    }\n\n    setPhoto(selector) {\n        if(this.#options.siteUrl){\n            let request = new _components_HttpRequest_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.#options.siteUrl);\n            let photo_id = this.provider.business_id;\n            let is_contractor = this.provider.is_jims_franchisee ? 0 : 1;\n\n            if(!this.provider.is_jims_franchisee && this.provider.agaccount_id){\n                photo_id = this.provider.agaccount_id;\n            }\n\n            request.get(`${this.#endpoints.photo}?fse_business_id=${photo_id}&is_contractor=${is_contractor}`).then((response) => {\n                let imageElements = document.querySelectorAll(selector);\n\n                Object.values(imageElements).forEach((imageElement) => {\n                  let defaultImage = imageElement.getAttribute('src');\n                    console.log(defaultImage);\n                  this.checkImageExists(response.url, (exists) => {\n                      if (exists) {\n                            imageElement.setAttribute('src', response.url);\n                      } else {\n                            imageElement.setAttribute('src', defaultImage);\n                      }\n                  });\n                });\n            });\n        }\n    }\n\n    getName() {\n        return this.provider.display_name;\n    }\n\n    getRating() {\n        if (this.provider.star_rating === null || this.provider.star_rating === 0) {\n            return 0;\n        }\n\n        let rating = parseFloat( this.provider.star_rating );\n\n        return  Math.round(rating * 100) / 100;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isContractor() {\n        return this.provider.isContractor();\n    }\n\n    isFranchisee() {\n        return this.provider.is_jims_franchisee;\n    }\n\n    isGoldContractor() {\n        return this.provider.is_gold_contractor && this.isContractor();\n    }\n\n    isAvailableForNewClients() {\n        return !this.provider.only_available_previous_client;\n    }\n\n    validate(providerObject) {\n        let result = true;\n\n        //check if has the required properties\n        this.#requiredProperties.forEach((property) => {\n            if (!providerObject.hasOwnProperty(property)) {\n                result = false;\n            }\n        });\n\n        return result;\n    }\n\n    checkImageExists(imageUrl, callBack) {\n        const img = new Image();\n        img.src = imageUrl;\n\n        if (img.complete) {\n            callBack(true);\n        } else {\n            img.onload = () => {\n                callBack(true);\n            };\n\n            img.onerror = () => {\n                callBack(false);\n            };\n        }\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FmsProvider);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/types/fms-provider.mjs?")},"./assets/src/js/types/franchisee.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n\nclass Franchisee{\n    //predifine all the properties\n    business_id = null;\n    agaccount_id = null;\n    photo = null;\n    display_name = null;\n    company_name = null;\n    user_name = null;\n    suburb = null;\n    state = null;\n    country_id = null;\n    main_person_id = null;\n    is_jims_franchisee = null;\n    default_franchisee = null;\n    territory_holder = null;\n    free_leads_remaining = null;\n    only_available_previous_client = null;\n    is_police_checked = null;\n    is_work_guaranteed = null;\n    licenses = null;\n    available_date_time = null;\n    star_rating = null;\n    p_rating = null;\n    trust_number = null;\n    call_back_message = null;\n    call_back_period = null;\n    star_rating_count_one = null;\n    star_rating_count_two = null;\n    star_rating_count_three = null;\n    star_rating_count_four = null;\n    star_rating_count_five = null;\n    search_entry_id = null;\n    ppc_info_included = null;\n    ppc_amount_in_cents = null;\n    effective_max_bid_in_cents = null;\n    minimum_bid_override = null;\n    distance = null;\n    geocode_x = null;\n    geocode_y = null;\n    tie_breaker = null;\n    display_distance = null;\n    package_free_leads = null;\n    is_gold_contractor = null;\n    same_day_service = null;\n    direct_transfer_from_cc = null;\n    mobile = null;\n    work_phone = null;\n    home_phone = null;\n    pl_insurance = null;\n    id = null;\n    date_created = null;\n    date_modified = null;\n    created_by_string = null;\n    created_by_user_id = null;\n    modified_by_string = null;\n    modified_by_user_id = null;\n    deleted = null;\n    record_state = null;\n    record_state_text = null;\n\n\n    constructor(data) {\n        this.business_id = data.business_id;\n        this.agaccount_id = data.agaccount_id;\n        this.photo = data.photo;\n        this.display_name = data.display_name;\n        this.company_name = data.company_name;\n        this.user_name = data.user_name;\n        this.suburb = data.suburb;\n        this.state = data.state;\n        this.country_id = data.country_id;\n        this.main_person_id = data.main_person_id;\n        this.is_jims_franchisee = data.is_jims_franchisee;\n        this.default_franchisee = data.default_franchisee;\n        this.territory_holder = data.territory_holder;\n        this.free_leads_remaining = data.free_leads_remaining;\n        this.only_available_previous_client = data.only_available_previous_client;\n        this.is_police_checked = data.is_police_checked;\n        this.is_work_guaranteed = data.is_work_guaranteed;\n        this.licenses = data.licenses;\n        this.available_date_time = data.available_date_time;\n        this.star_rating = data.star_rating;\n        this.p_rating = data.p_rating;\n        this.trust_number = data.trust_number;\n        this.call_back_message = data.call_back_message;\n        this.call_back_period = data.call_back_period;\n        this.star_rating_count_one = data.star_rating_count_one;\n        this.star_rating_count_two = data.star_rating_count_two;\n        this.star_rating_count_three = data.star_rating_count_three;\n        this.star_rating_count_four = data.star_rating_count_four;\n        this.star_rating_count_five = data.star_rating_count_five;\n        this.search_entry_id = data.search_entry_id;\n        this.ppc_info_included = data.ppc_info_included;\n        this.ppc_amount_in_cents = data.ppc_amount_in_cents;\n        this.effective_max_bid_in_cents = data.effective_max_bid_in_cents;\n        this.minimum_bid_override = data.minimum_bid_override;\n        this.distance = data.distance;\n        this.geocode_x = data.geocode_x;\n        this.geocode_y = data.geocode_y;\n        this.tie_breaker = data.tie_breaker;\n        this.display_distance = data.display_distance;\n        this.package_free_leads = data.package_free_leads;\n        this.is_gold_contractor = data.is_gold_contractor;\n        this.same_day_service = data.same_day_service;\n        this.direct_transfer_from_cc = data.direct_transfer_from_cc;\n        this.mobile = data.mobile;\n        this.work_phone = data.work_phone;\n        this.home_phone = data.home_phone;\n        this.pl_insurance = data.pl_insurance;\n        this.id = data.id;\n        this.date_created = data.date_created;\n        this.date_modified = data.date_modified;\n        this.created_by_string = data.created_by_string;\n        this.created_by_user_id = data.created_by_user_id;\n        this.modified_by_string = data.modified_by_string;\n        this.modified_by_user_id = data.modified_by_user_id;\n        this.deleted = data.deleted;\n        this.record_state = data.record_state;\n        this.record_state_text = data.record_state_text;\n    }\n\n    isContractor() {\n        return this.is_jims_franchisee === false;\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Franchisee);\n\n//# sourceURL=webpack://jims-wpcb/./assets/src/js/types/franchisee.mjs?')},"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (/* binding */ _asyncToGenerator)\n/* harmony export */ });\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n      args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);\n      }\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);\n      }\n      _next(undefined);\n    });\n  };\n}\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js?')},"./node_modules/@kurkle/color/dist/color.esm.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Color: () => (/* binding */ Color),\n/* harmony export */   b2n: () => (/* binding */ b2n),\n/* harmony export */   b2p: () => (/* binding */ b2p),\n/* harmony export */   \"default\": () => (/* binding */ index_esm),\n/* harmony export */   hexParse: () => (/* binding */ hexParse),\n/* harmony export */   hexString: () => (/* binding */ hexString),\n/* harmony export */   hsl2rgb: () => (/* binding */ hsl2rgb),\n/* harmony export */   hslString: () => (/* binding */ hslString),\n/* harmony export */   hsv2rgb: () => (/* binding */ hsv2rgb),\n/* harmony export */   hueParse: () => (/* binding */ hueParse),\n/* harmony export */   hwb2rgb: () => (/* binding */ hwb2rgb),\n/* harmony export */   lim: () => (/* binding */ lim),\n/* harmony export */   n2b: () => (/* binding */ n2b),\n/* harmony export */   n2p: () => (/* binding */ n2p),\n/* harmony export */   nameParse: () => (/* binding */ nameParse),\n/* harmony export */   p2b: () => (/* binding */ p2b),\n/* harmony export */   rgb2hsl: () => (/* binding */ rgb2hsl),\n/* harmony export */   rgbParse: () => (/* binding */ rgbParse),\n/* harmony export */   rgbString: () => (/* binding */ rgbString),\n/* harmony export */   rotate: () => (/* binding */ rotate),\n/* harmony export */   round: () => (/* binding */ round)\n/* harmony export */ });\n/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\n\n\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/@kurkle/color/dist/color.esm.js?")},"./node_modules/chart.js/dist/chunks/helpers.segment.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: () => (/* binding */ unclipArea),\n/* harmony export */   A: () => (/* binding */ _rlookupByKey),\n/* harmony export */   B: () => (/* binding */ _lookupByKey),\n/* harmony export */   C: () => (/* binding */ _isPointInArea),\n/* harmony export */   D: () => (/* binding */ getAngleFromPoint),\n/* harmony export */   E: () => (/* binding */ toPadding),\n/* harmony export */   F: () => (/* binding */ each),\n/* harmony export */   G: () => (/* binding */ getMaximumSize),\n/* harmony export */   H: () => (/* binding */ HALF_PI),\n/* harmony export */   I: () => (/* binding */ _getParentNode),\n/* harmony export */   J: () => (/* binding */ readUsedSize),\n/* harmony export */   K: () => (/* binding */ supportsEventListenerOptions),\n/* harmony export */   L: () => (/* binding */ throttled),\n/* harmony export */   M: () => (/* binding */ _isDomSupported),\n/* harmony export */   N: () => (/* binding */ _factorize),\n/* harmony export */   O: () => (/* binding */ finiteOrDefault),\n/* harmony export */   P: () => (/* binding */ PI),\n/* harmony export */   Q: () => (/* binding */ callback),\n/* harmony export */   R: () => (/* binding */ _addGrace),\n/* harmony export */   S: () => (/* binding */ _limitValue),\n/* harmony export */   T: () => (/* binding */ TAU),\n/* harmony export */   U: () => (/* binding */ toDegrees),\n/* harmony export */   V: () => (/* binding */ _measureText),\n/* harmony export */   W: () => (/* binding */ _int16Range),\n/* harmony export */   X: () => (/* binding */ _alignPixel),\n/* harmony export */   Y: () => (/* binding */ clipArea),\n/* harmony export */   Z: () => (/* binding */ renderText),\n/* harmony export */   _: () => (/* binding */ _arrayUnique),\n/* harmony export */   a: () => (/* binding */ resolve),\n/* harmony export */   a$: () => (/* binding */ fontString),\n/* harmony export */   a0: () => (/* binding */ toFont),\n/* harmony export */   a1: () => (/* binding */ _toLeftRightCenter),\n/* harmony export */   a2: () => (/* binding */ _alignStartEnd),\n/* harmony export */   a3: () => (/* binding */ overrides),\n/* harmony export */   a4: () => (/* binding */ merge),\n/* harmony export */   a5: () => (/* binding */ _capitalize),\n/* harmony export */   a6: () => (/* binding */ descriptors),\n/* harmony export */   a7: () => (/* binding */ isFunction),\n/* harmony export */   a8: () => (/* binding */ _attachContext),\n/* harmony export */   a9: () => (/* binding */ _createResolver),\n/* harmony export */   aA: () => (/* binding */ overrideTextDirection),\n/* harmony export */   aB: () => (/* binding */ _textX),\n/* harmony export */   aC: () => (/* binding */ restoreTextDirection),\n/* harmony export */   aD: () => (/* binding */ drawPointLegend),\n/* harmony export */   aE: () => (/* binding */ distanceBetweenPoints),\n/* harmony export */   aF: () => (/* binding */ noop),\n/* harmony export */   aG: () => (/* binding */ _setMinAndMaxByKey),\n/* harmony export */   aH: () => (/* binding */ niceNum),\n/* harmony export */   aI: () => (/* binding */ almostWhole),\n/* harmony export */   aJ: () => (/* binding */ almostEquals),\n/* harmony export */   aK: () => (/* binding */ _decimalPlaces),\n/* harmony export */   aL: () => (/* binding */ Ticks),\n/* harmony export */   aM: () => (/* binding */ log10),\n/* harmony export */   aN: () => (/* binding */ _longestText),\n/* harmony export */   aO: () => (/* binding */ _filterBetween),\n/* harmony export */   aP: () => (/* binding */ _lookup),\n/* harmony export */   aQ: () => (/* binding */ isPatternOrGradient),\n/* harmony export */   aR: () => (/* binding */ getHoverColor),\n/* harmony export */   aS: () => (/* binding */ clone),\n/* harmony export */   aT: () => (/* binding */ _merger),\n/* harmony export */   aU: () => (/* binding */ _mergerIf),\n/* harmony export */   aV: () => (/* binding */ _deprecated),\n/* harmony export */   aW: () => (/* binding */ _splitKey),\n/* harmony export */   aX: () => (/* binding */ toFontString),\n/* harmony export */   aY: () => (/* binding */ splineCurve),\n/* harmony export */   aZ: () => (/* binding */ splineCurveMonotone),\n/* harmony export */   a_: () => (/* binding */ getStyle),\n/* harmony export */   aa: () => (/* binding */ _descriptors),\n/* harmony export */   ab: () => (/* binding */ mergeIf),\n/* harmony export */   ac: () => (/* binding */ uid),\n/* harmony export */   ad: () => (/* binding */ debounce),\n/* harmony export */   ae: () => (/* binding */ retinaScale),\n/* harmony export */   af: () => (/* binding */ clearCanvas),\n/* harmony export */   ag: () => (/* binding */ setsEqual),\n/* harmony export */   ah: () => (/* binding */ _elementsEqual),\n/* harmony export */   ai: () => (/* binding */ _isClickEvent),\n/* harmony export */   aj: () => (/* binding */ _isBetween),\n/* harmony export */   ak: () => (/* binding */ _readValueToProps),\n/* harmony export */   al: () => (/* binding */ _updateBezierControlPoints),\n/* harmony export */   am: () => (/* binding */ _computeSegments),\n/* harmony export */   an: () => (/* binding */ _boundSegments),\n/* harmony export */   ao: () => (/* binding */ _steppedInterpolation),\n/* harmony export */   ap: () => (/* binding */ _bezierInterpolation),\n/* harmony export */   aq: () => (/* binding */ _pointInLine),\n/* harmony export */   ar: () => (/* binding */ _steppedLineTo),\n/* harmony export */   as: () => (/* binding */ _bezierCurveTo),\n/* harmony export */   at: () => (/* binding */ drawPoint),\n/* harmony export */   au: () => (/* binding */ addRoundedRectPath),\n/* harmony export */   av: () => (/* binding */ toTRBL),\n/* harmony export */   aw: () => (/* binding */ toTRBLCorners),\n/* harmony export */   ax: () => (/* binding */ _boundSegment),\n/* harmony export */   ay: () => (/* binding */ _normalizeAngle),\n/* harmony export */   az: () => (/* binding */ getRtlAdapter),\n/* harmony export */   b: () => (/* binding */ isArray),\n/* harmony export */   b0: () => (/* binding */ toLineHeight),\n/* harmony export */   b1: () => (/* binding */ PITAU),\n/* harmony export */   b2: () => (/* binding */ INFINITY),\n/* harmony export */   b3: () => (/* binding */ RAD_PER_DEG),\n/* harmony export */   b4: () => (/* binding */ QUARTER_PI),\n/* harmony export */   b5: () => (/* binding */ TWO_THIRDS_PI),\n/* harmony export */   b6: () => (/* binding */ _angleDiff),\n/* harmony export */   c: () => (/* binding */ color),\n/* harmony export */   d: () => (/* binding */ defaults),\n/* harmony export */   e: () => (/* binding */ effects),\n/* harmony export */   f: () => (/* binding */ resolveObjectKey),\n/* harmony export */   g: () => (/* binding */ isNumberFinite),\n/* harmony export */   h: () => (/* binding */ defined),\n/* harmony export */   i: () => (/* binding */ isObject),\n/* harmony export */   j: () => (/* binding */ createContext),\n/* harmony export */   k: () => (/* binding */ isNullOrUndef),\n/* harmony export */   l: () => (/* binding */ listenArrayEvents),\n/* harmony export */   m: () => (/* binding */ toPercentage),\n/* harmony export */   n: () => (/* binding */ toDimension),\n/* harmony export */   o: () => (/* binding */ formatNumber),\n/* harmony export */   p: () => (/* binding */ _angleBetween),\n/* harmony export */   q: () => (/* binding */ _getStartAndCountOfVisiblePoints),\n/* harmony export */   r: () => (/* binding */ requestAnimFrame),\n/* harmony export */   s: () => (/* binding */ sign),\n/* harmony export */   t: () => (/* binding */ toRadians),\n/* harmony export */   u: () => (/* binding */ unlistenArrayEvents),\n/* harmony export */   v: () => (/* binding */ valueOrDefault),\n/* harmony export */   w: () => (/* binding */ _scaleRangesChanged),\n/* harmony export */   x: () => (/* binding */ isNumber),\n/* harmony export */   y: () => (/* binding */ _parseObjectDataRadialScale),\n/* harmony export */   z: () => (/* binding */ getRelativePosition)\n/* harmony export */ });\n/* harmony import */ var _kurkle_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @kurkle/color */ \"./node_modules/@kurkle/color/dist/color.esm.js\");\n/*!\n * Chart.js v4.3.3\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\n\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\nfunction isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , _parsed  } = meta;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new _kurkle_color__WEBPACK_IMPORTED_MODULE_0__.Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new _kurkle_color__WEBPACK_IMPORTED_MODULE_0__.Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop)) {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = Math.floor(chart.height * pixelRatio);\n    const deviceWidth = Math.floor(chart.width * pixelRatio);\n    chart.height = Math.floor(chart.height);\n    chart.width = Math.floor(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        window.addEventListener('test', null, options);\n        window.removeEventListener('test', null, options);\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\n\n//# sourceMappingURL=helpers.segment.js.map\n\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/chart.js/dist/chunks/helpers.segment.js?")},"./node_modules/chart.js/dist/helpers.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   HALF_PI: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.H),\n/* harmony export */   INFINITY: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b2),\n/* harmony export */   PI: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.P),\n/* harmony export */   PITAU: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b1),\n/* harmony export */   QUARTER_PI: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b4),\n/* harmony export */   RAD_PER_DEG: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b3),\n/* harmony export */   TAU: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.T),\n/* harmony export */   TWO_THIRDS_PI: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b5),\n/* harmony export */   _addGrace: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.R),\n/* harmony export */   _alignPixel: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.X),\n/* harmony export */   _alignStartEnd: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a2),\n/* harmony export */   _angleBetween: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.p),\n/* harmony export */   _angleDiff: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b6),\n/* harmony export */   _arrayUnique: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__._),\n/* harmony export */   _attachContext: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a8),\n/* harmony export */   _bezierCurveTo: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.as),\n/* harmony export */   _bezierInterpolation: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ap),\n/* harmony export */   _boundSegment: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ax),\n/* harmony export */   _boundSegments: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.an),\n/* harmony export */   _capitalize: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a5),\n/* harmony export */   _computeSegments: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.am),\n/* harmony export */   _createResolver: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a9),\n/* harmony export */   _decimalPlaces: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aK),\n/* harmony export */   _deprecated: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aV),\n/* harmony export */   _descriptors: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aa),\n/* harmony export */   _elementsEqual: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ah),\n/* harmony export */   _factorize: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.N),\n/* harmony export */   _filterBetween: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aO),\n/* harmony export */   _getParentNode: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.I),\n/* harmony export */   _getStartAndCountOfVisiblePoints: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.q),\n/* harmony export */   _int16Range: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.W),\n/* harmony export */   _isBetween: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aj),\n/* harmony export */   _isClickEvent: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ai),\n/* harmony export */   _isDomSupported: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.M),\n/* harmony export */   _isPointInArea: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.C),\n/* harmony export */   _limitValue: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.S),\n/* harmony export */   _longestText: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aN),\n/* harmony export */   _lookup: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aP),\n/* harmony export */   _lookupByKey: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.B),\n/* harmony export */   _measureText: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.V),\n/* harmony export */   _merger: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aT),\n/* harmony export */   _mergerIf: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aU),\n/* harmony export */   _normalizeAngle: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ay),\n/* harmony export */   _parseObjectDataRadialScale: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.y),\n/* harmony export */   _pointInLine: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aq),\n/* harmony export */   _readValueToProps: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ak),\n/* harmony export */   _rlookupByKey: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.A),\n/* harmony export */   _scaleRangesChanged: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.w),\n/* harmony export */   _setMinAndMaxByKey: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aG),\n/* harmony export */   _splitKey: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aW),\n/* harmony export */   _steppedInterpolation: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ao),\n/* harmony export */   _steppedLineTo: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ar),\n/* harmony export */   _textX: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aB),\n/* harmony export */   _toLeftRightCenter: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a1),\n/* harmony export */   _updateBezierControlPoints: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.al),\n/* harmony export */   addRoundedRectPath: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.au),\n/* harmony export */   almostEquals: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aJ),\n/* harmony export */   almostWhole: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aI),\n/* harmony export */   callback: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.Q),\n/* harmony export */   clearCanvas: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.af),\n/* harmony export */   clipArea: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.Y),\n/* harmony export */   clone: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aS),\n/* harmony export */   color: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.c),\n/* harmony export */   createContext: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.j),\n/* harmony export */   debounce: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ad),\n/* harmony export */   defined: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.h),\n/* harmony export */   distanceBetweenPoints: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aE),\n/* harmony export */   drawPoint: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.at),\n/* harmony export */   drawPointLegend: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aD),\n/* harmony export */   each: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.F),\n/* harmony export */   easingEffects: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.e),\n/* harmony export */   finiteOrDefault: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.O),\n/* harmony export */   fontString: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a$),\n/* harmony export */   formatNumber: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.o),\n/* harmony export */   getAngleFromPoint: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.D),\n/* harmony export */   getHoverColor: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aR),\n/* harmony export */   getMaximumSize: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.G),\n/* harmony export */   getRelativePosition: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.z),\n/* harmony export */   getRtlAdapter: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.az),\n/* harmony export */   getStyle: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a_),\n/* harmony export */   isArray: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b),\n/* harmony export */   isFinite: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.g),\n/* harmony export */   isFunction: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a7),\n/* harmony export */   isNullOrUndef: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.k),\n/* harmony export */   isNumber: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.x),\n/* harmony export */   isObject: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.i),\n/* harmony export */   isPatternOrGradient: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aQ),\n/* harmony export */   listenArrayEvents: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.l),\n/* harmony export */   log10: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aM),\n/* harmony export */   merge: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a4),\n/* harmony export */   mergeIf: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ab),\n/* harmony export */   niceNum: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aH),\n/* harmony export */   noop: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aF),\n/* harmony export */   overrideTextDirection: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aA),\n/* harmony export */   readUsedSize: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.J),\n/* harmony export */   renderText: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.Z),\n/* harmony export */   requestAnimFrame: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.r),\n/* harmony export */   resolve: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a),\n/* harmony export */   resolveObjectKey: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.f),\n/* harmony export */   restoreTextDirection: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aC),\n/* harmony export */   retinaScale: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ae),\n/* harmony export */   setsEqual: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ag),\n/* harmony export */   sign: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.s),\n/* harmony export */   splineCurve: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aY),\n/* harmony export */   splineCurveMonotone: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aZ),\n/* harmony export */   supportsEventListenerOptions: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.K),\n/* harmony export */   throttled: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.L),\n/* harmony export */   toDegrees: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.U),\n/* harmony export */   toDimension: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.n),\n/* harmony export */   toFont: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.a0),\n/* harmony export */   toFontString: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aX),\n/* harmony export */   toLineHeight: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.b0),\n/* harmony export */   toPadding: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.E),\n/* harmony export */   toPercentage: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.m),\n/* harmony export */   toRadians: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.t),\n/* harmony export */   toTRBL: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.av),\n/* harmony export */   toTRBLCorners: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.aw),\n/* harmony export */   uid: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.ac),\n/* harmony export */   unclipArea: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.$),\n/* harmony export */   unlistenArrayEvents: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.u),\n/* harmony export */   valueOrDefault: () => (/* reexport safe */ _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__.v)\n/* harmony export */ });\n/* harmony import */ var _chunks_helpers_segment_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/helpers.segment.js */ "./node_modules/chart.js/dist/chunks/helpers.segment.js");\n/*!\n * Chart.js v4.3.3\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\n\n\n//# sourceMappingURL=helpers.js.map\n\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/chart.js/dist/helpers.js?')},"./node_modules/chart.js/helpers/helpers.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   HALF_PI: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.HALF_PI),\n/* harmony export */   INFINITY: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.INFINITY),\n/* harmony export */   PI: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.PI),\n/* harmony export */   PITAU: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.PITAU),\n/* harmony export */   QUARTER_PI: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.QUARTER_PI),\n/* harmony export */   RAD_PER_DEG: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.RAD_PER_DEG),\n/* harmony export */   TAU: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.TAU),\n/* harmony export */   TWO_THIRDS_PI: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.TWO_THIRDS_PI),\n/* harmony export */   _addGrace: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._addGrace),\n/* harmony export */   _alignPixel: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._alignPixel),\n/* harmony export */   _alignStartEnd: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._alignStartEnd),\n/* harmony export */   _angleBetween: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._angleBetween),\n/* harmony export */   _angleDiff: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._angleDiff),\n/* harmony export */   _arrayUnique: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._arrayUnique),\n/* harmony export */   _attachContext: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._attachContext),\n/* harmony export */   _bezierCurveTo: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._bezierCurveTo),\n/* harmony export */   _bezierInterpolation: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._bezierInterpolation),\n/* harmony export */   _boundSegment: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._boundSegment),\n/* harmony export */   _boundSegments: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._boundSegments),\n/* harmony export */   _capitalize: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._capitalize),\n/* harmony export */   _computeSegments: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._computeSegments),\n/* harmony export */   _createResolver: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._createResolver),\n/* harmony export */   _decimalPlaces: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._decimalPlaces),\n/* harmony export */   _deprecated: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._deprecated),\n/* harmony export */   _descriptors: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._descriptors),\n/* harmony export */   _elementsEqual: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._elementsEqual),\n/* harmony export */   _factorize: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._factorize),\n/* harmony export */   _filterBetween: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._filterBetween),\n/* harmony export */   _getParentNode: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._getParentNode),\n/* harmony export */   _getStartAndCountOfVisiblePoints: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._getStartAndCountOfVisiblePoints),\n/* harmony export */   _int16Range: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._int16Range),\n/* harmony export */   _isBetween: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._isBetween),\n/* harmony export */   _isClickEvent: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._isClickEvent),\n/* harmony export */   _isDomSupported: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._isDomSupported),\n/* harmony export */   _isPointInArea: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._isPointInArea),\n/* harmony export */   _limitValue: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._limitValue),\n/* harmony export */   _longestText: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._longestText),\n/* harmony export */   _lookup: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._lookup),\n/* harmony export */   _lookupByKey: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._lookupByKey),\n/* harmony export */   _measureText: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._measureText),\n/* harmony export */   _merger: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._merger),\n/* harmony export */   _mergerIf: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._mergerIf),\n/* harmony export */   _normalizeAngle: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._normalizeAngle),\n/* harmony export */   _parseObjectDataRadialScale: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._parseObjectDataRadialScale),\n/* harmony export */   _pointInLine: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._pointInLine),\n/* harmony export */   _readValueToProps: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._readValueToProps),\n/* harmony export */   _rlookupByKey: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._rlookupByKey),\n/* harmony export */   _scaleRangesChanged: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._scaleRangesChanged),\n/* harmony export */   _setMinAndMaxByKey: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._setMinAndMaxByKey),\n/* harmony export */   _splitKey: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._splitKey),\n/* harmony export */   _steppedInterpolation: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._steppedInterpolation),\n/* harmony export */   _steppedLineTo: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._steppedLineTo),\n/* harmony export */   _textX: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._textX),\n/* harmony export */   _toLeftRightCenter: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._toLeftRightCenter),\n/* harmony export */   _updateBezierControlPoints: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__._updateBezierControlPoints),\n/* harmony export */   addRoundedRectPath: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.addRoundedRectPath),\n/* harmony export */   almostEquals: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.almostEquals),\n/* harmony export */   almostWhole: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.almostWhole),\n/* harmony export */   callback: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.callback),\n/* harmony export */   clearCanvas: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.clearCanvas),\n/* harmony export */   clipArea: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.clipArea),\n/* harmony export */   clone: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.clone),\n/* harmony export */   color: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.color),\n/* harmony export */   createContext: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.createContext),\n/* harmony export */   debounce: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.debounce),\n/* harmony export */   defined: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.defined),\n/* harmony export */   distanceBetweenPoints: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.distanceBetweenPoints),\n/* harmony export */   drawPoint: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.drawPoint),\n/* harmony export */   drawPointLegend: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.drawPointLegend),\n/* harmony export */   each: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.each),\n/* harmony export */   easingEffects: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.easingEffects),\n/* harmony export */   finiteOrDefault: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.finiteOrDefault),\n/* harmony export */   fontString: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.fontString),\n/* harmony export */   formatNumber: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.formatNumber),\n/* harmony export */   getAngleFromPoint: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getAngleFromPoint),\n/* harmony export */   getHoverColor: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getHoverColor),\n/* harmony export */   getMaximumSize: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getMaximumSize),\n/* harmony export */   getRelativePosition: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getRelativePosition),\n/* harmony export */   getRtlAdapter: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getRtlAdapter),\n/* harmony export */   getStyle: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.getStyle),\n/* harmony export */   isArray: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isArray),\n/* harmony export */   isFinite: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isFinite),\n/* harmony export */   isFunction: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isFunction),\n/* harmony export */   isNullOrUndef: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isNullOrUndef),\n/* harmony export */   isNumber: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isNumber),\n/* harmony export */   isObject: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isObject),\n/* harmony export */   isPatternOrGradient: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.isPatternOrGradient),\n/* harmony export */   listenArrayEvents: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.listenArrayEvents),\n/* harmony export */   log10: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.log10),\n/* harmony export */   merge: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.merge),\n/* harmony export */   mergeIf: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.mergeIf),\n/* harmony export */   niceNum: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.niceNum),\n/* harmony export */   noop: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.noop),\n/* harmony export */   overrideTextDirection: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.overrideTextDirection),\n/* harmony export */   readUsedSize: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.readUsedSize),\n/* harmony export */   renderText: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.renderText),\n/* harmony export */   requestAnimFrame: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.requestAnimFrame),\n/* harmony export */   resolve: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.resolve),\n/* harmony export */   resolveObjectKey: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.resolveObjectKey),\n/* harmony export */   restoreTextDirection: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.restoreTextDirection),\n/* harmony export */   retinaScale: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.retinaScale),\n/* harmony export */   setsEqual: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.setsEqual),\n/* harmony export */   sign: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.sign),\n/* harmony export */   splineCurve: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.splineCurve),\n/* harmony export */   splineCurveMonotone: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.splineCurveMonotone),\n/* harmony export */   supportsEventListenerOptions: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.supportsEventListenerOptions),\n/* harmony export */   throttled: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.throttled),\n/* harmony export */   toDegrees: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toDegrees),\n/* harmony export */   toDimension: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toDimension),\n/* harmony export */   toFont: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toFont),\n/* harmony export */   toFontString: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toFontString),\n/* harmony export */   toLineHeight: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toLineHeight),\n/* harmony export */   toPadding: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toPadding),\n/* harmony export */   toPercentage: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toPercentage),\n/* harmony export */   toRadians: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toRadians),\n/* harmony export */   toTRBL: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toTRBL),\n/* harmony export */   toTRBLCorners: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.toTRBLCorners),\n/* harmony export */   uid: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.uid),\n/* harmony export */   unclipArea: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.unclipArea),\n/* harmony export */   unlistenArrayEvents: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.unlistenArrayEvents),\n/* harmony export */   valueOrDefault: () => (/* reexport safe */ _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__.valueOrDefault)\n/* harmony export */ });\n/* harmony import */ var _dist_helpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dist/helpers.js */ "./node_modules/chart.js/dist/helpers.js");\n\n\n\n//# sourceURL=webpack://jims-wpcb/./node_modules/chart.js/helpers/helpers.js?')}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(n,{a:n}),n},__webpack_require__.d=(e,n)=>{for(var t in n)__webpack_require__.o(n,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__webpack_require__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__("./assets/src/js/front.js")})()
;var wprevpublicjs_script_vars={"wpfb_nonce":"bf094fe234","wpfb_ajaxurl":"https:\/\/jimsit.com.au\/wp-admin\/admin-ajax.php","wprevpluginsurl":"https:\/\/jimsit.com.au\/wp-content\/plugins\/wp-google-places-review-slider"}
;!function(a){"object"==typeof module&&"object"==typeof module.exports?a(require("jquery")):"function"==typeof define&&define.amd?define([],a(window.jQuery)):a(window.jQuery)}(function(a){return a?(a.Unslider=function(b,c){var d=this;return d._="wprs_unslider",d.defaults={autoplay:!1,delay:3e3,speed:750,easing:"swing",keys:{prev:37,next:39},nav:!0,arrows:{prev:'<span class="'+d._+'-arrow prev">Prev</span>',next:'<span class="'+d._+'-arrow next">Next</span>'},animation:"horizontal",selectors:{container:"ul:first",slides:"li"},animateHeight:!1,activeClass:d._+"-active",swipe:!0,swipeThreshold:.2},d.$context=b,d.options={},d.$parent=null,d.$container=null,d.$slides=null,d.$nav=null,d.$arrows=[],d.total=0,d.current=0,d.prefix=d._+"-",d.eventSuffix="."+d.prefix+~~(2e3*Math.random()),d.interval=null,d.init=function(b){return d.options=a.extend({},d.defaults,b),d.$container=d.$context.find(d.options.selectors.container).addClass(d.prefix+"wrap"),d.$slides=d.$container.children(d.options.selectors.slides),d.setup(),a.each(["nav","arrows","keys","infinite"],function(b,c){d.options[c]&&d["init"+a._ucfirst(c)]()}),jQuery.event.special.swipe&&d.options.swipe&&d.initSwipe(),d.options.autoplay&&d.start(),d.calculateSlides(),d.$context.trigger(d._+".ready"),d.animate(d.options.index||d.current,"init")},d.setup=function(){d.$context.addClass(d.prefix+d.options.animation).wrap('<div class="'+d._+'" />'),d.$parent=d.$context.parent("."+d._);var a=d.$context.css("position");"static"===a&&d.$context.css("position","relative"),d.$context.css("overflow","hidden")},d.calculateSlides=function(){if(d.$slides=d.$container.children(d.options.selectors.slides),d.total=d.$slides.length,"fade"!==d.options.animation){var a="width";"vertical"===d.options.animation&&(a="height"),d.$container.css(a,100*d.total+"%").addClass(d.prefix+"carousel"),d.$slides.css(a,100/d.total+"%")}},d.start=function(){return d.interval=setTimeout(function(){d.next()},d.options.delay),d},d.stop=function(){return clearTimeout(d.interval),d},d.initNav=function(){var b=a('<nav class="'+d.prefix+'nav"><ol /></nav>');d.$slides.each(function(c){var e=this.getAttribute("data-nav")||c+1;a.isFunction(d.options.nav)&&(e=d.options.nav.call(d.$slides.eq(c),c,e)),b.children("ol").append('<li data-slide="'+c+'">'+e+"</li>")}),d.$nav=b.insertAfter(d.$context),d.$nav.find("li").on("click"+d.eventSuffix,function(){var b=a(this).addClass(d.options.activeClass);b.siblings().removeClass(d.options.activeClass),d.animate(b.attr("data-slide"))})},d.initArrows=function(){d.options.arrows===!0&&(d.options.arrows=d.defaults.arrows),a.each(d.options.arrows,function(b,c){d.$arrows.push(a(c).insertAfter(d.$context).on("click"+d.eventSuffix,d[b]))})},d.initKeys=function(){d.options.keys===!0&&(d.options.keys=d.defaults.keys),a(document).on("keyup"+d.eventSuffix,function(b){a.each(d.options.keys,function(c,e){b.which===e&&a.isFunction(d[c])&&d[c].call(d)})})},d.initSwipe=function(){var a=d.$slides.width();"fade"!==d.options.animation&&d.$container.on({movestart:function(a){return a.distX>a.distY&&a.distX<-a.distY||a.distX<a.distY&&a.distX>-a.distY?!!a.preventDefault():void d.$container.css("position","relative")},move:function(b){d.$container.css("left",-(100*d.current)+100*b.distX/a+"%")},moveend:function(b){Math.abs(b.distX)/a>d.options.swipeThreshold?d[b.distX<0?"next":"prev"]():d.$container.animate({left:-(100*d.current)+"%"},d.options.speed/2)}})},d.initInfinite=function(){var b=["first","last"];a.each(b,function(a,c){d.$slides.push.apply(d.$slides,d.$slides.filter(':not(".'+d._+'-clone")')[c]().clone().addClass(d._+"-clone")["insert"+(0===a?"After":"Before")](d.$slides[b[~~!a]]()))})},d.destroyArrows=function(){a.each(d.$arrows,function(a,b){b.remove()})},d.destroySwipe=function(){d.$container.off("movestart move moveend")},d.destroyKeys=function(){a(document).off("keyup"+d.eventSuffix)},d.setIndex=function(a){return a<0&&(a=d.total-1),d.current=Math.min(Math.max(0,a),d.total-1),d.options.nav&&d.$nav.find('[data-slide="'+d.current+'"]')._active(d.options.activeClass),d.$slides.eq(d.current)._active(d.options.activeClass),d},d.animate=function(b,c){if("first"===b&&(b=0),"last"===b&&(b=d.total),isNaN(b))return d;d.options.autoplay&&d.stop().start(),d.setIndex(b),d.$context.trigger(d._+".change",[b,d.$slides.eq(b)]);var e="animate"+a._ucfirst(d.options.animation);return a.isFunction(d[e])&&d[e](d.current,c),d},d.next=function(){var a=d.current+1;return a>=d.total&&(a=0),d.animate(a,"next")},d.prev=function(){return d.animate(d.current-1,"prev")},d.animateHorizontal=function(a){var b="left";return"rtl"===d.$context.attr("dir")&&(b="right"),d.options.infinite&&d.$container.css("margin-"+b,"-100%"),d.slide(b,a)},d.animateVertical=function(a){return d.options.animateHeight=!0,d.options.infinite&&d.$container.css("margin-top",-d.$slides.outerHeight()),d.slide("top",a)},d.slide=function(a,b){if(d.animateHeight(b),d.options.infinite){var c;b===d.total-1&&(c=d.total-3,b=-1),b===d.total-2&&(c=0,b=d.total-2),"number"==typeof c&&(d.setIndex(c),d.$context.on(d._+".moved",function(){d.current===c&&d.$container.css(a,-(100*c)+"%").off(d._+".moved")}))}var e={};return e[a]=-(100*b)+"%",d._move(d.$container,e)},d.animateFade=function(a){d.animateHeight(a);var b=d.$slides.eq(a).addClass(d.options.activeClass);d._move(b.siblings().removeClass(d.options.activeClass),{opacity:0}),d._move(b,{opacity:1},!1)},d.animateHeight=function(a){d.options.animateHeight&&d._move(d.$context,{height:d.$slides.eq(a).outerHeight()},!1)},d._move=function(a,b,c,e){return c!==!1&&(c=function(){d.$context.trigger(d._+".moved")}),a._move(b,e||d.options.speed,d.options.easing,c)},d.init(c)},a.fn._active=function(a){return this.addClass(a).siblings().removeClass(a)},a._ucfirst=function(a){return(a+"").toLowerCase().replace(/^./,function(a){return a.toUpperCase()})},a.fn._move=function(){return this.stop(!0,!0),a.fn[a.fn.velocity?"velocity":"animate"].apply(this,arguments)},void(a.fn.wprs_unslider=function(b){return this.each(function(c,d){var e=a(d),f=a(d).data("wprs_unslider");if(!(f instanceof a.Unslider)){if("string"==typeof b&&e.data("wprs_unslider")){b=b.split(":");var g=e.data("wprs_unslider")[b[0]];if(a.isFunction(g))return g.apply(e,b[1]?b[1].split(","):null)}return e.data("wprs_unslider",new a.Unslider(e,b))}})})):console.warn("Unslider needs jQuery")});

!function(e){"function"==typeof define&&define.amd?define([],e):"undefined"!=typeof module&&null!==module&&module.exports?module.exports=e:e()}(function(){var i=Object.assign||window.jQuery&&jQuery.extend,r=8,a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e,t){return window.setTimeout(function(){e()},25)},n={textarea:!0,input:!0,select:!0,button:!0},o={move:"mousemove",cancel:"mouseup dragstart",end:"mouseup"},c={move:"touchmove",cancel:"touchend",end:"touchend"},d=/\s+/;window.Symbol||function(e){"use strict";var t=Object.defineProperty,n="__symbol-"+Math.ceil(1e9*Math.random())+"-",i=0;function o(e){if(!(this instanceof o))return new o(e);e=n+i++;this._symbol=e}t(o.prototype,"toString",{enumerable:!1,configurable:!1,writable:!1,value:function(){return this._symbol}}),e.Symbol=o}(this);var u,m={bubbles:!0,cancelable:!0},t=Symbol("events");function s(e){return e[t]||(e[t]={})}function f(e,t,n,i){if(void 0!==e.addEventListener){t=t.split(d);var o,a=s(e),c=t.length;function u(e){n(e,i)}for(;c--;)(a[o=t[c]]||(a[o]=[])).push([n,u]),e.addEventListener(o,u)}}function v(e,t,n){t=t.split(d);var i,o,a,c=s(e),u=t.length;if(c)for(;u--;)if(o=c[i=t[u]])for(a=o.length;a--;)o[a][0]===n&&(e.removeEventListener(i,o[a][1]),o.splice(a,1))}function l(e,t,n){t=new CustomEvent(t,m);n&&i(t,n),e.dispatchEvent(t)}function g(e){var n=e,i=!1,o=!1;function t(e){i?(n(),a(t),i=!(o=!0)):o=!1}this.kick=function(e){i=!0,o||t()},this.end=function(e){var t=n;e&&(o?(n=i?function(){t(),e()}:e,i=!0):e())}}function p(){}function h(e){e.preventDefault()}function X(e,t){var n,i;if(e.identifiedTouch)return e.identifiedTouch(t);for(n=-1,i=e.length;++n<i;)if(e[n].identifier===t)return e[n]}function Y(e,t){e=X(e.changedTouches,t.identifier);if(e&&(e.pageX!==t.pageX||e.pageY!==t.pageY))return e}function y(e,t){S(e,t,e,b)}function w(e,t){b()}function b(){v(document,o.move,y),v(document,o.cancel,w)}function T(e){v(document,c.move,e.touchmove),v(document,c.cancel,e.touchend)}function S(e,t,n,i){var o,a,c=n.pageX-t.pageX,u=n.pageY-t.pageY;c*c+u*u<r*r||(a=t,t=n,n=c,c=u,u=i,i=(o=e).targetTouches,e=o.timeStamp-a.timeStamp,i={altKey:o.altKey,ctrlKey:o.ctrlKey,shiftKey:o.shiftKey,startX:a.pageX,startY:a.pageY,distX:n,distY:c,deltaX:n,deltaY:c,pageX:t.pageX,pageY:t.pageY,velocityX:n/e,velocityY:c/e,identifier:a.identifier,targetTouches:i,finger:i?i.length:1,enableMove:function(){this.moveEnabled=!0,this.enableMove=p,o.preventDefault()}},l(a.target,"movestart",i),u(a))}function k(e,t){var n=t.timer;t.touch=e,t.timeStamp=e.timeStamp,n.kick()}function j(e,t){var n=t.target,i=t.event,t=t.timer;v(document,o.move,k),v(document,o.end,j),K(n,i,t,function(){setTimeout(function(){v(n,"click",h)},0)})}function E(e,t){var n=t.target,i=t.event,o=t.timer;X(e.changedTouches,i.identifier)&&(t=t,v(document,c.move,t.activeTouchmove),v(document,c.end,t.activeTouchend),K(n,i,o))}function K(e,t,n,i){n.end(function(){return l(e,"moveend",t),i&&i()})}function e(e){e.enableMove()}function M(e){e.enableMove()}function Q(e){e.enableMove()}function q(e){var i=e.handler;e.handler=function(e){for(var t,n=u.length;n--;)e[t=u[n]]=e.originalEvent[t];i.apply(this,arguments)}}f(document,"mousedown",function(e){var t;1!==(t=e).which||t.ctrlKey||t.altKey||n[e.target.tagName.toLowerCase()]||(f(document,o.move,y,e),f(document,o.cancel,w,e))}),f(document,"touchstart",function(e){n[e.target.tagName.toLowerCase()]||(e={target:(e=e.changedTouches[0]).target,pageX:e.pageX,pageY:e.pageY,identifier:e.identifier,touchmove:function(e,t){var n;(t=Y(n=e,e=t))&&S(n,e,t,T)},touchend:function(e,t){t=t,X(e.changedTouches,t.identifier)&&T(t)}},f(document,c.move,e.touchmove,e),f(document,c.cancel,e.touchend,e))}),f(document,"movestart",function(e){var t,n;e.defaultPrevented||e.moveEnabled&&(t={startX:e.startX,startY:e.startY,pageX:e.pageX,pageY:e.pageY,distX:e.distX,distY:e.distY,deltaX:e.deltaX,deltaY:e.deltaY,velocityX:e.velocityX,velocityY:e.velocityY,identifier:e.identifier,targetTouches:e.targetTouches,finger:e.finger},n={target:e.target,event:t,timer:new g(function(e){(function(e,t,n){n-=e.timeStamp,e.distX=t.pageX-e.startX,e.distY=t.pageY-e.startY,e.deltaX=t.pageX-e.pageX,e.deltaY=t.pageY-e.pageY,e.velocityX=.3*e.velocityX+.7*e.deltaX/n,e.velocityY=.3*e.velocityY+.7*e.deltaY/n,e.pageX=t.pageX,e.pageY=t.pageY})(t,n.touch,n.timeStamp),l(n.target,"move",t)}),touch:void 0,timeStamp:e.timeStamp},void 0===e.identifier?(f(e.target,"click",h),f(document,o.move,k,n),f(document,o.end,j,n)):(n.activeTouchmove=function(e,t){var n,i,o;n=e,o=(i=t).event,e=i.timer,(t=Y(n,o))&&(n.preventDefault(),o.targetTouches=n.targetTouches,i.touch=t,i.timeStamp=n.timeStamp,e.kick())},n.activeTouchend=function(e,t){E(e,t)},f(document,c.move,n.activeTouchmove,n),f(document,c.end,n.activeTouchend,n)))}),window.jQuery&&(u="startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY".split(" "),jQuery.event.special.movestart={setup:function(){return f(this,"movestart",e),!1},teardown:function(){return v(this,"movestart",e),!1},add:q},jQuery.event.special.move={setup:function(){return f(this,"movestart",M),!1},teardown:function(){return v(this,"movestart",M),!1},add:q},jQuery.event.special.moveend={setup:function(){return f(this,"movestart",Q),!1},teardown:function(){return v(this,"movestart",Q),!1},add:q})});

void 0!==jQuery.event.swipe||function(e){"function"==typeof define&&define.amd?define(["jquery",void 0,"jquery.event.move"],e):"undefined"!=typeof module&&null!==module&&module.exports?module.exports=e:e(jQuery)}(function(e,t){var i=e.event.add,s=e.event.remove,n=function(t,i,s){e.event.trigger(i,s,t)},r={threshold:.4,sensitivity:6};function d(e){var t,i,s;t=e.currentTarget.offsetWidth,i=e.currentTarget.offsetHeight,s={distX:e.distX,distY:e.distY,velocityX:e.velocityX,velocityY:e.velocityY,finger:e.finger},e.distX>e.distY?e.distX>-e.distY?(e.distX/t>r.threshold||e.velocityX*e.distX/t*r.sensitivity>1)&&(s.type="swiperight",n(e.currentTarget,s)):(-e.distY/i>r.threshold||e.velocityY*e.distY/t*r.sensitivity>1)&&(s.type="swipeup",n(e.currentTarget,s)):e.distX>-e.distY?(e.distY/i>r.threshold||e.velocityY*e.distY/t*r.sensitivity>1)&&(s.type="swipedown",n(e.currentTarget,s)):(-e.distX/t>r.threshold||e.velocityX*e.distX/t*r.sensitivity>1)&&(s.type="swipeleft",n(e.currentTarget,s))}function o(t){var i=e.data(t,"event_swipe");return i||(i={count:0},e.data(t,"event_swipe",i)),i}e.event.special.swipe=e.event.special.swipeleft=e.event.special.swiperight=e.event.special.swipeup=e.event.special.swipedown={setup:function(e,t,s){if(!(o(this).count++>0))return i(this,"moveend",d),!0},teardown:function(){if(!(--o(this).count>0))return s(this,"moveend",d),!0},settings:r}});


(function( $ ) {
	'use strict';

	//document ready
	$(function(){
		
		//only show one review per a slide on mobile
		//get the attribute if it is set and this is in fact a slider
		$(".wprev-slider").each(function(){
			var oneonmobile = $(this).attr( "data-onemobil" );
			if(oneonmobile=='yes'){
				if (/Mobi|Android/i.test(navigator.userAgent) || $(window).width()<600) {
					/* this is a mobile device, continue */
					//get all the slider li elements, each li is a slide
					var li_elements_old = $(this).children('ul');
					console.log(li_elements_old);
					if(li_elements_old.length>0){
						//get array of all the divs containing the individual slide
						var divrevs = li_elements_old.find('.w3_wprs-col');
						var divrevarray = divrevs.get();
						//get the classes of the 2 divs under the li
						var div1class = divrevs.parent().attr('class');
						var div2class = divrevs.attr('class');
						console.log("div2class: "+div2class);
						//only continue if finding the divs
						if(typeof div2class !== "undefined"){
							//remove the l2, l3, l4, l5 , l6
							div2class = div2class.replace(/[a-z]\d\b/g, 'l12');
							//use the divrevarray to make new li elements with one review in each
							var newulhtml = '';
							var i;
							for (i = 0; i < divrevarray.length; i++) { 
								if(i==0){
									newulhtml += '<li class="wprs_unslider-active"><div class="'+div1class+'"><div class="'+div2class+'">'+divrevarray[i].innerHTML + '</div></div></li>';
								} else {
									newulhtml += '<li><div class="'+div1class+'"><div class="'+div2class+'">'+divrevarray[i].innerHTML + '</div></div></li>';
								}
							}
							//add the load more button if found
							if($(this).find('.wprevpro_load_more_div')[0]!== undefined){
								newulhtml += '<li>'+$(this).find('.wprevpro_load_more_div')[0].outerHTML+'</li>';
							}
							newulhtml +='';
							//replace the old li with the new
							li_elements_old.html(newulhtml);
							//re-initialize the slider if we need to
						}
					}
				}
			}
		});
		//}
		//----------------------
	 
			
			$( ".wprs_rd_more" ).click(function() {
				$(this ).hide();
				$(this ).next("span").show(0, function() {
					// Animation complete.
					$(this ).css('opacity', '1.0');
				  });
				//$(this ).next("span").css('opacity', '1.0');
				
				//change height of wprev-slider-widget
				$(this ).closest( ".wprev-slider-widget" ).css( "height", "auto" );
				
				//change height of wprev-slider
				$(this ).closest( ".wprev-slider" ).css( "height", "auto" );

			});
			
			//check to see if we need to create slider;
			$( ".wprev-slider" ).each(function( index ) {
				createaslider(this,'shortcode');
			});
			$( ".wprev-slider-widget" ).each(function( index ) {
				createaslider(this,'widget');
			});
			
			function createaslider(thissliderdiv,type){
				
				var sliderhideprevnext = $(thissliderdiv).attr( "data-sliderhideprevnext" );
				var sliderhidedots = $(thissliderdiv).attr( "data-sliderhidedots" );
				var sliderautoplay = $(thissliderdiv).attr( "data-sliderautoplay" );
				var slidespeed = $(thissliderdiv).attr( "data-slidespeed" );
				var slideautodelay = $(thissliderdiv).attr( "data-slideautodelay" );
				var sliderfixedheight = $(thissliderdiv).attr( "data-sliderfixedheight" );
				var revsameheight = $(thissliderdiv).attr( "data-revsameheight" );
				
				var showarrows = true;
				if(sliderhideprevnext=="yes"){
					var showarrows = false;
				}
				var shownav = true;
				if(sliderhidedots=="yes"){
					var shownav = false;
				}
				var sautoplay = false;
				if(sliderautoplay=="yes"){
					var sautoplay = true;
				}
				var sspeed = parseFloat(slidespeed) * 1000;
				var sdelay = parseFloat(slideautodelay) * 1000;
				if(sdelay<sspeed){
					sdelay = sspeed;
				}
				var sanimate = true;
				if(sliderfixedheight=="yes"){
					sanimate = false;
				}

				//unhide other rows.
				$( thissliderdiv ).find('li').show();
				var slider = $( thissliderdiv ).wprs_unslider(
						{
						autoplay:sautoplay,
						infinite:false,
						delay: sdelay,
						speed: sspeed,
						animation: 'horizontal',
						arrows: showarrows,
						nav:shownav,
						animateHeight: sanimate,
						activeClass: 'wprs_unslider-active',
						}
					);
				if(sanimate==true){
				setTimeout(function(){ 
					//height of active slide
					var firstheight = $(thissliderdiv).find('.wprs_unslider-active').height();
					$(thissliderdiv).css( 'height', firstheight );
					$(thissliderdiv).find("li.wprevnextslide").removeClass('wprevnextslide');
				}, 500);
				}
				
				if(sautoplay==true){
					slider.on('mouseover', function() {slider.data('wprs_unslider').stop();}).on('mouseout', function() {slider.data('wprs_unslider').start();});
				}
				
				//force height if set
				if(revsameheight=='yes'){
					var maxheights = $(thissliderdiv).find(".indrevdiv").map(function (){return $(this).outerHeight();}).get();
					var maxHeightofslide = Math.max.apply(null, maxheights);if(maxHeightofslide>0){$(thissliderdiv).find(".indrevdiv").css( "min-height", maxHeightofslide );}
				}
				
								
			};
			
			
		//simple tooltip for added elements and mobile devices
		$(".wprevpro_t1_outer_div").on('mouseenter touchstart', '.wprevtooltip', function(e) {
			var titleText = $(this).attr('data-wprevtooltip');
			$(this).data('tiptext', titleText).removeAttr('data-wprevtooltip');
			$('<p class="wprevpro_tooltip"></p>').text(titleText).appendTo('body').css('top', (e.pageY - 15) + 'px').css('left', (e.pageX + 10) + 'px').fadeIn('slow');
		});
		$(".wprevpro_t1_outer_div").on('mouseleave touchend', '.wprevtooltip', function(e) {
			$(this).attr('data-wprevtooltip', $(this).data('tiptext'));
			$('.wprevpro_tooltip').remove();
		});
		$(".wprevpro_t1_outer_div").on('mousemove', '.wprevtooltip', function(e) {
			$('.wprevpro_tooltip').css('top', (e.pageY - 15) + 'px').css('left', (e.pageX + 10) + 'px');
		});
		
		//going to search for media added to reviews and load lity if we find them.
		setTimeout(function(){ mediareviewpopup(); }, 1000);
		function mediareviewpopup(){
			var mediadiv = $(".wprev_media_div");
			//var mediadiv = $(document.getElementsByClassName("wprev_media_div"));
			if(mediadiv.length){
				//load js and css files.
				//console.log(wprevpublicjs_script_vars);
				/*
				$('<link/>', {
				   rel: 'stylesheet',
				   type: 'text/css',
				   href: wprevpublicjs_script_vars.wprevpluginsurl+"/public/css/lity.min.css"
				}).appendTo('head');
				*/
				//$.getScript(wprevpublicjs_script_vars.wprevpluginsurl+"/public/js/lity.min.js", function() {
					//script is loaded and ran on document root.
				//});
				$.getScript(wprevpublicjs_script_vars.wprevpluginsurl+"/public/js/fslightbox.js", function() {
					//script is loaded and ran on document root.
				});
				//setTimeout(function(){ refreshFsLightbox(); }, 1000);
			}
		}

		
			


		
	});

})( jQuery );
;var astraAddon={"sticky_active":"","svgIconClose":"<span class=\"ast-icon icon-close\"><\/span>","hf_account_show_menu_on":"hover","hf_account_action_type":"link","hook_sticky_footer":"","hook_sticky_footer_on_devices":"desktop","hook_custom_footer_break_point":"921","header_main_stick":"0","header_above_stick":"0","header_below_stick":"","stick_header_meta":"","header_main_stick_meta":"","header_above_stick_meta":"","header_below_stick_meta":"","sticky_header_on_devices":"desktop","sticky_header_style":"none","sticky_hide_on_scroll":"0","break_point":"768","tablet_break_point":"768","mobile_break_point":"544","header_main_shrink":"1","header_logo_width":"","responsive_header_logo_width":{"desktop":200,"tablet":"","mobile":""},"stick_origin_position":"","site_layout":"ast-full-width-layout","site_content_width":"1960","site_layout_padded_width":"1200","site_layout_box_width":"1200","header_builder_active":"1","component_limit":"10","is_header_builder_active":"1"}
;astraToggleSetupPro=function(e,t,a){var n,l,o,s=!1;if(0<(n="off-canvas"===e||"full-width"===e?(l=document.querySelectorAll("#ast-mobile-popup, #ast-mobile-header"),(o=t.classList.contains("ast-header-break-point")?document.querySelectorAll("#ast-mobile-header .main-header-menu-toggle"):document.querySelectorAll("#ast-desktop-header .main-header-menu-toggle")).length):t.classList.contains("ast-header-break-point")?(l=document.querySelectorAll("#ast-mobile-header"),(s=!(0<(n=(o=document.querySelectorAll("#ast-mobile-header .main-header-menu-toggle")).length)))?1:n):(l=document.querySelectorAll("#ast-desktop-header"),(o=document.querySelectorAll("#ast-desktop-header .main-header-menu-toggle")).length))||s)for(var r=0;r<n;r++)if(s||(o[r].setAttribute("data-index",r),a[r])||(a[r]=o[r],o[r].addEventListener("click",astraNavMenuToggle,!1)),void 0!==l[r])for(var d,i=0;i<l.length;i++)if(0<(d=document.querySelector("header.site-header").classList.contains("ast-builder-menu-toggle-link")?l[i].querySelectorAll("ul.main-header-menu .menu-item-has-children > .menu-link, ul.main-header-menu .ast-menu-toggle"):l[i].querySelectorAll("ul.main-header-menu .ast-menu-toggle")).length)for(var c=0;c<d.length;c++)d[c].addEventListener("click",AstraToggleSubMenu,!1)},astraNavMenuTogglePro=function(e,t,a,n){e.preventDefault();var l=e.target.closest("#ast-desktop-header"),o=document.querySelector("#masthead > #ast-desktop-header .ast-desktop-header-content"),s=(l=null!=l&&""!==l?l.querySelector(".main-header-menu-toggle"):document.querySelector("#masthead > #ast-desktop-header .main-header-menu-toggle"),document.querySelector("#masthead > #ast-desktop-header .ast-desktop-header-content .main-header-bar-navigation"));if("desktop"===e.currentTarget.trigger_type)null!==s&&""!==s&&void 0!==s&&(astraToggleClass(s,"toggle-on"),s.classList.contains("toggle-on")?s.style.display="block":s.style.display=""),astraToggleClass(l,"toggled"),l.classList.contains("toggled")?(t.classList.add("ast-main-header-nav-open"),"dropdown"===a&&(o.style.display="block")):(t.classList.remove("ast-main-header-nav-open"),o.style.display="none");else{e=document.querySelectorAll("#masthead > #ast-mobile-header .main-header-bar-navigation"),s=(menu_toggle_all=document.querySelectorAll("#masthead > #ast-mobile-header .main-header-menu-toggle"),"0"),l=!1;if(null!==n.closest("#ast-fixed-header")&&(e=document.querySelectorAll("#ast-fixed-header > #ast-mobile-header .main-header-bar-navigation"),menu_toggle_all=document.querySelectorAll("#ast-fixed-header .main-header-menu-toggle"),s="0",l=!0),void 0===e[s])return!1;for(var r=e[s].querySelectorAll(".menu-item-has-children"),d=0;d<r.length;d++){r[d].classList.remove("ast-submenu-expanded");for(var i=r[d].querySelectorAll(".sub-menu"),c=0;c<i.length;c++)i[c].style.display="none"}-1!==(n.getAttribute("class")||"").indexOf("main-header-menu-toggle")&&(astraToggleClass(e[s],"toggle-on"),astraToggleClass(menu_toggle_all[s],"toggled"),l&&1<menu_toggle_all.length&&astraToggleClass(menu_toggle_all[1],"toggled"),e[s].classList.contains("toggle-on")?(e[s].style.display="block",t.classList.add("ast-main-header-nav-open")):(e[s].style.display="",t.classList.remove("ast-main-header-nav-open")))}};let accountMenuToggle=function(){let n=astraAddon.hf_account_action_type&&"menu"===astraAddon.hf_account_action_type,l=n&&astraAddon.hf_account_show_menu_on&&"click"===astraAddon.hf_account_show_menu_on;var e=document.querySelectorAll(".ast-header-account-wrap");e&&e.forEach(t=>{let a=t.querySelector(".ast-account-nav-menu");document.addEventListener("pointerup",function(e){(l||n&&document.querySelector("body").classList.contains("ast-header-break-point"))&&a&&!t.contains(e.target)&&(a.style.right="",a.style.left="")});var e=t.querySelector(".ast-header-account-link");e&&e.addEventListener("click",function(e){(l||n&&document.querySelector("body").classList.contains("ast-header-break-point"))&&(headerSelectionPosition=e.target.closest(".site-header-section"))&&(headerSelectionPosition.classList.contains("site-header-section-left")?(a.style.left=""===a.style.left?"-100%":"",a.style.right=""===a.style.right?"auto":""):(a.style.right=""===a.style.right?"-100%":"",a.style.left=""===a.style.left?"auto":""))})})};document.addEventListener("astPartialContentRendered",function(){accountMenuToggle()}),window.addEventListener("load",function(){accountMenuToggle()}),document.addEventListener("astLayoutWidthChanged",function(){accountMenuToggle()});((o,r)=>{var s="astHookExtSticky",i=r.document,a=(jQuery(r).outerWidth(),jQuery(r).width()),n={dependent:[],max_width:"",site_layout:"",break_point:920,admin_bar_height_lg:32,admin_bar_height_sm:46,admin_bar_height_xs:0,stick_upto_scroll:0,gutter:0,wrap:"<div></div>",body_padding_support:!0,html_padding_support:!0,active_shrink:!1,shrink:{padding_top:"",padding_bottom:""},sticky_on_device:"desktop",header_style:"none",hide_on_scroll:"no"};function e(t,e){this.element=t,this.options=o.extend({},n,e),this._defaults=n,this._name=s,"1"==this.options.hide_on_scroll&&(this.navbarHeight=o(t).outerHeight()),this.lastScrollTop=0,this.delta=5,this.should_stick=!0,this.hideScrollInterval="",this.init()}e.prototype.stick_me=function(t,e){var o=jQuery(t.element),s=jQuery(r).outerWidth(),i=parseInt(t.options.stick_upto_scroll),a=parseInt(o.parent().attr("data-stick-maxwidth")),n=parseInt(o.parent().attr("data-stick-gutter"));"enabled"==(astraAddon.hook_sticky_header||"")&&(!("desktop"==t.options.sticky_on_device&&astraAddon.hook_custom_header_break_point>s||"mobile"==t.options.sticky_on_device&&astraAddon.hook_custom_header_break_point<=s)&&jQuery(r).scrollTop()>i?"none"==t.options.header_style&&("enabled"==t.options.active_shrink?(t.hasShrink(t,"stick"),i="none",o.hasClass("ast-custom-header")||(i=n),o.parent().css("min-height",o.outerHeight()),o.addClass("ast-header-sticky-active").stop().css({"max-width":a,top:i,"padding-top":t.options.shrink.padding_top,"padding-bottom":t.options.shrink.padding_bottom})):(t.hasShrink(t,"stick"),o.parent().css("min-height",o.outerHeight()),o.addClass("ast-header-sticky-active").stop().css({"max-width":a,top:n,"padding-top":t.options.shrink.padding_top,"padding-bottom":t.options.shrink.padding_bottom})),o.addClass("ast-sticky-shrunk").stop()):t.stickRelease(t)),"enabled"==(astraAddon.hook_sticky_footer||"")&&("desktop"==t.options.sticky_on_device&&astraAddon.hook_custom_footer_break_point>s||"mobile"==t.options.sticky_on_device&&astraAddon.hook_custom_footer_break_point<=s?t.stickRelease(t):(jQuery("body").addClass("ast-footer-sticky-active"),o.parent().css("min-height",o.outerHeight()),o.stop().css({"max-width":a})))},e.prototype.update_attrs=function(){var o,t=this,e=jQuery(t.element),s=parseInt(t.options.gutter),i=t.options.max_width;"none"==t.options.header_style&&(o=e.offset().top||0),"ast-box-layout"!=t.options.site_layout&&(i=jQuery("body").width()),t.options.dependent&&jQuery.each(t.options.dependent,function(t,e){jQuery(e).length&&"on"==jQuery(e).parent().attr("data-stick-support")&&(dependent_height=jQuery(e).outerHeight(),s+=parseInt(dependent_height),o-=parseInt(dependent_height))}),t.options.admin_bar_height_lg&&jQuery("#wpadminbar").length&&782<a&&(s+=parseInt(t.options.admin_bar_height_lg),o-=parseInt(t.options.admin_bar_height_lg)),t.options.admin_bar_height_sm&&jQuery("#wpadminbar").length&&600<=a&&a<=782&&(s+=parseInt(t.options.admin_bar_height_sm),o-=parseInt(t.options.admin_bar_height_sm)),t.options.admin_bar_height_xs&&jQuery("#wpadminbar").length&&(s+=parseInt(t.options.admin_bar_height_xs),o-=parseInt(t.options.admin_bar_height_xs)),t.options.body_padding_support&&(s+=parseInt(jQuery("body").css("padding-top"),10),o-=parseInt(jQuery("body").css("padding-top"),10)),t.options.html_padding_support&&(s+=parseInt(jQuery("html").css("padding-top"),10),o-=parseInt(jQuery("html").css("padding-top"),10)),t.options.stick_upto_scroll=o,"none"==t.options.header_style&&e.parent().css("min-height",e.outerHeight()).attr("data-stick-gutter",parseInt(s)).attr("data-stick-maxwidth",parseInt(i))},e.prototype.hasShrink=function(t,e){o(r).scrollTop()>jQuery(t.element).outerHeight()?jQuery("body").addClass("ast-shrink-custom-header"):jQuery("body").removeClass("ast-shrink-custom-header")},e.prototype.stickRelease=function(t){var e=jQuery(t.element);"enabled"==(astraAddon.hook_sticky_header||"")&&"none"==t.options.header_style&&(e.removeClass("ast-header-sticky-active").stop().css({"max-width":"",top:"",padding:""}),e.parent().css("min-height",""),e.removeClass("ast-sticky-shrunk").stop()),"enabled"==(astraAddon.hook_sticky_footer||"")&&jQuery("body").removeClass("ast-footer-sticky-active")},e.prototype.init=function(){var e,t;jQuery(this.element)&&(e=this,t=jQuery(e.element),parseInt(e.options.gutter),t.position().top,"none"==e.options.header_style&&t.wrap(e.options.wrap).parent().css("min-height",t.outerHeight()).attr("data-stick-support","on").attr("data-stick-maxwidth",parseInt(e.options.max_width)),e.update_attrs(),jQuery(r).on("resize",function(){e.stickRelease(e),e.update_attrs(),e.stick_me(e)}),jQuery(r).on("scroll",function(){e.stick_me(e,"scroll")}),jQuery(i).ready(function(t){e.stick_me(e)}))},o.fn[s]=function(t){return this.each(function(){o.data(this,"plugin_"+s)||o.data(this,"plugin_"+s,new e(this,t))})};var d=jQuery("body").width(),_=astraAddon.site_layout||"",h=astraAddon.hook_sticky_header||"",p=astraAddon.hook_shrink_header||"";sticky_header_on_devices=astraAddon.hook_sticky_header_on_devices||"desktop",site_layout_box_width=astraAddon.site_layout_box_width||1200,hook_sticky_footer=astraAddon.hook_sticky_footer||"",sticky_footer_on_devices=astraAddon.hook_sticky_footer_on_devices||"desktop","ast-box-layout"===_&&(d=parseInt(site_layout_box_width)),jQuery(i).ready(function(t){"enabled"==h&&jQuery(".ast-custom-header").astHookExtSticky({sticky_on_device:sticky_header_on_devices,header_style:"none",site_layout:_,max_width:d,active_shrink:p}),"enabled"==hook_sticky_footer&&jQuery(".ast-custom-footer").astHookExtSticky({sticky_on_device:sticky_footer_on_devices,max_width:d,site_layout:_,header_style:"none"})})})(jQuery,window);((h,n)=>{var a="astExtSticky",l=n.document,r=(jQuery(n).outerWidth(),jQuery(n).width()),c=astraAddon.header_builder_active,s={dependent:[],max_width:"",site_layout:"",break_point:920,admin_bar_height_lg:32,admin_bar_height_sm:46,admin_bar_height_xs:0,stick_upto_scroll:0,gutter:0,wrap:"<div></div>",body_padding_support:!0,html_padding_support:!0,shrink:{padding_top:"",padding_bottom:""},sticky_on_device:"desktop",header_style:"none",hide_on_scroll:"no"},d=0,p=null!==l.querySelector("#ast-hb-account-login-wrap");function t(e,t){this.element=e,this.options=h.extend({},s,t),this._defaults=s,this._name=a,"1"==this.options.hide_on_scroll&&(this.navbarHeight=h(e).outerHeight()),this.lastScrollTop=0,this.delta=5,this.should_stick=!0,this.hideScrollInterval="",this.init()}t.prototype.stick_me=function(e,t){var a,s,d,i,r,o=jQuery(e.element);jQuery(n).outerWidth();stick_upto_scroll=parseInt(e.options.stick_upto_scroll),max_width=parseInt(o.parent().attr("data-stick-maxwidth")),gutter=parseInt(o.parent().attr("data-stick-gutter")),aboveHeaderSelectorValue=gutter,c&&astraAddon.header_main_shrink&&((o.hasClass("ast-stick-primary-below-wrapper")||o.hasClass("ast-primary-header"))&&1==astraAddon.header_above_stick&&0<gutter&&(gutter-=10),a=l.querySelector(".ast-above-header-bar"),1==astraAddon.header_above_stick)&&null!==a&&(aboveHeaderSelectorValue=a.getBoundingClientRect().height+parseInt(a.parentNode.getAttribute("data-stick-gutter"))),("desktop"!=e.options.sticky_on_device||!jQuery("body").hasClass("ast-header-break-point"))&&("mobile"!=e.options.sticky_on_device||jQuery("body").hasClass("ast-header-break-point"))?(stick_upto_scroll<0&&(stick_upto_scroll=0),a=0<l.getElementsByClassName("elementor-motion-effects-parent").length,jQuery(n).scrollTop()>stick_upto_scroll?(s=o,c&&(r=o.closest(".ast-mobile-header-wrap"),d=o.closest("#ast-desktop-header"),r=0===r.length?o.find(".ast-mobile-header-wrap"):r,d=0===d.length?o.find("#ast-desktop-header"):d,r.find(".ast-mobile-header-content").css("top",o.outerHeight()+gutter),"ast-box-layout"==e.options.site_layout?(i=jQuery("body").width(),r.find(".ast-mobile-header-content").css("width",i)):r.find(".ast-mobile-header-content").css("width",max_width),d.find(".ast-desktop-header-content").css("top",o.outerHeight()+gutter),d.find(".ast-desktop-header-content").css("width",max_width)),"1"===e.options.hide_on_scroll?e.hasScrolled(e,"stick"):"none"==e.options.header_style?(a||o.parent().css("min-height",o.outerHeight()),l.querySelector("body").classList.contains("fl-builder-edit")||o.addClass("ast-sticky-active").stop().css({top:gutter}),o.addClass("ast-sticky-active").stop().css({"max-width":max_width,"padding-top":e.options.shrink.padding_top,"padding-bottom":e.options.shrink.padding_bottom}),(o.hasClass("ast-stick-primary-below-wrapper")||o.hasClass("ast-primary-header"))&&1==astraAddon.header_above_stick&&o.closest("#ast-desktop-header").find(".ast-above-header-bar").outerHeight()<70&&o.parent().css("min-height",o.outerHeight()),o.addClass("ast-sticky-shrunk").stop(),h(l).trigger("addStickyClass"),s.addClass("ast-header-sticked")):"slide"==e.options.header_style?(s.css({top:gutter}),s.addClass("ast-header-slide"),s.css("visibility","visible"),s.addClass("ast-sticky-active").stop().css({transform:p?"none":"translateY(0)"}),h("html").addClass("ast-header-stick-slide-active"),h(l).trigger("addStickyClass"),s.addClass("ast-header-sticked")):"fade"==e.options.header_style&&(s.css({top:gutter}),s.addClass("ast-header-fade"),s.css("visibility","visible"),s.addClass("ast-sticky-active").stop().css({opacity:"1"}),h("html").addClass("ast-header-stick-fade-active"),h(l).trigger("addStickyClass"),s.addClass("ast-header-sticked"))):(e.stickRelease(e),c&&(r=0===(r=o.closest(".ast-mobile-header-wrap")).length?o.find(".ast-mobile-header-wrap"):r,jQuery("body").hasClass("ast-primary-sticky-header-active")&&jQuery("body").hasClass("ast-above-sticky-header-active")&&jQuery("body").hasClass("ast-below-sticky-header-active")||r.find(".ast-mobile-header-content").removeAttr("style")))):e.stickRelease(e)},t.prototype.update_attrs=function(){var e,a,t=this,s=jQuery(t.element),d=parseInt(t.options.gutter),i=t.options.max_width;"none"!=t.options.header_style||jQuery("body").hasClass("ast-sticky-toggled-off")?h("#masthead").length&&(e=h("#masthead"),a=e.offset().top+e.outerHeight()+100||0):a=s.offset().top||0,"ast-box-layout"!=t.options.site_layout&&(i=jQuery("body").width()),t.options.dependent&&jQuery.each(t.options.dependent,function(e,t){jQuery(t).length&&"on"==jQuery(t).parent().attr("data-stick-support")&&(dependent_height=jQuery(t).outerHeight(),d+=parseInt(dependent_height),a-=parseInt(dependent_height))}),t.options.admin_bar_height_lg&&jQuery("#wpadminbar").length&&782<r&&(d+=parseInt(t.options.admin_bar_height_lg),a-=parseInt(t.options.admin_bar_height_lg)),t.options.admin_bar_height_sm&&jQuery("#wpadminbar").length&&600<=r&&r<=782&&(d+=parseInt(t.options.admin_bar_height_sm),a-=parseInt(t.options.admin_bar_height_sm)),t.options.admin_bar_height_xs&&jQuery("#wpadminbar").length&&(d+=parseInt(t.options.admin_bar_height_xs),a-=parseInt(t.options.admin_bar_height_xs)),t.options.body_padding_support&&(d+=parseInt(jQuery("body").css("padding-top"),10),a-=parseInt(jQuery("body").css("padding-top"),10)),t.options.html_padding_support&&(d+=parseInt(jQuery("html").css("padding-top"),10),a-=parseInt(jQuery("html").css("padding-top"),10)),C&&a--,t.options.stick_upto_scroll=a,"none"==t.options.header_style?s.parent().css("min-height",s.outerHeight()).attr("data-stick-gutter",parseInt(d)).attr("data-stick-maxwidth",parseInt(i)):(s.parent().attr("data-stick-gutter",parseInt(d)).attr("data-stick-maxwidth",parseInt(i)),"ast-padded-layout"===t.options.site_layout&&s.css("max-width",parseInt(i)))},t.prototype.hasScrolled=function(e,t){var a,s=h(n).scrollTop();Math.abs(d-s)<=5||(a=jQuery(e.element),d<s&&0<s?jQuery(e.element).removeClass("ast-nav-down").addClass("ast-nav-up"):s+h(n).height()<h(l).height()&&jQuery(e.element).removeClass("ast-nav-up").addClass("ast-nav-down"),d=s,h(e.element).hasClass("ast-nav-up")||"stick"!=t?(a.css({transform:"translateY(-100%)"}).stop(),setTimeout(function(){a.removeClass("ast-sticky-active")},300),a.css({visibility:"hidden",top:""}),h(l).trigger("removeStickyClass"),h("html").removeClass("ast-header-stick-scroll-active"),a.removeClass("ast-header-sticked")):(a.css({top:gutter}),a.addClass("ast-header-sticked"),a.addClass("ast-header-slide"),a.css("visibility","visible"),a.addClass("ast-sticky-active").stop().css({transform:"translateY(0)"}),h(l).trigger("addStickyClass"),h("html").addClass("ast-header-stick-scroll-active")))},t.prototype.stickRelease=function(e){var t=jQuery(e.element),a=t;"1"===e.options.hide_on_scroll?e.hasScrolled(e,"release"):"none"==e.options.header_style?(t.removeClass("ast-sticky-active").stop().css({"max-width":"",top:"",padding:""}),t.parent().css("min-height",""),h(l).trigger("removeStickyClass"),a.removeClass("ast-header-sticked"),t.removeClass("ast-sticky-shrunk").stop()):"slide"==e.options.header_style?(a.removeClass("ast-sticky-active").stop().css({transform:p?"translateY(-100vh)":"translateY(-100%)"}),a.css({visibility:"hidden",top:""}),h("html").removeClass("ast-header-stick-slide-active"),h(l).trigger("removeStickyClass"),a.removeClass("ast-header-sticked")):"fade"==e.options.header_style&&(a.removeClass("ast-sticky-active").stop().css({opacity:"0"}),a.css({visibility:"hidden"}),a.removeClass("ast-header-sticked"),h(l).trigger("removeStickyClass"),h("html").removeClass("ast-header-stick-fade-active"))},t.prototype.init=function(){var t,e;jQuery(this.element)&&(t=this,e=jQuery(t.element),("none"==t.options.header_style?e.wrap(t.options.wrap).parent().css("min-height",e.outerHeight()):e.wrap(t.options.wrap)).attr("data-stick-support","on").attr("data-stick-maxwidth",parseInt(t.options.max_width)),t.update_attrs(),jQuery(n).on("resize",function(){t.stickRelease(t),t.update_attrs(),t.stick_me(t)}),jQuery(n).on("scroll",function(){t.stick_me(t,"scroll"),jQuery("body").hasClass("ast-sticky-toggled-off")&&(t.update_attrs(),t.stick_me(t,"scroll"))}),jQuery(l).ready(function(e){t.stick_me(t)}))},h.fn[a]=function(e){return this.each(function(){h.data(this,"plugin_"+a)||h.data(this,"plugin_"+a,new t(this,e))})};var e,i,o=jQuery("body"),y=o.width(),_=astraAddon.stick_header_meta||"default",m=astraAddon.header_main_stick||"",u=astraAddon.header_main_shrink||"",b=astraAddon.header_above_stick||"",k=astraAddon.header_below_stick||"",g=astraAddon.site_layout||"",v=astraAddon.site_layout_box_width||1200,w=astraAddon.sticky_header_on_devices||"desktop",j=astraAddon.sticky_header_style||"none",Q=astraAddon.sticky_hide_on_scroll||"",f=astraAddon.header_logo_width||"",x=astraAddon.responsive_header_logo_width||"",C=astraAddon.stick_origin_position||"",S=astraAddon.tablet_break_point||768,I=astraAddon.mobile_break_point||544;"disabled"!=_&&("enabled"===_&&(m=astraAddon.header_main_stick_meta||"",b=astraAddon.header_above_stick_meta||"",k=astraAddon.header_below_stick_meta||""),0<h("header .site-logo-img img").length&&(-1===(e=0==(e=void 0===(e=(_=h("header .site-logo-img img")).attr("height"))?_.height():e)?"":e).toString().indexOf("%")&&(e+="px"),""!=x.desktop||""!=x.tablet||""!=x.mobile?i="<style type='text/css' id='ast-site-identity-img' class='ast-site-identity-img' > #masthead .ast-header-sticked .site-logo-img .astra-logo-svg { width: "+x.desktop+"px; } @media (max-width: "+S+"px) { #masthead .ast-header-sticked .site-logo-img .astra-logo-svg { width: "+x.tablet+"px; } } @media (max-width: "+I+"px) { #masthead .ast-header-sticked .site-logo-img .astra-logo-svg{ width: "+x.mobile+"px; } } </style>":""!=f&&(i="<style type='text/css' id='ast-site-identity-img' class='ast-site-identity-img' > #masthead .ast-header-sticked .site-logo-img .astra-logo-svg { width: "+f+"px; } #masthead .ast-header-sticked .site-logo-img img { max-height: "+e+"; width: auto; } </style>"),h("head").append(i)),m||b||k)&&(h(l).on("addStickyClass",function(){var e="";"1"!=m&&"on"!=m&&"disabled"!=m||(e+=" ast-primary-sticky-header-active"),"1"!=b&&"on"!=b&&"disabled"!=b||(e+=" ast-above-sticky-header-active"),"1"!=k&&"on"!=k&&"disabled"!=k||(e+=" ast-below-sticky-header-active"),h("body").addClass(e)}),h(l).on("removeStickyClass",function(){var e="";"1"!=m&&"on"!=m&&"disabled"!=m||(e+=" ast-primary-sticky-header-active"),"1"!=b&&"on"!=b&&"disabled"!=b||(e+=" ast-above-sticky-header-active"),"1"!=k&&"on"!=k&&"disabled"!=k||(e+=" ast-below-sticky-header-active"),h("body").removeClass(e)}),"ast-box-layout"===g&&(y=parseInt(v)),jQuery(l).on("ready astLayoutWidthChanged",function(e){if("astLayoutWidthChanged"===e.type){if(!(parseInt(m)||parseInt(k)||parseInt(b)))return;jQuery("div.ast-stick-primary-below-wrapper").children().unwrap(),jQuery('div[data-stick-support="on"]').children().unwrap()}var t;"1"==Q?("1"==u&&jQuery("#ast-fixed-header").addClass("ast-sticky-shrunk").stop(),"1"!=b&&"on"!=b&&"disabled"!=b&&jQuery("#ast-fixed-header .ast-above-header").hide(),"1"!=m&&"on"!=m&&"disabled"!=m&&jQuery("#ast-fixed-header .main-header-bar").hide(),"1"!=k&&"on"!=k&&"disabled"!=k&&jQuery("#ast-fixed-header .ast-below-header").hide(),jQuery("#ast-fixed-header").astExtSticky({max_width:y,site_layout:g,sticky_on_device:w,header_style:"slide",hide_on_scroll:Q})):"none"==j?c?("both"===w?["desktop","mobile"]:[w]).forEach(function(e){var t;"1"!=b&&"on"!=b&&"disabled"!=b||jQuery("#masthead #ast-"+e+"-header .ast-above-header").astExtSticky({max_width:y,site_layout:g,sticky_on_device:w,header_style:j,hide_on_scroll:Q}),"1"!=m&&"on"!=m&&"disabled"!=m||"1"!=k&&"on"!=k&&"disabled"!=k?("1"!=m&&"on"!=m&&"disabled"!=m||(t=u?{padding_top:"",padding_bottom:""}:"",jQuery("#masthead #ast-"+e+"-header .main-header-bar").astExtSticky({dependent:["#masthead #ast-"+e+"-header .ast-above-header"],max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q}),jQuery("#masthead #ast-"+e+"-header .ast-custom-header").astExtSticky({max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q})),"1"!=k&&"on"!=k&&"disabled"!=k||jQuery("#masthead #ast-"+e+"-header .ast-below-header").astExtSticky({dependent:["#masthead #ast-"+e+"-header .main-header-bar","#masthead #ast-"+e+"-header .ast-above-header"],max_width:y,site_layout:g,sticky_on_device:w,header_style:j,hide_on_scroll:Q})):((jQuery("#masthead #ast-"+e+"-header .main-header-bar-wrap").length?jQuery("#masthead #ast-"+e+"-header .main-header-bar-wrap"):jQuery("#masthead #ast-"+e+"-header .ast-below-header-wrap")).wrap('<div class="ast-stick-primary-below-wrapper"></div>'),jQuery("#masthead #ast-"+e+"-header .ast-below-header-wrap").prependTo("#masthead #ast-"+e+"-header .ast-stick-primary-below-wrapper"),jQuery("#masthead #ast-"+e+"-header .main-header-bar-wrap").prependTo("#masthead #ast-"+e+"-header .ast-stick-primary-below-wrapper"),jQuery("#masthead #ast-"+e+"-header .ast-stick-primary-below-wrapper").astExtSticky({dependent:["#masthead #ast-"+e+"-header .ast-above-header"],max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q}))}):("1"!=b&&"on"!=b&&"disabled"!=b||jQuery("#masthead .ast-above-header").astExtSticky({max_width:y,site_layout:g,sticky_on_device:w,header_style:j,hide_on_scroll:Q}),"1"!=m&&"on"!=m&&"disabled"!=m||"1"!=k&&"on"!=k&&"disabled"!=k?("1"!=m&&"on"!=m&&"disabled"!=m||(t=u?{padding_top:"",padding_bottom:""}:"",jQuery("#masthead .main-header-bar").astExtSticky({dependent:["#masthead .ast-above-header"],max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q}),jQuery("#masthead .ast-custom-header").astExtSticky({max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q})),"1"!=k&&"on"!=k&&"disabled"!=k||jQuery("#masthead .ast-below-header").astExtSticky({dependent:["#masthead .main-header-bar","#masthead .ast-above-header"],max_width:y,site_layout:g,sticky_on_device:w,header_style:j,hide_on_scroll:Q})):(jQuery("#masthead .main-header-bar-wrap").wrap('<div class="ast-stick-primary-below-wrapper"></div>'),jQuery("#masthead .ast-below-header-wrap").prependTo(".ast-stick-primary-below-wrapper"),jQuery("#masthead .main-header-bar-wrap").prependTo(".ast-stick-primary-below-wrapper"),jQuery("#masthead .ast-stick-primary-below-wrapper").astExtSticky({dependent:["#masthead .ast-above-header"],max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q}))):(jQuery("#ast-fixed-header").addClass("ast-sticky-shrunk").stop(),"1"!=b&&"on"!=b&&"disabled"!=b&&jQuery("#ast-fixed-header .ast-above-header").hide(),"1"!=m&&"on"!=m&&"disabled"!=m&&jQuery("#ast-fixed-header .main-header-bar").hide(),"1"!=k&&"on"!=k&&"disabled"!=k&&jQuery("#ast-fixed-header .ast-below-header").hide(),"1"!=b&&"on"!=b&&"disabled"!=b&&"1"!=m&&"on"!=m&&"disabled"!=m&&"1"!=k&&"on"!=k&&"disabled"!=k||(t=u?{padding_top:"",padding_bottom:""}:"",jQuery("#ast-fixed-header").astExtSticky({max_width:y,site_layout:g,shrink:t,sticky_on_device:w,header_style:j,hide_on_scroll:Q}))),"mobile"!=w&&"both"!=w||(jQuery("#masthead .main-header-menu-toggle").click(function(e){var t,a;jQuery("#masthead .main-header-menu-toggle").hasClass("toggled")?(o.addClass("ast-sticky-toggled-off"),"none"==s.header_style&&(jQuery("#masthead .main-header-bar").hasClass("ast-sticky-active")||jQuery("#masthead .ast-stick-primary-below-wrapper").hasClass("ast-sticky-active"))&&(t=jQuery(n).height(),a=0,jQuery("#masthead .ast-above-header")&&jQuery("#masthead .ast-above-header").length&&(a=jQuery("#masthead .ast-above-header").height()),"1"==Q&&jQuery("html").css({overflow:"hidden"}),("1"!=u||"1"!=m&&"on"!=m&&"disabled"!=m||"1"!=k&&"on"!=k&&"disabled"!=k?jQuery("#masthead .main-header-bar.ast-sticky-active"):jQuery("#masthead .ast-stick-primary-below-wrapper")).css({"max-height":t-a+"px","overflow-y":"auto"}))):(o.addClass("ast-sticky-toggled-off"),jQuery("html").css({overflow:""}),("1"!=u||"1"!=m&&"on"!=m&&"disabled"!=m||"1"!=k&&"on"!=k&&"disabled"!=k?jQuery("#masthead .main-header-bar.ast-sticky-active"):jQuery("#masthead .ast-stick-primary-below-wrapper")).css({"max-height":"","overflow-y":""}))}),jQuery("#ast-fixed-header .main-header-menu-toggle").click(function(e){var t;jQuery("#ast-fixed-header .main-header-menu-toggle").hasClass("toggled")?(t=jQuery(n).height(),"1"==Q&&jQuery("html").css({overflow:"auto"}),jQuery("#ast-fixed-header").css({"max-height":t+"px","overflow-y":"auto"})):(jQuery("html").css({overflow:""}),jQuery("#ast-fixed-header").css({"max-height":"","overflow-y":""}))}))}))})(jQuery,window);function display_mega_menu_on_load(){var e=document.querySelectorAll(".content-width-mega");if(0<e.length)for(var t=0;t<e.length;t++)e[t].addEventListener("mouseenter",function(e){e=e.target.querySelector(".astra-mega-menu-width-content");null!==e&&e.classList.remove("ast-hidden")});var a=document.querySelectorAll(".menu-container-width-mega");if(0<a.length)for(t=0;t<a.length;t++)a[t].addEventListener("mouseenter",function(e){e=e.target.querySelector(".astra-mega-menu-width-menu-container");null!==e&&e.classList.remove("ast-hidden")});var s=document.querySelectorAll(".full-width-mega");if(0<s.length)for(t=0;t<s.length;t++)s[t].addEventListener("mouseenter",function(e){var t=e.target.querySelector(".astra-full-megamenu-wrapper"),e=e.target.querySelector(".astra-mega-menu-width-full");null!==t&&t.classList.remove("ast-hidden"),null!==e&&e.classList.remove("ast-hidden")});var n=document.querySelectorAll(".full-stretched-width-mega");if(0<n.length)for(t=0;t<n.length;t++)n[t].addEventListener("mouseenter",function(e){var t=e.target.querySelector(".astra-full-megamenu-wrapper"),e=e.target.querySelector(".astra-mega-menu-width-full-stretched");null!==t&&t.classList.remove("ast-hidden"),null!==e&&e.classList.remove("ast-hidden")});var r=document.querySelectorAll(".custom-width-mega");if(0<r.length)for(t=0;t<r.length;t++)r[t].addEventListener("mouseenter",function(e){e=e.target.querySelector(".astra-mega-menu-width-custom");null!==e&&e.classList.remove("ast-hidden")})}document.addEventListener("DOMContentLoaded",display_mega_menu_on_load),document.addEventListener("astPartialContentRendered",display_mega_menu_on_load);var items=document.getElementsByClassName("astra-megamenu-li");function apply_megamenu_width_styles(){[].slice.call(items).forEach(f=>{jQuery(f).hover(function(){var e,t,a,s,n,r,i,l,d,u=jQuery(f).parents(".ast-container"),m=u.children(),u=u.parent(),o=jQuery(this);(o.hasClass("full-width-mega")||o.hasClass("full-stretched-width-mega"))&&(m=jQuery(m).closest(".ast-container")),parseInt(window.innerWidth)>parseInt(astra.break_point)&&"ast-hf-mobile-menu"!==o.parent().attr("id")&&"ast-desktop-toggle-menu"!==o.parent().attr("id")?(e=m.width(),i=m.offset(),m=(a=o.offset()).left-(i.left+parseFloat(m.css("paddingLeft"))),d=e-(a.left+i.left)+130,t=u.width(),l=u.offset(),a=a.left-(l.left+parseFloat(u.css("paddingLeft"))),o.hasClass("custom-width-mega")&&(r=(r=window.getComputedStyle(o.find(".astra-mega-menu-width-custom")[0],"::before").getPropertyValue("content")||1200).replace(/[^0-9]/g,""),n=(r=parseInt(r))<=e?(n=parseInt(e-r),s=parseInt(m-n),i.left-s):(n=parseInt(r-e),s=parseInt(m+n),i.left+s)),o.hasClass("menu-container-width-mega")&&(l=jQuery(f).parents(".main-navigation"),u.hasClass("ast-above-header")?l=jQuery(".ast-above-header-navigation"):u.hasClass("ast-below-header")&&(l=jQuery(".ast-below-header-actual-nav")),e=($target_container=l.length?l:o.parent("ul")).width()+"px",i=jQuery(window).width()-($target_container.offset().left+$target_container.outerWidth()),u=o.offset(),l=jQuery(window).width()-i-u.left,m=parseInt($target_container.width()-l),d=parseInt(e)-o.outerWidth()-parseInt($target_container.width()-l)),o.hasClass("full-width-mega")?(o.find(".astra-full-megamenu-wrapper").css({left:"-"+a+"px",width:t}),o.find(".astra-megamenu").css({width:e})):o.hasClass("full-stretched-width-mega")?o.find(".astra-full-megamenu-wrapper").css({left:"-"+a+"px",width:t}):o.hasClass("custom-width-mega")?astra.isRtl?o.find(".astra-mega-menu-width-custom").css({right:"-"+n+"px",width:r+"px"}):o.find(".astra-mega-menu-width-custom").css({left:"-"+s+"px",width:r+"px"}):astra.isRtl?o.find(".astra-megamenu").css({right:"-"+d+"px",width:e}):o.find(".astra-megamenu").css({left:"-"+m+"px",width:e})):astra.isRtl?(o.find(".astra-megamenu").css({right:"",width:"","background-image":""}),o.find(".astra-full-megamenu-wrapper").css({right:"",width:"","background-image":""})):(o.find(".astra-megamenu").css({left:"",width:"","background-image":""}),o.find(".astra-full-megamenu-wrapper").css({left:"",width:"","background-image":""}))}),jQuery(f).mouseenter(function(){document.dispatchEvent(new CustomEvent("astra_mega_menu_on_hover",{detail:{}}))})})}apply_megamenu_width_styles(),document.addEventListener("astMenuHoverStyleChanged",function(){apply_megamenu_width_styles()}),[].slice.call(items).forEach(function(o){var e=jQuery(o).parents(".ast-container"),f=e.children(),h=e.parent(),c=jQuery(o);(c.hasClass("full-width-mega")||c.hasClass("full-stretched-width-mega"))&&(f=jQuery(f).closest(".ast-container"),c.find(".astra-full-megamenu-wrapper").removeClass("ast-hidden")),c.find(".menu-link").focusin(function(e){var t,a,s,n,r,i,l,d,u,m;astra.is_header_footer_builder_active||(c.find(".sub-menu").addClass("astra-megamenu-focus"),c.find(".astra-full-megamenu-wrapper").addClass("astra-megamenu-wrapper-focus")),c.find(".sub-menu").removeClass("ast-hidden"),parseInt(jQuery(window).width())>parseInt(astra.break_point)&&"ast-hf-mobile-menu"!==c.parent().attr("id")&&"ast-desktop-toggle-menu"!==c.parent().attr("id")?(t=f.width(),d=f.offset(),u=(s=c.offset()).left-(d.left+parseFloat(f.css("paddingLeft"))),m=s.left+d.left,a=h.width(),l=h.offset(),s=s.left-(l.left+parseFloat(h.css("paddingLeft"))),c.hasClass("custom-width-mega")&&(i=(i=window.getComputedStyle(c.find(".astra-mega-menu-width-custom")[0],"::before").getPropertyValue("content")||1200).replace(/[^0-9]/g,""),r=(i=parseInt(i))<=t?(r=parseInt(t-i),n=parseInt(u-r),d.left-n):(r=parseInt(i-t),n=parseInt(u+r),d.left+n)),c.hasClass("menu-container-width-mega")&&(l=jQuery(o).parents(".main-navigation"),h.hasClass("ast-above-header")?l=jQuery(".ast-above-header-navigation"):h.hasClass("ast-below-header")&&(l=jQuery(".ast-below-header-actual-nav")),t=($target_container=l.length?l:c.parent("ul")).width()+"px",d=jQuery(window).width()-($target_container.offset().left+$target_container.outerWidth()),l=c.offset(),d=jQuery(window).width()-d-l.left,u=parseInt($target_container.width()-d),m=parseInt(t)-c.outerWidth()-parseInt($target_container.width()-d)),c.hasClass("full-width-mega")?(c.find(".astra-full-megamenu-wrapper").css({left:"-"+s+"px",width:a}),c.find(".astra-megamenu").css({width:t})):c.hasClass("full-stretched-width-mega")?c.find(".astra-full-megamenu-wrapper").css({left:"-"+s+"px",width:a}):c.hasClass("custom-width-mega")?astra.isRtl?c.find(".astra-mega-menu-width-custom").css({right:"-"+r+"px",width:i+"px"}):c.find(".astra-mega-menu-width-custom").css({left:"-"+n+"px",width:i+"px"}):astra.isRtl?c.find(".astra-megamenu").css({right:"-"+m+"px",width:t}):c.find(".astra-megamenu").css({left:"-"+u+"px",width:t})):astra.isRtl?(c.find(".astra-megamenu").css({right:"",width:"","background-image":""}),c.find(".astra-full-megamenu-wrapper").css({right:"",width:"","background-image":""})):(c.find(".astra-megamenu").css({left:"",width:"","background-image":""}),c.find(".astra-full-megamenu-wrapper").css({left:"",width:"","background-image":""}))}),astra.is_header_footer_builder_active||(c.find(".menu-link").keydown(function(e){9==e.which&&e.shiftKey&&(c.find(".sub-menu").removeClass("astra-megamenu-focus"),c.find(".astra-full-megamenu-wrapper").removeClass("astra-megamenu-wrapper-focus"))}),jQuery(o).find(".sub-menu .menu-item").last().focusout(function(){c.find(".sub-menu").removeClass("astra-megamenu-focus"),c.find(".astra-full-megamenu-wrapper").removeClass("astra-megamenu-wrapper-focus")}),jQuery(window).click(function(){c.find(".sub-menu").removeClass("astra-megamenu-focus"),c.find(".astra-full-megamenu-wrapper").removeClass("astra-megamenu-wrapper-focus")})),c.click(function(e){jQuery(e.target).hasClass("menu-item")&&e.stopImmediatePropagation()})});(()=>{var e;function o(e){var t=(t=document.body.className).replace(e,"");document.body.className=t}function d(e){e.style.display="block",setTimeout(function(){e.style.opacity=1},1)}function n(e){e.style.opacity="",setTimeout(function(){e.style.display=""},200)}r="iPhone"==navigator.userAgent.match(/iPhone/i)?"iphone":"",e="iPod"==navigator.userAgent.match(/iPod/i)?"ipod":"",document.body.className+=" "+r,document.body.className+=" "+e;for(var t=document.querySelectorAll("a.astra-search-icon:not(.slide-search)"),a=0;t.length>a;a++)t[a].onclick=function(e){var t,a,o,n;if(e.preventDefault(),e=e||window.event,this.classList.contains("header-cover"))for(var s=document.querySelectorAll(".ast-search-box.header-cover"),c=astraAddon.is_header_builder_active||!1,r=0;r<s.length;r++)for(var l=s[r].parentNode.querySelectorAll("a.astra-search-icon"),i=0;i<l.length;i++)l[i]==this&&(d(s[r]),s[r].querySelector("input.search-field").focus(),c?(t=s[r],n=o=a=void 0,document.body.classList.contains("ast-header-break-point")&&(n=document.querySelector(".main-navigation"),a=document.querySelector(".main-header-bar"),o=document.querySelector(".ast-mobile-header-wrap"),null!==a)&&null!==n&&(n=n.offsetHeight,a=a.offsetHeight,o=o.offsetHeight,n=n&&!document.body.classList.contains("ast-no-toggle-menu-enable")?parseFloat(n)-parseFloat(a):parseFloat(a),t.parentNode.classList.contains("ast-mobile-header-wrap")&&(n=parseFloat(o)),t.style.maxHeight=Math.abs(n)+"px")):(a=s[r],t=o=void 0,document.body.classList.contains("ast-header-break-point")&&(t=document.querySelector(".main-navigation"),null!==(o=document.querySelector(".main-header-bar")))&&null!==t&&(t=t.offsetHeight,o=o.offsetHeight,t=t&&!document.body.classList.contains("ast-no-toggle-menu-enable")?parseFloat(t)-parseFloat(o):parseFloat(o),a.style.maxHeight=Math.abs(t)+"px")));else this.classList.contains("full-screen")&&(e=document.getElementById("ast-seach-full-screen-form")).classList.contains("full-screen")&&(d(e),document.body.className+=" full-screen",e.querySelector("input.search-field").focus())};for(var s=document.querySelectorAll(".ast-search-box .close"),a=0,c=s.length;a<c;++a)s[a].onclick=function(e){e=e||window.event;for(var t=this;;){if(t.parentNode.classList.contains("ast-search-box")){n(t.parentNode),o("full-screen");break}if(t.parentNode.classList.contains("site-header"))break;t=t.parentNode}};document.onkeydown=function(e){if(27==e.keyCode)for(var e=document.getElementById("ast-seach-full-screen-form"),t=(null!=e&&(n(e),o("full-screen")),document.querySelectorAll(".ast-search-box.header-cover")),a=0;a<t.length;a++)n(t[a])},window.addEventListener("resize",function(){if("BODY"===document.activeElement.tagName&&"INPUT"!=document.activeElement.tagName){var e=document.querySelectorAll(".ast-search-box.header-cover");if(!document.body.classList.contains("ast-header-break-point"))for(var t=0;t<e.length;t++)e[t].style.maxHeight="",e[t].style.opacity="",e[t].style.display=""}});var r=document.getElementById("close");r&&r.addEventListener("keydown",function(e){"Enter"===e.key?(e.preventDefault(),this.click()):"Tab"===e.key&&e.preventDefault()})})()
;/*! @license DOMPurify 2.3.10 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.10/LICENSE */
!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).DOMPurify=t()}(this,(function(){"use strict";function e(t){return(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 t(e,n){return(t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return(r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a}).apply(null,arguments)}function o(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var i=Object.hasOwnProperty,l=Object.setPrototypeOf,c=Object.isFrozen,u=Object.getPrototypeOf,s=Object.getOwnPropertyDescriptor,m=Object.freeze,f=Object.seal,p=Object.create,d="undefined"!=typeof Reflect&&Reflect,h=d.apply,g=d.construct;h||(h=function(e,t,n){return e.apply(t,n)}),m||(m=function(e){return e}),f||(f=function(e){return e}),g||(g=function(e,t){return r(e,o(t))});var y,b=_(Array.prototype.forEach),v=_(Array.prototype.pop),T=_(Array.prototype.push),N=_(String.prototype.toLowerCase),A=_(String.prototype.match),E=_(String.prototype.replace),w=_(String.prototype.indexOf),x=_(String.prototype.trim),S=_(RegExp.prototype.test),k=(y=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return g(y,t)});function _(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return h(e,t,r)}}function O(e,t,n){n=n||N,l&&l(e,null);for(var r=t.length;r--;){var o=t[r];if("string"==typeof o){var a=n(o);a!==o&&(c(t)||(t[r]=a),o=a)}e[o]=!0}return e}function D(e){var t,n=p(null);for(t in e)h(i,e,[t])&&(n[t]=e[t]);return n}function R(e,t){for(;null!==e;){var n=s(e,t);if(n){if(n.get)return _(n.get);if("function"==typeof n.value)return _(n.value)}e=u(e)}return function(e){return console.warn("fallback value for",e),null}}var L=m(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),M=m(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),C=m(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),I=m(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),F=m(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),H=m(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),U=m(["#text"]),z=m(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),j=m(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),B=m(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),P=m(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),G=f(/\{\{[\w\W]*|[\w\W]*\}\}/gm),W=f(/<%[\w\W]*|[\w\W]*%>/gm),q=f(/^data-[\-\w.\u00B7-\uFFFF]/),Y=f(/^aria-[\-\w]+$/),K=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=f(/^(?:\w+script|data):/i),$=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),X=f(/^html$/i),Z=function(){return"undefined"==typeof window?null:window},J=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};return function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Z(),r=function(e){return t(e)};if(r.version="2.3.10",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var a=n.document,i=n.document,l=n.DocumentFragment,c=n.HTMLTemplateElement,u=n.Node,s=n.Element,f=n.NodeFilter,p=n.NamedNodeMap,d=void 0===p?n.NamedNodeMap||n.MozNamedAttrMap:p,h=n.HTMLFormElement,g=n.DOMParser,y=n.trustedTypes,_=s.prototype,Q=R(_,"cloneNode"),ee=R(_,"nextSibling"),te=R(_,"childNodes"),ne=R(_,"parentNode");if("function"==typeof c){var re=i.createElement("template");re.content&&re.content.ownerDocument&&(i=re.content.ownerDocument)}var oe=J(y,a),ae=oe?oe.createHTML(""):"",ie=i,le=ie.implementation,ce=ie.createNodeIterator,ue=ie.createDocumentFragment,se=ie.getElementsByTagName,me=a.importNode,fe={};try{fe=D(i).documentMode?i.documentMode:{}}catch(e){}var pe={};r.isSupported="function"==typeof ne&&le&&void 0!==le.createHTMLDocument&&9!==fe;var de,he,ge=G,ye=W,be=q,ve=Y,Te=V,Ne=$,Ae=K,Ee=null,we=O({},[].concat(o(L),o(M),o(C),o(F),o(U))),xe=null,Se=O({},[].concat(o(z),o(j),o(B),o(P))),ke=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),_e=null,Oe=null,De=!0,Re=!0,Le=!1,Me=!1,Ce=!1,Ie=!1,Fe=!1,He=!1,Ue=!1,ze=!1,je=!0,Be=!0,Pe=!1,Ge={},We=null,qe=O({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ye=null,Ke=O({},["audio","video","img","source","image","track"]),Ve=null,$e=O({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Xe="http://www.w3.org/1998/Math/MathML",Ze="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml",Qe=Je,et=!1,tt=["application/xhtml+xml","text/html"],nt="text/html",rt=null,ot=i.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},it=function(t){rt&&rt===t||(t&&"object"===e(t)||(t={}),t=D(t),de=de=-1===tt.indexOf(t.PARSER_MEDIA_TYPE)?nt:t.PARSER_MEDIA_TYPE,he="application/xhtml+xml"===de?function(e){return e}:N,Ee="ALLOWED_TAGS"in t?O({},t.ALLOWED_TAGS,he):we,xe="ALLOWED_ATTR"in t?O({},t.ALLOWED_ATTR,he):Se,Ve="ADD_URI_SAFE_ATTR"in t?O(D($e),t.ADD_URI_SAFE_ATTR,he):$e,Ye="ADD_DATA_URI_TAGS"in t?O(D(Ke),t.ADD_DATA_URI_TAGS,he):Ke,We="FORBID_CONTENTS"in t?O({},t.FORBID_CONTENTS,he):qe,_e="FORBID_TAGS"in t?O({},t.FORBID_TAGS,he):{},Oe="FORBID_ATTR"in t?O({},t.FORBID_ATTR,he):{},Ge="USE_PROFILES"in t&&t.USE_PROFILES,De=!1!==t.ALLOW_ARIA_ATTR,Re=!1!==t.ALLOW_DATA_ATTR,Le=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Me=t.SAFE_FOR_TEMPLATES||!1,Ce=t.WHOLE_DOCUMENT||!1,He=t.RETURN_DOM||!1,Ue=t.RETURN_DOM_FRAGMENT||!1,ze=t.RETURN_TRUSTED_TYPE||!1,Fe=t.FORCE_BODY||!1,je=!1!==t.SANITIZE_DOM,Be=!1!==t.KEEP_CONTENT,Pe=t.IN_PLACE||!1,Ae=t.ALLOWED_URI_REGEXP||Ae,Qe=t.NAMESPACE||Je,t.CUSTOM_ELEMENT_HANDLING&&at(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ke.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&at(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ke.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ke.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Me&&(Re=!1),Ue&&(He=!0),Ge&&(Ee=O({},o(U)),xe=[],!0===Ge.html&&(O(Ee,L),O(xe,z)),!0===Ge.svg&&(O(Ee,M),O(xe,j),O(xe,P)),!0===Ge.svgFilters&&(O(Ee,C),O(xe,j),O(xe,P)),!0===Ge.mathMl&&(O(Ee,F),O(xe,B),O(xe,P))),t.ADD_TAGS&&(Ee===we&&(Ee=D(Ee)),O(Ee,t.ADD_TAGS,he)),t.ADD_ATTR&&(xe===Se&&(xe=D(xe)),O(xe,t.ADD_ATTR,he)),t.ADD_URI_SAFE_ATTR&&O(Ve,t.ADD_URI_SAFE_ATTR,he),t.FORBID_CONTENTS&&(We===qe&&(We=D(We)),O(We,t.FORBID_CONTENTS,he)),Be&&(Ee["#text"]=!0),Ce&&O(Ee,["html","head","body"]),Ee.table&&(O(Ee,["tbody"]),delete _e.tbody),m&&m(t),rt=t)},lt=O({},["mi","mo","mn","ms","mtext"]),ct=O({},["foreignobject","desc","title","annotation-xml"]),ut=O({},["title","style","font","a","script"]),st=O({},M);O(st,C),O(st,I);var mt=O({},F);O(mt,H);var ft=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Je,tagName:"template"});var n=N(e.tagName),r=N(t.tagName);return e.namespaceURI===Ze?t.namespaceURI===Je?"svg"===n:t.namespaceURI===Xe?"svg"===n&&("annotation-xml"===r||lt[r]):Boolean(st[n]):e.namespaceURI===Xe?t.namespaceURI===Je?"math"===n:t.namespaceURI===Ze?"math"===n&&ct[r]:Boolean(mt[n]):e.namespaceURI===Je&&(!(t.namespaceURI===Ze&&!ct[r])&&(!(t.namespaceURI===Xe&&!lt[r])&&(!mt[n]&&(ut[n]||!st[n]))))},pt=function(e){T(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ae}catch(t){e.remove()}}},dt=function(e,t){try{T(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){T(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!xe[e])if(He||Ue)try{pt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ht=function(e){var t,n;if(Fe)e="<remove></remove>"+e;else{var r=A(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===de&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=oe?oe.createHTML(e):e;if(Qe===Je)try{t=(new g).parseFromString(o,de)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(Qe,"template",null);try{t.documentElement.innerHTML=et?"":o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),Qe===Je?se.call(t,Ce?"html":"body")[0]:Ce?t.documentElement:a},gt=function(e){return ce.call(e.ownerDocument||e,e,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT,null,!1)},yt=function(e){return e instanceof h&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},bt=function(t){return"object"===e(u)?t instanceof u:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},vt=function(e,t,n){pe[e]&&b(pe[e],(function(e){e.call(r,t,n,rt)}))},Tt=function(e){var t;if(vt("beforeSanitizeElements",e,null),yt(e))return pt(e),!0;if(S(/[\u0080-\uFFFF]/,e.nodeName))return pt(e),!0;var n=he(e.nodeName);if(vt("uponSanitizeElement",e,{tagName:n,allowedTags:Ee}),e.hasChildNodes()&&!bt(e.firstElementChild)&&(!bt(e.content)||!bt(e.content.firstElementChild))&&S(/<[/\w]/g,e.innerHTML)&&S(/<[/\w]/g,e.textContent))return pt(e),!0;if("select"===n&&S(/<template/i,e.innerHTML))return pt(e),!0;if(!Ee[n]||_e[n]){if(!_e[n]&&At(n)){if(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,n))return!1;if(ke.tagNameCheck instanceof Function&&ke.tagNameCheck(n))return!1}if(Be&&!We[n]){var o=ne(e)||e.parentNode,a=te(e)||e.childNodes;if(a&&o)for(var i=a.length-1;i>=0;--i)o.insertBefore(Q(a[i],!0),ee(e))}return pt(e),!0}return e instanceof s&&!ft(e)?(pt(e),!0):"noscript"!==n&&"noembed"!==n||!S(/<\/no(script|embed)/i,e.innerHTML)?(Me&&3===e.nodeType&&(t=e.textContent,t=E(t,ge," "),t=E(t,ye," "),e.textContent!==t&&(T(r.removed,{element:e.cloneNode()}),e.textContent=t)),vt("afterSanitizeElements",e,null),!1):(pt(e),!0)},Nt=function(e,t,n){if(je&&("id"===t||"name"===t)&&(n in i||n in ot))return!1;if(Re&&!Oe[t]&&S(be,t));else if(De&&S(ve,t));else if(!xe[t]||Oe[t]){if(!(At(e)&&(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,e)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(e))&&(ke.attributeNameCheck instanceof RegExp&&S(ke.attributeNameCheck,t)||ke.attributeNameCheck instanceof Function&&ke.attributeNameCheck(t))||"is"===t&&ke.allowCustomizedBuiltInElements&&(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,n)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(n))))return!1}else if(Ve[t]);else if(S(Ae,E(n,Ne,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==w(n,"data:")||!Ye[e]){if(Le&&!S(Te,E(n,Ne,"")));else if(n)return!1}else;return!0},At=function(e){return e.indexOf("-")>0},Et=function(t){var n,o,a,i;vt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:xe};for(i=l.length;i--;){var u=n=l[i],s=u.name,m=u.namespaceURI;if(o="value"===s?n.value:x(n.value),a=he(s),c.attrName=a,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=void 0,vt("uponSanitizeAttribute",t,c),o=c.attrValue,!c.forceKeepAttr&&(dt(s,t),c.keepAttr))if(S(/\/>/i,o))dt(s,t);else{Me&&(o=E(o,ge," "),o=E(o,ye," "));var f=he(t.nodeName);if(Nt(f,a,o)){if(oe&&"object"===e(y)&&"function"==typeof y.getAttributeType)if(m);else switch(y.getAttributeType(f,a)){case"TrustedHTML":o=oe.createHTML(o);break;case"TrustedScriptURL":o=oe.createScriptURL(o)}try{m?t.setAttributeNS(m,s,o):t.setAttribute(s,o),v(r.removed)}catch(e){}}}}vt("afterSanitizeAttributes",t,null)}},wt=function e(t){var n,r=gt(t);for(vt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)vt("uponSanitizeShadowNode",n,null),Tt(n)||(n.content instanceof l&&e(n.content),Et(n));vt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(t,o){var i,c,s,m,f;if((et=!t)&&(t="\x3c!--\x3e"),"string"!=typeof t&&!bt(t)){if("function"!=typeof t.toString)throw k("toString is not a function");if("string"!=typeof(t=t.toString()))throw k("dirty is not a string, aborting")}if(!r.isSupported){if("object"===e(n.toStaticHTML)||"function"==typeof n.toStaticHTML){if("string"==typeof t)return n.toStaticHTML(t);if(bt(t))return n.toStaticHTML(t.outerHTML)}return t}if(Ie||it(o),r.removed=[],"string"==typeof t&&(Pe=!1),Pe){if(t.nodeName){var p=he(t.nodeName);if(!Ee[p]||_e[p])throw k("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)1===(c=(i=ht("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===c.nodeName||"HTML"===c.nodeName?i=c:i.appendChild(c);else{if(!He&&!Me&&!Ce&&-1===t.indexOf("<"))return oe&&ze?oe.createHTML(t):t;if(!(i=ht(t)))return He?null:ze?ae:""}i&&Fe&&pt(i.firstChild);for(var d=gt(Pe?t:i);s=d.nextNode();)3===s.nodeType&&s===m||Tt(s)||(s.content instanceof l&&wt(s.content),Et(s),m=s);if(m=null,Pe)return t;if(He){if(Ue)for(f=ue.call(i.ownerDocument);i.firstChild;)f.appendChild(i.firstChild);else f=i;return xe.shadowroot&&(f=me.call(a,f,!0)),f}var h=Ce?i.outerHTML:i.innerHTML;return Ce&&Ee["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&S(X,i.ownerDocument.doctype.name)&&(h="<!DOCTYPE "+i.ownerDocument.doctype.name+">\n"+h),Me&&(h=E(h,ge," "),h=E(h,ye," ")),oe&&ze?oe.createHTML(h):h},r.setConfig=function(e){it(e),Ie=!0},r.clearConfig=function(){rt=null,Ie=!1},r.isValidAttribute=function(e,t,n){rt||it({});var r=he(e),o=he(t);return Nt(r,o,n)},r.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],T(pe[e],t))},r.removeHook=function(e){if(pe[e])return v(pe[e])},r.removeHooks=function(e){pe[e]&&(pe[e]=[])},r.removeAllHooks=function(){pe={}},r}()}));
//# sourceMappingURL=purify.min.js.map
;/*!
 * Bowser - a browser detector
 * https://github.com/ded/bowser
 * MIT License | (c) Dustin Diaz 2015
 */!function(name,definition){if(typeof module!='undefined'&&module.exports)module.exports=definition()
else if(typeof define=='function'&&define.amd)define(name,definition)
else this[name]=definition()}('bowser',function(){var t=!0
function detect(ua){function getFirstMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[1])||''}
function getSecondMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[2])||''}
var iosdevice=getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(),likeAndroid=/like android/i.test(ua),android=!likeAndroid&&/android/i.test(ua),nexusMobile=/nexus\s*[0-6]\s*/i.test(ua),nexusTablet=!nexusMobile&&/nexus\s*[0-9]+/i.test(ua),chromeos=/CrOS/.test(ua),silk=/silk/i.test(ua),sailfish=/sailfish/i.test(ua),tizen=/tizen/i.test(ua),webos=/(web|hpw)os/i.test(ua),windowsphone=/windows phone/i.test(ua),windows=!windowsphone&&/windows/i.test(ua),mac=!iosdevice&&!silk&&/macintosh/i.test(ua),linux=!android&&!sailfish&&!tizen&&!webos&&/linux/i.test(ua),edgeVersion=getFirstMatch(/edge\/(\d+(\.\d+)?)/i),versionIdentifier=getFirstMatch(/version\/(\d+(\.\d+)?)/i),tablet=/tablet/i.test(ua),mobile=!tablet&&/[^-]mobi/i.test(ua),xbox=/xbox/i.test(ua),result
if(/opera|opr|opios/i.test(ua)){result={name:'Opera',opera:t,version:versionIdentifier||getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}}else if(/coast/i.test(ua)){result={name:'Opera Coast',coast:t,version:versionIdentifier||getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}}else if(/yabrowser/i.test(ua)){result={name:'Yandex Browser',yandexbrowser:t,version:versionIdentifier||getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}}else if(/ucbrowser/i.test(ua)){result={name:'UC Browser',ucbrowser:t,version:getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/mxios/i.test(ua)){result={name:'Maxthon',maxthon:t,version:getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/epiphany/i.test(ua)){result={name:'Epiphany',epiphany:t,version:getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/puffin/i.test(ua)){result={name:'Puffin',puffin:t,version:getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}}else if(/sleipnir/i.test(ua)){result={name:'Sleipnir',sleipnir:t,version:getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/k-meleon/i.test(ua)){result={name:'K-Meleon',kMeleon:t,version:getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}}else if(windowsphone){result={name:'Windows Phone',windowsphone:t}
if(edgeVersion){result.msedge=t
result.version=edgeVersion}else{result.msie=t
result.version=getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)}}else if(/msie|trident/i.test(ua)){result={name:'Internet Explorer',msie:t,version:getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)}}else if(chromeos){result={name:'Chrome',chromeos:t,chromeBook:t,chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(/chrome.+? edge/i.test(ua)){result={name:'Microsoft Edge',msedge:t,version:edgeVersion}}else if(/vivaldi/i.test(ua)){result={name:'Vivaldi',vivaldi:t,version:getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(sailfish){result={name:'Sailfish',sailfish:t,version:getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}}else if(/seamonkey\//i.test(ua)){result={name:'SeaMonkey',seamonkey:t,version:getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)}}else if(/firefox|iceweasel|fxios/i.test(ua)){result={name:'Firefox',firefox:t,version:getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)}
if(/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)){result.firefoxos=t}}else if(silk){result={name:'Amazon Silk',silk:t,version:getFirstMatch(/silk\/(\d+(\.\d+)?)/i)}}else if(/phantom/i.test(ua)){result={name:'PhantomJS',phantom:t,version:getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)}}else if(/slimerjs/i.test(ua)){result={name:'SlimerJS',slimer:t,version:getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)}}else if(/blackberry|\bbb\d+/i.test(ua)||/rim\stablet/i.test(ua)){result={name:'BlackBerry',blackberry:t,version:versionIdentifier||getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}}else if(webos){result={name:'WebOS',webos:t,version:versionIdentifier||getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)};if(/touchpad\//i.test(ua)){result.touchpad=t}}else if(/bada/i.test(ua)){result={name:'Bada',bada:t,version:getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)}}else if(tizen){result={name:'Tizen',tizen:t,version:getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(/qupzilla/i.test(ua)){result={name:'QupZilla',qupzilla:t,version:getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||versionIdentifier}}else if(/chromium/i.test(ua)){result={name:'Chromium',chromium:t,version:getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||versionIdentifier}}else if(/chrome|crios|crmo/i.test(ua)){result={name:'Chrome',chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(android){result={name:'Android',version:versionIdentifier}}else if(/safari|applewebkit/i.test(ua)){result={name:'Safari',safari:t}
if(versionIdentifier){result.version=versionIdentifier}}else if(iosdevice){result={name:iosdevice=='iphone'?'iPhone':iosdevice=='ipad'?'iPad':'iPod'}
if(versionIdentifier){result.version=versionIdentifier}}else if(/googlebot/i.test(ua)){result={name:'Googlebot',googlebot:t,version:getFirstMatch(/googlebot\/(\d+(\.\d+))/i)||versionIdentifier}}else{result={name:getFirstMatch(/^(.*)\/(.*) /),version:getSecondMatch(/^(.*)\/(.*) /)}}
if(!result.msedge&&/(apple)?webkit/i.test(ua)){if(/(apple)?webkit\/537\.36/i.test(ua)){result.name=result.name||"Blink"
result.blink=t}else{result.name=result.name||"Webkit"
result.webkit=t}
if(!result.version&&versionIdentifier){result.version=versionIdentifier}}else if(!result.opera&&/gecko\//i.test(ua)){result.name=result.name||"Gecko"
result.gecko=t
result.version=result.version||getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)}
if(!result.msedge&&(android||result.silk)){result.android=t}else if(iosdevice){result[iosdevice]=t
result.ios=t}else if(mac){result.mac=t}else if(xbox){result.xbox=t}else if(windows){result.windows=t}else if(linux){result.linux=t}
var osVersion='';if(result.windowsphone){osVersion=getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i)}else if(iosdevice){osVersion=getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);osVersion=osVersion.replace(/[_\s]/g,'.')}else if(android){osVersion=getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i)}else if(result.webos){osVersion=getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i)}else if(result.blackberry){osVersion=getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i)}else if(result.bada){osVersion=getFirstMatch(/bada\/(\d+(\.\d+)*)/i)}else if(result.tizen){osVersion=getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i)}
if(osVersion){result.osversion=osVersion}
var osMajorVersion=osVersion.split('.')[0];if(tablet||nexusTablet||iosdevice=='ipad'||(android&&(osMajorVersion==3||(osMajorVersion>=4&&!mobile)))||result.silk){result.tablet=t}else if(mobile||iosdevice=='iphone'||iosdevice=='ipod'||android||nexusMobile||result.blackberry||result.webos||result.bada){result.mobile=t}
if(result.msedge||(result.msie&&result.version>=10)||(result.yandexbrowser&&result.version>=15)||(result.vivaldi&&result.version>=1.0)||(result.chrome&&result.version>=20)||(result.firefox&&result.version>=20.0)||(result.safari&&result.version>=6)||(result.opera&&result.version>=10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]>=6)||(result.blackberry&&result.version>=10.1)||(result.chromium&&result.version>=20)){result.a=t}else if((result.msie&&result.version<10)||(result.chrome&&result.version<20)||(result.firefox&&result.version<20.0)||(result.safari&&result.version<6)||(result.opera&&result.version<10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]<6)||(result.chromium&&result.version<20)){result.c=t}else result.x=t
return result}
var bowser=detect(typeof navigator!=='undefined'?navigator.userAgent:'')
bowser.test=function(browserList){for(var i=0;i<browserList.length;++i){var browserItem=browserList[i];if(typeof browserItem==='string'){if(browserItem in bowser){return!0}}}
return!1}
function getVersionPrecision(version){return version.split(".").length}
function map(arr,iterator){var result=[],i;if(Array.prototype.map){return Array.prototype.map.call(arr,iterator)}
for(i=0;i<arr.length;i++){result.push(iterator(arr[i]))}
return result}
function compareVersions(versions){var precision=Math.max(getVersionPrecision(versions[0]),getVersionPrecision(versions[1]));var chunks=map(versions,function(version){var delta=precision-getVersionPrecision(version);version=version+new Array(delta+1).join(".0");return map(version.split("."),function(chunk){return new Array(20-chunk.length).join("0")+chunk}).reverse()});while(--precision>=0){if(chunks[0][precision]>chunks[1][precision]){return 1}else if(chunks[0][precision]===chunks[1][precision]){if(precision===0){return 0}}else{return-1}}}
function isUnsupportedBrowser(minVersions,strictMode,ua){var _bowser=bowser;if(typeof strictMode==='string'){ua=strictMode;strictMode=void(0)}
if(strictMode===void(0)){strictMode=!1}
if(ua){_bowser=detect(ua)}
var version=""+_bowser.version;for(var browser in minVersions){if(minVersions.hasOwnProperty(browser)){if(_bowser[browser]){return compareVersions([version,minVersions[browser]])<0}}}
return strictMode}
function check(minVersions,strictMode,ua){return!isUnsupportedBrowser(minVersions,strictMode,ua)}
bowser.isUnsupportedBrowser=isUnsupportedBrowser;bowser.compareVersions=compareVersions;bowser.check=check;bowser._detect=detect;return bowser});(function($){UABBTrigger={triggerHook:function(hook,args){$('body').trigger('uabb-trigger.'+hook,args)},addHook:function(hook,callback){$('body').on('uabb-trigger.'+hook,callback)},removeHook:function(hook,callback){$('body').off('uabb-trigger.'+hook,callback)},}})(jQuery);jQuery(document).ready(function($){if(typeof bowser!=='undefined'&&bowser!==null){var uabb_browser=bowser.name,uabb_browser_v=bowser.version,uabb_browser_class=uabb_browser.replace(/\s+/g,'-').toLowerCase(),uabb_browser_v_class=uabb_browser_class+parseInt(uabb_browser_v);$('html').addClass(uabb_browser_class).addClass(uabb_browser_v_class)}
$('.uabb-row-separator').parents('html').css('overflow-x','hidden')})
;/*!
 * Bowser - a browser detector
 * https://github.com/ded/bowser
 * MIT License | (c) Dustin Diaz 2015
 */!function(name,definition){if(typeof module!='undefined'&&module.exports)module.exports=definition()
else if(typeof define=='function'&&define.amd)define(name,definition)
else this[name]=definition()}('bowser',function(){var t=!0
function detect(ua){function getFirstMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[1])||''}
function getSecondMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[2])||''}
var iosdevice=getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(),likeAndroid=/like android/i.test(ua),android=!likeAndroid&&/android/i.test(ua),nexusMobile=/nexus\s*[0-6]\s*/i.test(ua),nexusTablet=!nexusMobile&&/nexus\s*[0-9]+/i.test(ua),chromeos=/CrOS/.test(ua),silk=/silk/i.test(ua),sailfish=/sailfish/i.test(ua),tizen=/tizen/i.test(ua),webos=/(web|hpw)os/i.test(ua),windowsphone=/windows phone/i.test(ua),windows=!windowsphone&&/windows/i.test(ua),mac=!iosdevice&&!silk&&/macintosh/i.test(ua),linux=!android&&!sailfish&&!tizen&&!webos&&/linux/i.test(ua),edgeVersion=getFirstMatch(/edge\/(\d+(\.\d+)?)/i),versionIdentifier=getFirstMatch(/version\/(\d+(\.\d+)?)/i),tablet=/tablet/i.test(ua),mobile=!tablet&&/[^-]mobi/i.test(ua),xbox=/xbox/i.test(ua),result
if(/opera|opr|opios/i.test(ua)){result={name:'Opera',opera:t,version:versionIdentifier||getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}}else if(/coast/i.test(ua)){result={name:'Opera Coast',coast:t,version:versionIdentifier||getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}}else if(/yabrowser/i.test(ua)){result={name:'Yandex Browser',yandexbrowser:t,version:versionIdentifier||getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}}else if(/ucbrowser/i.test(ua)){result={name:'UC Browser',ucbrowser:t,version:getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/mxios/i.test(ua)){result={name:'Maxthon',maxthon:t,version:getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/epiphany/i.test(ua)){result={name:'Epiphany',epiphany:t,version:getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/puffin/i.test(ua)){result={name:'Puffin',puffin:t,version:getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}}else if(/sleipnir/i.test(ua)){result={name:'Sleipnir',sleipnir:t,version:getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/k-meleon/i.test(ua)){result={name:'K-Meleon',kMeleon:t,version:getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}}else if(windowsphone){result={name:'Windows Phone',windowsphone:t}
if(edgeVersion){result.msedge=t
result.version=edgeVersion}else{result.msie=t
result.version=getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)}}else if(/msie|trident/i.test(ua)){result={name:'Internet Explorer',msie:t,version:getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)}}else if(chromeos){result={name:'Chrome',chromeos:t,chromeBook:t,chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(/chrome.+? edge/i.test(ua)){result={name:'Microsoft Edge',msedge:t,version:edgeVersion}}else if(/vivaldi/i.test(ua)){result={name:'Vivaldi',vivaldi:t,version:getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(sailfish){result={name:'Sailfish',sailfish:t,version:getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}}else if(/seamonkey\//i.test(ua)){result={name:'SeaMonkey',seamonkey:t,version:getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)}}else if(/firefox|iceweasel|fxios/i.test(ua)){result={name:'Firefox',firefox:t,version:getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)}
if(/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)){result.firefoxos=t}}else if(silk){result={name:'Amazon Silk',silk:t,version:getFirstMatch(/silk\/(\d+(\.\d+)?)/i)}}else if(/phantom/i.test(ua)){result={name:'PhantomJS',phantom:t,version:getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)}}else if(/slimerjs/i.test(ua)){result={name:'SlimerJS',slimer:t,version:getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)}}else if(/blackberry|\bbb\d+/i.test(ua)||/rim\stablet/i.test(ua)){result={name:'BlackBerry',blackberry:t,version:versionIdentifier||getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}}else if(webos){result={name:'WebOS',webos:t,version:versionIdentifier||getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)};if(/touchpad\//i.test(ua)){result.touchpad=t}}else if(/bada/i.test(ua)){result={name:'Bada',bada:t,version:getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)}}else if(tizen){result={name:'Tizen',tizen:t,version:getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(/qupzilla/i.test(ua)){result={name:'QupZilla',qupzilla:t,version:getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||versionIdentifier}}else if(/chromium/i.test(ua)){result={name:'Chromium',chromium:t,version:getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||versionIdentifier}}else if(/chrome|crios|crmo/i.test(ua)){result={name:'Chrome',chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(android){result={name:'Android',version:versionIdentifier}}else if(/safari|applewebkit/i.test(ua)){result={name:'Safari',safari:t}
if(versionIdentifier){result.version=versionIdentifier}}else if(iosdevice){result={name:iosdevice=='iphone'?'iPhone':iosdevice=='ipad'?'iPad':'iPod'}
if(versionIdentifier){result.version=versionIdentifier}}else if(/googlebot/i.test(ua)){result={name:'Googlebot',googlebot:t,version:getFirstMatch(/googlebot\/(\d+(\.\d+))/i)||versionIdentifier}}else{result={name:getFirstMatch(/^(.*)\/(.*) /),version:getSecondMatch(/^(.*)\/(.*) /)}}
if(!result.msedge&&/(apple)?webkit/i.test(ua)){if(/(apple)?webkit\/537\.36/i.test(ua)){result.name=result.name||"Blink"
result.blink=t}else{result.name=result.name||"Webkit"
result.webkit=t}
if(!result.version&&versionIdentifier){result.version=versionIdentifier}}else if(!result.opera&&/gecko\//i.test(ua)){result.name=result.name||"Gecko"
result.gecko=t
result.version=result.version||getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)}
if(!result.msedge&&(android||result.silk)){result.android=t}else if(iosdevice){result[iosdevice]=t
result.ios=t}else if(mac){result.mac=t}else if(xbox){result.xbox=t}else if(windows){result.windows=t}else if(linux){result.linux=t}
var osVersion='';if(result.windowsphone){osVersion=getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i)}else if(iosdevice){osVersion=getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);osVersion=osVersion.replace(/[_\s]/g,'.')}else if(android){osVersion=getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i)}else if(result.webos){osVersion=getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i)}else if(result.blackberry){osVersion=getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i)}else if(result.bada){osVersion=getFirstMatch(/bada\/(\d+(\.\d+)*)/i)}else if(result.tizen){osVersion=getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i)}
if(osVersion){result.osversion=osVersion}
var osMajorVersion=osVersion.split('.')[0];if(tablet||nexusTablet||iosdevice=='ipad'||(android&&(osMajorVersion==3||(osMajorVersion>=4&&!mobile)))||result.silk){result.tablet=t}else if(mobile||iosdevice=='iphone'||iosdevice=='ipod'||android||nexusMobile||result.blackberry||result.webos||result.bada){result.mobile=t}
if(result.msedge||(result.msie&&result.version>=10)||(result.yandexbrowser&&result.version>=15)||(result.vivaldi&&result.version>=1.0)||(result.chrome&&result.version>=20)||(result.firefox&&result.version>=20.0)||(result.safari&&result.version>=6)||(result.opera&&result.version>=10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]>=6)||(result.blackberry&&result.version>=10.1)||(result.chromium&&result.version>=20)){result.a=t}else if((result.msie&&result.version<10)||(result.chrome&&result.version<20)||(result.firefox&&result.version<20.0)||(result.safari&&result.version<6)||(result.opera&&result.version<10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]<6)||(result.chromium&&result.version<20)){result.c=t}else result.x=t
return result}
var bowser=detect(typeof navigator!=='undefined'?navigator.userAgent:'')
bowser.test=function(browserList){for(var i=0;i<browserList.length;++i){var browserItem=browserList[i];if(typeof browserItem==='string'){if(browserItem in bowser){return!0}}}
return!1}
function getVersionPrecision(version){return version.split(".").length}
function map(arr,iterator){var result=[],i;if(Array.prototype.map){return Array.prototype.map.call(arr,iterator)}
for(i=0;i<arr.length;i++){result.push(iterator(arr[i]))}
return result}
function compareVersions(versions){var precision=Math.max(getVersionPrecision(versions[0]),getVersionPrecision(versions[1]));var chunks=map(versions,function(version){var delta=precision-getVersionPrecision(version);version=version+new Array(delta+1).join(".0");return map(version.split("."),function(chunk){return new Array(20-chunk.length).join("0")+chunk}).reverse()});while(--precision>=0){if(chunks[0][precision]>chunks[1][precision]){return 1}else if(chunks[0][precision]===chunks[1][precision]){if(precision===0){return 0}}else{return-1}}}
function isUnsupportedBrowser(minVersions,strictMode,ua){var _bowser=bowser;if(typeof strictMode==='string'){ua=strictMode;strictMode=void(0)}
if(strictMode===void(0)){strictMode=!1}
if(ua){_bowser=detect(ua)}
var version=""+_bowser.version;for(var browser in minVersions){if(minVersions.hasOwnProperty(browser)){if(_bowser[browser]){return compareVersions([version,minVersions[browser]])<0}}}
return strictMode}
function check(minVersions,strictMode,ua){return!isUnsupportedBrowser(minVersions,strictMode,ua)}
bowser.isUnsupportedBrowser=isUnsupportedBrowser;bowser.compareVersions=compareVersions;bowser.check=check;bowser._detect=detect;return bowser});(function($){UABBTrigger={triggerHook:function(hook,args){$('body').trigger('uabb-trigger.'+hook,args)},addHook:function(hook,callback){$('body').on('uabb-trigger.'+hook,callback)},removeHook:function(hook,callback){$('body').off('uabb-trigger.'+hook,callback)},}})(jQuery);jQuery(document).ready(function($){if(typeof bowser!=='undefined'&&bowser!==null){var uabb_browser=bowser.name,uabb_browser_v=bowser.version,uabb_browser_class=uabb_browser.replace(/\s+/g,'-').toLowerCase(),uabb_browser_v_class=uabb_browser_class+parseInt(uabb_browser_v);$('html').addClass(uabb_browser_class).addClass(uabb_browser_v_class)}
$('.uabb-row-separator').parents('html').css('overflow-x','hidden')});(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-5ef1b83bc9165 .pp-heading-separator, .fl-node-5ef1b83bc9165 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9165 .pp-heading-separator, .fl-node-5ef1b83bc9165 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-5ef1b83bc9165 .pp-heading-separator, .fl-node-5ef1b83bc9165 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9165 .pp-heading-separator, .fl-node-5ef1b83bc9165 .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-5ef1b83bc9166 .pp-heading-separator, .fl-node-5ef1b83bc9166 .pp-heading').removeClass('pp-center');$('.fl-node-5ef1b83bc9166 .pp-heading-separator, .fl-node-5ef1b83bc9166 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-5ef1b83bc9166 .pp-heading-separator, .fl-node-5ef1b83bc9166 .pp-heading').removeClass('pp-center');$('.fl-node-5ef1b83bc9166 .pp-heading-separator, .fl-node-5ef1b83bc9166 .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-5ef1b83bc9172 .pp-heading-separator, .fl-node-5ef1b83bc9172 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9172 .pp-heading-separator, .fl-node-5ef1b83bc9172 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-5ef1b83bc9172 .pp-heading-separator, .fl-node-5ef1b83bc9172 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9172 .pp-heading-separator, .fl-node-5ef1b83bc9172 .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-5ef1b83bc9175 .pp-heading-separator, .fl-node-5ef1b83bc9175 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9175 .pp-heading-separator, .fl-node-5ef1b83bc9175 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-5ef1b83bc9175 .pp-heading-separator, .fl-node-5ef1b83bc9175 .pp-heading').removeClass('pp-left');$('.fl-node-5ef1b83bc9175 .pp-heading-separator, .fl-node-5ef1b83bc9175 .pp-heading').addClass('pp-mobile-')}})(jQuery);(function($){if($(window).width()<=768&&$(window).width()>=481){$('.fl-node-60a7507d40e72 .pp-heading-separator, .fl-node-60a7507d40e72 .pp-heading').removeClass('pp-left');$('.fl-node-60a7507d40e72 .pp-heading-separator, .fl-node-60a7507d40e72 .pp-heading').addClass('pp-tablet-')}
if($(window).width()<=480){$('.fl-node-60a7507d40e72 .pp-heading-separator, .fl-node-60a7507d40e72 .pp-heading').removeClass('pp-left');$('.fl-node-60a7507d40e72 .pp-heading-separator, .fl-node-60a7507d40e72 .pp-heading').addClass('pp-mobile-')}})(jQuery)
;/(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1)
;/*!
 * Bowser - a browser detector
 * https://github.com/ded/bowser
 * MIT License | (c) Dustin Diaz 2015
 */!function(name,definition){if(typeof module!='undefined'&&module.exports)module.exports=definition()
else if(typeof define=='function'&&define.amd)define(name,definition)
else this[name]=definition()}('bowser',function(){var t=!0
function detect(ua){function getFirstMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[1])||''}
function getSecondMatch(regex){var match=ua.match(regex);return(match&&match.length>1&&match[2])||''}
var iosdevice=getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(),likeAndroid=/like android/i.test(ua),android=!likeAndroid&&/android/i.test(ua),nexusMobile=/nexus\s*[0-6]\s*/i.test(ua),nexusTablet=!nexusMobile&&/nexus\s*[0-9]+/i.test(ua),chromeos=/CrOS/.test(ua),silk=/silk/i.test(ua),sailfish=/sailfish/i.test(ua),tizen=/tizen/i.test(ua),webos=/(web|hpw)os/i.test(ua),windowsphone=/windows phone/i.test(ua),windows=!windowsphone&&/windows/i.test(ua),mac=!iosdevice&&!silk&&/macintosh/i.test(ua),linux=!android&&!sailfish&&!tizen&&!webos&&/linux/i.test(ua),edgeVersion=getFirstMatch(/edge\/(\d+(\.\d+)?)/i),versionIdentifier=getFirstMatch(/version\/(\d+(\.\d+)?)/i),tablet=/tablet/i.test(ua),mobile=!tablet&&/[^-]mobi/i.test(ua),xbox=/xbox/i.test(ua),result
if(/opera|opr|opios/i.test(ua)){result={name:'Opera',opera:t,version:versionIdentifier||getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}}else if(/coast/i.test(ua)){result={name:'Opera Coast',coast:t,version:versionIdentifier||getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}}else if(/yabrowser/i.test(ua)){result={name:'Yandex Browser',yandexbrowser:t,version:versionIdentifier||getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}}else if(/ucbrowser/i.test(ua)){result={name:'UC Browser',ucbrowser:t,version:getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/mxios/i.test(ua)){result={name:'Maxthon',maxthon:t,version:getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/epiphany/i.test(ua)){result={name:'Epiphany',epiphany:t,version:getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/puffin/i.test(ua)){result={name:'Puffin',puffin:t,version:getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}}else if(/sleipnir/i.test(ua)){result={name:'Sleipnir',sleipnir:t,version:getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}}else if(/k-meleon/i.test(ua)){result={name:'K-Meleon',kMeleon:t,version:getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}}else if(windowsphone){result={name:'Windows Phone',windowsphone:t}
if(edgeVersion){result.msedge=t
result.version=edgeVersion}else{result.msie=t
result.version=getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)}}else if(/msie|trident/i.test(ua)){result={name:'Internet Explorer',msie:t,version:getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)}}else if(chromeos){result={name:'Chrome',chromeos:t,chromeBook:t,chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(/chrome.+? edge/i.test(ua)){result={name:'Microsoft Edge',msedge:t,version:edgeVersion}}else if(/vivaldi/i.test(ua)){result={name:'Vivaldi',vivaldi:t,version:getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(sailfish){result={name:'Sailfish',sailfish:t,version:getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}}else if(/seamonkey\//i.test(ua)){result={name:'SeaMonkey',seamonkey:t,version:getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)}}else if(/firefox|iceweasel|fxios/i.test(ua)){result={name:'Firefox',firefox:t,version:getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)}
if(/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)){result.firefoxos=t}}else if(silk){result={name:'Amazon Silk',silk:t,version:getFirstMatch(/silk\/(\d+(\.\d+)?)/i)}}else if(/phantom/i.test(ua)){result={name:'PhantomJS',phantom:t,version:getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)}}else if(/slimerjs/i.test(ua)){result={name:'SlimerJS',slimer:t,version:getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)}}else if(/blackberry|\bbb\d+/i.test(ua)||/rim\stablet/i.test(ua)){result={name:'BlackBerry',blackberry:t,version:versionIdentifier||getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}}else if(webos){result={name:'WebOS',webos:t,version:versionIdentifier||getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)};if(/touchpad\//i.test(ua)){result.touchpad=t}}else if(/bada/i.test(ua)){result={name:'Bada',bada:t,version:getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)}}else if(tizen){result={name:'Tizen',tizen:t,version:getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||versionIdentifier}}else if(/qupzilla/i.test(ua)){result={name:'QupZilla',qupzilla:t,version:getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||versionIdentifier}}else if(/chromium/i.test(ua)){result={name:'Chromium',chromium:t,version:getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||versionIdentifier}}else if(/chrome|crios|crmo/i.test(ua)){result={name:'Chrome',chrome:t,version:getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}}else if(android){result={name:'Android',version:versionIdentifier}}else if(/safari|applewebkit/i.test(ua)){result={name:'Safari',safari:t}
if(versionIdentifier){result.version=versionIdentifier}}else if(iosdevice){result={name:iosdevice=='iphone'?'iPhone':iosdevice=='ipad'?'iPad':'iPod'}
if(versionIdentifier){result.version=versionIdentifier}}else if(/googlebot/i.test(ua)){result={name:'Googlebot',googlebot:t,version:getFirstMatch(/googlebot\/(\d+(\.\d+))/i)||versionIdentifier}}else{result={name:getFirstMatch(/^(.*)\/(.*) /),version:getSecondMatch(/^(.*)\/(.*) /)}}
if(!result.msedge&&/(apple)?webkit/i.test(ua)){if(/(apple)?webkit\/537\.36/i.test(ua)){result.name=result.name||"Blink"
result.blink=t}else{result.name=result.name||"Webkit"
result.webkit=t}
if(!result.version&&versionIdentifier){result.version=versionIdentifier}}else if(!result.opera&&/gecko\//i.test(ua)){result.name=result.name||"Gecko"
result.gecko=t
result.version=result.version||getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)}
if(!result.msedge&&(android||result.silk)){result.android=t}else if(iosdevice){result[iosdevice]=t
result.ios=t}else if(mac){result.mac=t}else if(xbox){result.xbox=t}else if(windows){result.windows=t}else if(linux){result.linux=t}
var osVersion='';if(result.windowsphone){osVersion=getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i)}else if(iosdevice){osVersion=getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);osVersion=osVersion.replace(/[_\s]/g,'.')}else if(android){osVersion=getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i)}else if(result.webos){osVersion=getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i)}else if(result.blackberry){osVersion=getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i)}else if(result.bada){osVersion=getFirstMatch(/bada\/(\d+(\.\d+)*)/i)}else if(result.tizen){osVersion=getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i)}
if(osVersion){result.osversion=osVersion}
var osMajorVersion=osVersion.split('.')[0];if(tablet||nexusTablet||iosdevice=='ipad'||(android&&(osMajorVersion==3||(osMajorVersion>=4&&!mobile)))||result.silk){result.tablet=t}else if(mobile||iosdevice=='iphone'||iosdevice=='ipod'||android||nexusMobile||result.blackberry||result.webos||result.bada){result.mobile=t}
if(result.msedge||(result.msie&&result.version>=10)||(result.yandexbrowser&&result.version>=15)||(result.vivaldi&&result.version>=1.0)||(result.chrome&&result.version>=20)||(result.firefox&&result.version>=20.0)||(result.safari&&result.version>=6)||(result.opera&&result.version>=10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]>=6)||(result.blackberry&&result.version>=10.1)||(result.chromium&&result.version>=20)){result.a=t}else if((result.msie&&result.version<10)||(result.chrome&&result.version<20)||(result.firefox&&result.version<20.0)||(result.safari&&result.version<6)||(result.opera&&result.version<10.0)||(result.ios&&result.osversion&&result.osversion.split(".")[0]<6)||(result.chromium&&result.version<20)){result.c=t}else result.x=t
return result}
var bowser=detect(typeof navigator!=='undefined'?navigator.userAgent:'')
bowser.test=function(browserList){for(var i=0;i<browserList.length;++i){var browserItem=browserList[i];if(typeof browserItem==='string'){if(browserItem in bowser){return!0}}}
return!1}
function getVersionPrecision(version){return version.split(".").length}
function map(arr,iterator){var result=[],i;if(Array.prototype.map){return Array.prototype.map.call(arr,iterator)}
for(i=0;i<arr.length;i++){result.push(iterator(arr[i]))}
return result}
function compareVersions(versions){var precision=Math.max(getVersionPrecision(versions[0]),getVersionPrecision(versions[1]));var chunks=map(versions,function(version){var delta=precision-getVersionPrecision(version);version=version+new Array(delta+1).join(".0");return map(version.split("."),function(chunk){return new Array(20-chunk.length).join("0")+chunk}).reverse()});while(--precision>=0){if(chunks[0][precision]>chunks[1][precision]){return 1}else if(chunks[0][precision]===chunks[1][precision]){if(precision===0){return 0}}else{return-1}}}
function isUnsupportedBrowser(minVersions,strictMode,ua){var _bowser=bowser;if(typeof strictMode==='string'){ua=strictMode;strictMode=void(0)}
if(strictMode===void(0)){strictMode=!1}
if(ua){_bowser=detect(ua)}
var version=""+_bowser.version;for(var browser in minVersions){if(minVersions.hasOwnProperty(browser)){if(_bowser[browser]){return compareVersions([version,minVersions[browser]])<0}}}
return strictMode}
function check(minVersions,strictMode,ua){return!isUnsupportedBrowser(minVersions,strictMode,ua)}
bowser.isUnsupportedBrowser=isUnsupportedBrowser;bowser.compareVersions=compareVersions;bowser.check=check;bowser._detect=detect;return bowser});(function($){UABBTrigger={triggerHook:function(hook,args){$('body').trigger('uabb-trigger.'+hook,args)},addHook:function(hook,callback){$('body').on('uabb-trigger.'+hook,callback)},removeHook:function(hook,callback){$('body').off('uabb-trigger.'+hook,callback)},}})(jQuery);jQuery(document).ready(function($){if(typeof bowser!=='undefined'&&bowser!==null){var uabb_browser=bowser.name,uabb_browser_v=bowser.version,uabb_browser_class=uabb_browser.replace(/\s+/g,'-').toLowerCase(),uabb_browser_v_class=uabb_browser_class+parseInt(uabb_browser_v);$('html').addClass(uabb_browser_class).addClass(uabb_browser_v_class)}
$('.uabb-row-separator').parents('html').css('overflow-x','hidden')})
;