{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/assets/js/src/page.js","webpack:///./src/assets/plugin/thesaas/js/loaders/core.js","webpack:///./src/assets/plugin/thesaas/js/partials/main.js","webpack:///./node_modules/popper.js/dist/umd/popper.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/smoothscroll-for-websites/SmoothScroll.js","webpack:///./node_modules/objectFitPolyfill/dist/objectFitPolyfill.min.js","webpack:///./src/assets/plugin/thesaas/js/vendors/jquery.js","webpack:///./src/assets/plugin/thesaas/js/vendors/bootstrap.js","webpack:///./src/assets/plugin/thesaas/js/vendors/aos.js","webpack:///./node_modules/aos/dist/aos.js","webpack:///./src/assets/plugin/thesaas/js/vendors/constellation.js","webpack:///./src/assets/plugin/thesaas/js/vendors/countdown.js","webpack:///./node_modules/jquery-countdown/dist/jquery.countdown.js","webpack:///./node_modules/waypoints/lib/jquery.waypoints.js","webpack:///./src/assets/plugin/thesaas/js/vendors/granim.js","webpack:///./node_modules/granim/index.js","webpack:///./node_modules/granim/lib/Granim.js","webpack:///./node_modules/granim/lib/animateColors.js","webpack:///./node_modules/granim/lib/changeBlendingMode.js","webpack:///./node_modules/granim/lib/changeDirection.js","webpack:///./node_modules/granim/lib/changeState.js","webpack:///./node_modules/granim/lib/clear.js","webpack:///./node_modules/granim/lib/convertColorToRgba.js","webpack:///./node_modules/granim/lib/destroy.js","webpack:///./node_modules/granim/lib/eventPolyfill.js","webpack:///./node_modules/granim/lib/getColor.js","webpack:///./node_modules/granim/lib/getColorDiff.js","webpack:///./node_modules/granim/lib/getColorPos.js","webpack:///./node_modules/granim/lib/getColorPosDiff.js","webpack:///./node_modules/granim/lib/getCurrentColors.js","webpack:///./node_modules/granim/lib/getCurrentColorsPos.js","webpack:///./node_modules/granim/lib/getDimensions.js","webpack:///./node_modules/granim/lib/getElement.js","webpack:///./node_modules/granim/lib/getLightness.js","webpack:///./node_modules/granim/lib/makeGradient.js","webpack:///./node_modules/granim/lib/onResize.js","webpack:///./node_modules/granim/lib/onScroll.js","webpack:///./node_modules/granim/lib/pause.js","webpack:///./node_modules/granim/lib/pauseWhenNotInView.js","webpack:///./node_modules/granim/lib/play.js","webpack:///./node_modules/granim/lib/prepareImage.js","webpack:///./node_modules/granim/lib/refreshColorsAndPos.js","webpack:///./node_modules/granim/lib/setColors.js","webpack:///./node_modules/granim/lib/setDirection.js","webpack:///./node_modules/granim/lib/setSizeAttributes.js","webpack:///./node_modules/granim/lib/triggerError.js","webpack:///./node_modules/granim/lib/validateInput.js","webpack:///./src/assets/plugin/thesaas/js/vendors/jarallax.js","webpack:///./node_modules/jarallax/dist/jarallax.min.js","webpack:///./node_modules/jarallax/dist/jarallax-video.min.js","webpack:///./src/assets/plugin/thesaas/js/vendors/lity.js","webpack:///./node_modules/lity/dist/lity.js","webpack:///./src/assets/plugin/thesaas/js/vendors/photoswipe.js","webpack:///./node_modules/jquery.photoswipe/dist/jquery.photoswipe-global.js","webpack:///./src/assets/plugin/thesaas/js/vendors/shuffle.js","webpack:///./node_modules/imagesloaded/imagesloaded.pkgd.js","webpack:///./node_modules/shufflejs/dist/shuffle.min.js","webpack:///./src/assets/plugin/thesaas/js/vendors/slick.js","webpack:///./node_modules/slick-carousel/slick/slick.js","webpack:///./src/assets/plugin/thesaas/js/vendors/typed.js","webpack:///./node_modules/typed.js/lib/typed.js","webpack:///./src/assets/plugin/thesaas/js/loaders/partials.js","webpack:///./src/assets/plugin/thesaas/js/partials/config.js","webpack:///./src/assets/plugin/thesaas/js/partials/bind.js","webpack:///./src/assets/plugin/thesaas/js/partials/drawer.js","webpack:///./src/assets/plugin/thesaas/js/partials/font.js","webpack:///./src/assets/plugin/thesaas/js/partials/form.js","webpack:///./src/assets/plugin/thesaas/js/partials/mailer.js","webpack:///./src/assets/plugin/thesaas/js/partials/map.js","webpack:///./src/assets/plugin/thesaas/js/partials/modal.js","webpack:///./src/assets/plugin/thesaas/js/partials/navbar.js","webpack:///./src/assets/plugin/thesaas/js/partials/offcanvas.js","webpack:///./src/assets/plugin/thesaas/js/partials/popup.js","webpack:///./src/assets/plugin/thesaas/js/partials/recaptcha.js","webpack:///./src/assets/plugin/thesaas/js/partials/scroll.js","webpack:///./src/assets/plugin/thesaas/js/partials/section.js","webpack:///./src/assets/plugin/thesaas/js/partials/sidebar.js","webpack:///./src/assets/plugin/thesaas/js/partials/video.js","webpack:///./src/assets/plugin/thesaas/js/partials/util.js","webpack:///./src/assets/js/src/config.js","webpack:///./src/assets/js/src/script.js","webpack:///./node_modules/countup.js/dist/countUp.min.js","webpack:///./src/assets/plugin/thesaas/js/vendors/countup.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","slice","concat","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","rtrim","isArrayLike","length","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","trim","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","wrap","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","parseInt","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","$","noConflict","g","Function","Popper","SmoothScroll","page.9afb43e0","version","vendors","navbar","header","footer","googleApiKey","googleAnalyticsKey","reCaptchaSiteKey","reCaptchaLanguage","disableAOSonMobile","smoothScroll","initVendors","initBind","initDrawer","initFont","initForm","initMailer","initModal","initNavbar","initOffcanvas","initPopup","initScroll","initSection","initSidebar","initVideo","heading","forEach","vendor","$name","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","called","scheduled","functionToCheck","getStyleComputedProperty","element","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","getClientRect","offsets","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","modifiers","ends","findIndex","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","_this","Utils","PopperUtils","_defineProperties","_createClass","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","transitionEndEmulator","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","ClassName$1","Selector$1","Event$1","FOCUS_BLUR_DATA_API","LOAD_DATA_API","Button","triggerChangeEvent","addAriaPressed","classList","tagName","hasAttribute","inputBtn","_i","_len","_button","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","slide","pause","touch","DefaultType","Direction","Event$2","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","ClassName$2","Selector$2","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","setInterval","visibilityState","activeIndex","_getItemIndex","direction","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Event$3","SHOW","SHOWN","HIDE","HIDDEN","ClassName$3","Dimension","Selector$3","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$this","$trigger","$target","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Event$4","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName$4","Selector$4","AttachmentMap","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Event$5","HIDE_PREVENTED","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","ClassName$5","Selector$5","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","NAME$6","JQUERY_NO_CONFLICT$6","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","template","title","fallbackPlacement","sanitize","AttachmentMap$1","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HoverState","Event$6","INSERTED","FOCUSOUT","ClassName$6","Selector$6","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","NAME","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","popperInstance","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","ClassName$7","Selector$7","Event$7","Popover","_Tooltip","subClass","superClass","__proto__","_getContent","CLASS_PREFIX$1","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","Event$8","ACTIVATE","SCROLL","ClassName$8","Selector$8","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Event$9","ClassName$9","Selector$9","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","Event$a","ClassName$a","DefaultType$7","autohide","Default$7","Selector$a","Toast","_close","Scrollspy","observer","refreshSize","deltaBufferTimer","defaultOptions","frameRate","animationTime","stepSize","pulseAlgorithm","pulseScale","pulseNormalize","accelerationDelta","accelerationMax","keyboardSupport","arrowScroll","fixedBackground","excluded","isFrame","initDone","deltaBuffer","isMac","platform","arrowKeys","37","38","39","40","windowHeight","compatMode","addEvent","keydown","isOldSafari","pendingRefresh","fullPageElem","MutationObserver","observe","childList","characterData","clearfix","clear","backgroundAttachment","que","pending","lastScroll","scrollArray","elapsed","factor","lastX","lastY","scrollRoot","getScrollRoot","isWindowScroll","$scrollBehavior","smoothBehaviorForElement","scrollBehavior","isScrollBehaviorSmooth","scrollX","scrollY","finished","pulse","scrollBy","requestFrame","wheel","isNodeName","deltaX","wheelDeltaX","deltaY","wheelDeltaY","isDivisible","wheelDelta","deltaMode","overflowing","overflowingAncestor","localStorage","SS_deltaBuffer","dpiScaledWheelDelta","allDeltasDivisableBy","tp","isTouchpad","scheduleClearCache","isChrome","frameElement","buttonTypes","isControl","URL","isInsideYoutubeVideo","isContentEditable","scrollRemaining","mousedown","clearCacheTimer","cacheX","cacheY","setCache","getCache","rootScrollHeight","isOverflowCSS","overflowNotHidden","overflowAutoOrScroll","isContentOverflowing","divisor","SCROLL_ROOT","webkitRequestAnimationFrame","mozRequestAnimationFrame","WebKitMutationObserver","MozMutationObserver","dummy","bodyScrollTop","pulse_","exp","isEdge","isSafari","isMobile","isIEWin7","isEnabledForBrowser","supportsPassive","wheelOpt","wheelEvent","optionsToSet","disconnect","SmoothScrollOptions","dataset","objectFit","objectPosition","objectFitPolyfill","registerVendor","initJquery","hasDataAttr","def","outerHTML","fullHTML","scrollToEnd","initBootstrap","tooltip","popover","AOS","initAOS","defaults","loaded","default","h","k","throttleDelay","debounceDelay","disableMutationObserver","O","atob","mobile","phone","tablet","S","isSupported","info","refreshHard","f","M","leading","maxWait","trailing","cancel","flush","valueOf","NaN","addedNodes","removedNodes","aos","subtree","opera","substr","anchor","anchorPlacement","offsetLeft","offsetTop","initConstellation","distance","canvas","color","radius","starW","lineW","constellation","star","line","Constellation","$canvas","getContext","velocity","stars","Star","vx","vy","beginPath","arc","fill","iStar","jStar","moveTo","lineTo","stroke","closePath","createStars","clearRect","setCanvas","setContext","fillStyle","strokeStyle","lineWidth","setInitialPosition","loop","initCountdown","format","textDay","textHour","textMinute","textSecond","getDataOptions","countdown","strftime","instances","precision","elapse","DIRECTIVE_KEY_MAP","Y","W","H","D","I","N","T","pluralize","plural","singular","Countdown","finalDate","$el","instanceNumber","setFinalDate","dispatchEvent","resume","countdownInstance","dateString","Number","parseDateString","newTotalSecsLeft","hasEventsAttached","getTime","totalSecsLeft","seconds","minutes","hours","days","daysToWeek","daysToMonth","weeks","weeksToMonth","months","years","getFullYear","totalDays","totalHours","totalMinutes","totalSeconds","eventName","offsetObject","directives","directive","regexp","argumentsArray","keyCounter","allWaypoints","Waypoint","Adapter","adapter","horizontal","triggerPoint","group","Group","findOrCreate","Context","findOrCreateByElement","offsetAliases","queueTrigger","invokeAll","allWaypointsArray","waypointKey","destroyAll","disableAll","enableAll","refreshAll","viewportHeight","viewportWidth","adapters","continuous","outerHeight","outerWidth","requestAnimationFrameShim","oldWindowLoad","didScroll","didResize","oldScroll","waypoints","vertical","waypointContextKey","windowContext","createThrottledScrollHandler","createThrottledResizeHandler","waypoint","checkEmpty","horizontalEmpty","verticalEmpty","resizeHandler","handleResize","scrollHandler","handleScroll","isTouch","triggeredGroups","axes","newScroll","backward","axisKey","wasBeforeTriggerPoint","nowAfterTriggerPoint","groupKey","flushTriggers","contextOffset","contextScroll","contextDimension","contextModifier","wasBeforeScroll","nowAfterScroll","triggeredForward","adjustment","oldTriggerPoint","elementOffset","freshWaypoint","findByElement","contextId","byTriggerPoint","byReverseTriggerPoint","clearTriggerQueues","triggerQueues","up","down","JQueryAdapter","createExtension","framework","overrides","Zepto","Granim","initGranim","granim","gradients","isPausedWhenNotInView","states","transitionSpeed","stretchMode","blendingMode","getElement","x1","y1","elToSetClassOn","customDirection","validateInput","stateTransitionSpeed","previousTimeStamp","isPaused","isCleared","isPausedBecauseNotInView","channels","channelsIndex","activeState","defaultStateName","isChangingState","currentColors","currentColorsPos","activetransitionSpeed","eventPolyfill","scrollDebounceThreshold","scrollDebounceTimeout","isImgLoaded","isCanvasInWindowView","firstScrollInit","animating","gradientLength","CustomEvent","gradientChange","details","isLooping","colorsFrom","colorsTo","callbacks","onStart","onGradientChange","onEnd","getDimensions","setColors","prepareImage","pauseWhenNotInViewNameSpace","pauseWhenNotInView","setSizeAttributesNameSpace","setSizeAttributes","onResize","onScroll","refreshColorsAndPos","animateColors","changeBlendingMode","changeDirection","changeState","convertColorToRgba","getColor","getColorDiff","getColorPos","getColorPosDiff","getCurrentColors","getCurrentColorsPos","getLightness","makeGradient","play","setDirection","triggerError","timestamp","progressPercent","nextGradient","wasWindowIdled","isLoop","toFixed","newBlendingMode","globalCompositeOperation","newDirection","newState","activeColorsDiff","activeColorsPosDiff","activeColors","activeColorsPos","gradientColor","nextColors","nextColorsPos","colorDiff","colorPosDiff","regex","hexa","rgba","rgb","hsla","hsl","hue2rgb","q","hslaToRgb","colorTypes","identifyColorType","hex","hexToRgba","createEvent","initCustomEvent","colorA","colorB","posA","posB","HTMLCanvasElement","lightnessAverage","gradientAverage","colorsAverage","gradient","elToSetClassOnClass","drawImage","imageNode","imagePosition","addColorStop","fillRect","elPos","setImagePosition","setImageAxisPosition","imageAxisPosition","canvasWidthOrHeight","imgOriginalWidthOrHeight","imageAlignIndex","Image","imgOriginalWidth","imgOriginalHeight","activeChannel","activeChannelPos","colors","colorsDiff","colorsPos","colorsPosDiff","colorPos","rgbaColor","isCurrentColorsSet","getCustomCoordinateInPixels","coordinate","size","ctx","createLinearGradient","createRadialGradient","x0","y0","inputType","stretchModeValues","array","definedInPixelsOrPercentage","splittedValue","areDefinedInPixelsOrPercentage","initJarallax","imgSrc","jarallax","videoSrc","oldData","$item","wndW","wndH","HTMLElement","instanceID","imgElement","imgSize","imgPosition","imgRepeat","keepImg","elementInViewport","zIndex","disableParallax","disableVideo","videoStartTime","videoEndTime","videoVolume","videoLoop","videoPlayOnlyVisible","videoLazyLoading","onInit","onDestroy","onCoverImage","pureOptions","return","Element","$container","useImgTag","initImg","canInitParallax","$itemParent","bgImage","pointerEvents","addToParallaxList","removeFromParallaxList","$clipStyles","styleSheet","parallaxScrollDistance","isElementInViewport","section","beforeTop","beforeTopEnd","afterTop","beforeBottom","beforeBottomEnd","afterBottom","visiblePercent","fromViewportCenter","coverImage","clipContainer","webkitCancelAnimationFrame","mozCancelAnimationFrame","VideoWorker","_done","_fail","execute","options_default","autoplay","mute","volume","showContols","endTime","videoID","parseURL","ID","loadAPI","userEventsList","player","playVideo","seekTo","YT","PlayerState","PLAYING","getPlayerState","setCurrentTime","getPaused","paused","pauseVideo","setVolume","$video","muted","unMute","getVolume","isMuted","videoImage","naturalWidth","thumbnail_large","getVideo","onAPIready","playerOptions","videoId","playerVars","rel","playsinline","iv_load_policy","modestbranding","controls","showinfo","disablekb","onReady","getDuration","onStateChange","ENDED","PAUSED","getCurrentTime","playerID","Player","videoWidth","videoHeight","autopause","transparent","badge","byline","portrait","Vimeo","getVideoWidth","getVideoHeight","onYouTubeIframeAPIReady","isVideoInserted","video","maxHeight","defaultInitImgResult","isValid","videoEnded","isVisible","$default_item","getImageURL","Lity","initLity","_win","_deferred","_html","_instances","_defaultOptions","esc","imageHandler","inline","placeholder","hasHideClass","youtube","_youtubeRegex","iframeHandler","transferHash","appendQueryParams","parseQueryParams","vimeo","_vimeoRegex","googlemaps","_googlemapsRegex","output","facebookvideo","_facebookvideoRegex","iframe","_imageRegexp","_transitionEndEvent","transEndEventNames","WebkitTransition","MozTransition","OTransition","transitionEnd","currSettings","pairs","decodeURI","originalUrl","newUrl","desc","failed","winHeight","currentInstance","focusableElements","focusedIndex","handleTabKey","resize","instanceToRegister","isClosed","instanceToRemove","oldAttr","preferredHandler","currentHandlers","currentHandler","loader","lity","initPhotoSwipe","closeEl","photoSwipe","1","require","UiClass","features","listener","methodName","createEl","getScrollY","yOffset","reg","getChildByClass","parentEl","childClassName","arraySearch","o1","o2","preventOverwrite","sine","out","sin","inOut","cubic","detectFeatures","helperStyle","oldIE","raf","caf","pointerEvent","pointerEnabled","msPointerEnabled","ua","isOldIOSPhone","androidversion","isOldAndroid","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","lastTime","currTime","timeToCall","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","_options","allowPanToNext","spacing","bgOpacity","mouseUsed","pinchToClose","closeOnScroll","closeOnVerticalDrag","verticalDragRange","hideAnimationDuration","showAnimationDuration","showHideOpacity","escKey","mainScrollEndFriction","panEndFriction","isClickableElement","getDoubleTapZoom","isMouseClick","initialZoomLevel","maxSpreadZoom","modal","scaleMode","_isOpen","_isDestroying","_closedByScroll","_currentItemIndex","_containerStyle","_containerShiftIndex","_upMoveEvents","_downEvents","_globalEventHandlers","_currZoomLevel","_startZoomLevel","_translatePrefix","_translateSufix","_updateSizeInterval","_itemsNeedUpdate","_itemHolders","_prevItemIndex","_dragStartEvent","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_transformKey","_pointerEventEnabled","_likelyTouchDevice","_requestAF","_cancelAF","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_features","_gestureStartTime","_gestureCheckSpeedTime","_releaseAnimData","_isZoomingIn","_verticalDragInitiated","_oldAndroidTouchEndTimeout","_isDragging","_isMultitouch","_zoomStarted","_moved","_dragAnimFrame","_mainScrollShifted","_currentPoints","_isZooming","_startPointsDistance","_currPanBounds","_currZoomElementStyle","_mainScrollAnimating","_direction","_isFirstMove","_opacityChanged","_bgOpacity","_wasOverInitialZoom","_tempCounter","_currPanDist","_startPanOffset","_panOffset","_viewportSize","_currPositionIndex","_offset","_slideSize","_indexDiff","_isFixedPosition","_modules","_windowVisibleSize","_renderMaxResolution","_registerModule","publicMethods","_getLoopedId","numSlides","_getNumItems","_listeners","_listen","_shout","listeners","_getCurrentTime","_applyBgOpacity","bg","_applyZoomTransform","styleObj","zoom","currItem","fitRatio","_applyCurrentZoomPan","allowRenderResolution","_setImageSize","_applyZoomPanToItem","initialPosition","_setTranslateX","elStyle","_moveMainScroll","dragging","newSlideIndexOffset","_mainScrollPos","_calculatePanOffset","zoomLevel","_midZoomPoint","_equalizePoints","p1","p2","_roundPoint","_mouseMoveTimeout","_onFirstMouseMove","_calculatePanBounds","bounds","_calculateItemSize","_getMinZoomLevel","_getMaxZoomLevel","_modifyDestPanOffset","destPanBounds","destPanOffset","destZoomLevel","_onKeyDown","keydownAction","_onGlobalClick","_updatePageScrollOffset","setScrollOffset","_animations","_numAnimations","_stopAnimation","_registerStartAnimation","_stopAllAnimations","_animateProp","endProp","easingFn","onComplete","startAnimTime","animloop","shout","listen","viewportSize","isMainScrollAnimating","getZoomLevel","getCurrentIndex","isDragging","isZooming","applyZoomPan","panX","panY","scrollWrap","itemHolders","allow3dTransform","perspective","zoomRatio","_setupTransforms","updateSize","scroll","oldPhone","animationName","ui","_getItemAt","rootClasses","mainClass","updateCurrItem","_showOrHide","_showOrHideTimeout","_stopDragUpdateLoop","panTo","force","goTo","updateCurrZoomItem","emulateSetContent","zoomElement","invalidateCurrItems","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","prevItem","windowScrollY","holder","hIndex","cleanSlide","zoomTo","centerPoint","updateFn","initialPanOffset","_currPoint","_startPoint","_currPointers","_startMainScrollPos","_posPoints","_tempPoint","_currZoomedItemIndex","_centerPoint","_lastReleaseTime","_currCenterPoint","_calculatePointsDistance","sqrt","_dragUpdateLoop","_renderMovement","_closestElement","_preventObj","_preventDefaultEventBehaviour","isDown","prevent","_convertTouchToPoint","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_ePoint1","_ePoint2","_tempPointsArr","_getTouchPoints","_panOrMoveMainScroll","panFriction","startOverDiff","newPanPos","newMainScrollPos","newOffset","newMainScrollPosition","mainScrollDiff","_onDragStart","_initialZoomRunning","pointerIndex","startPointsList","numPoints","_onDragMove","touchesList","_isEqualPoints","pointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","opacityRatio","_pushPosPoint","_onDragRelease","releasePoint","4","2","3","gestureType","touchList","releaseTimeDiff","_initDragReleaseAnimationData","calculateSwipeSpeed","initalPanY","initialBgOpacity","_finishSwipeMainScrollGesture","_completePanGesture","_completeZoomGesture","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","speedDecelerationRatioAbs","distanceOffset","backAnimDestination","backAnimStarted","calculateOverBoundsAnimOffset","calculateAnimOffset","timeDiff","panAnimLoop","zoomPan","lastNow","animData","itemChanged","itemsDiff","nextCircle","totalShiftDist","isFastLastFlick","finishAnimDuration","animateToX","animateToDist","touchesDistance","initialOpacity","initGestures","addEventNames","pref","msMaxTouchPoints","likelyTouchDevice","mousemove","mouseup","_initialContentSet","completeFn","thumbBounds","initialLayout","getThumbBoundsFn","closeWithRaf","fadeEverything","loadError","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_imagesToAppendPool","_controllerDefaultOptions","errorMsg","forceProgressiveLoading","preload","getNumItemsFn","isInitial","vGap","hRatio","vRatio","realPanElementW","realPanElementH","_calculateSingleItemPanBounds","_appendImage","baseDiv","preventAnimation","keepPlaceholder","imageAppended","_preloadImage","loading","loadComplete","_checkForError","cleanUp","maxRes","_appendImagesPool","poolItem","clearPlaceholder","lazyLoadItem","initController","getItemAt","isNext","preloadBefore","preloadAfter","preloader","allowProgressiveImg","screen","placeholderClassName","msrc","tapTimer","_wheelDelta","tapReleasePoint","_dispatchTapEvent","origEvent","eDetail","initTap","onTapStart","onTapRelease","touch0","touch1","p0","initDesktopZoom","setupDesktopZoom","handleMouseWheel","mouseZoomedIn","hasDraggingClass","updateZoomable","removeDraggingClass","newPanX","newPanY","toggleDesktopZoom","doubleTapZoomLevel","zoomOut","_historyUpdateTimeout","_hashChangeTimeout","_hashAnimCheckTimeout","_hashChangedByScript","_hashChangedByHistory","_hashReseted","_initialHash","_historyChanged","_closedFromURL","_urlChangedOnce","_windowLoc","_supportsPushState","_historyDefaultOptions","history","galleryUID","_getHash","substring","_cleanHistoryTimeouts","_parseItemIndexFromURL","vars","pair","galleryPIDs","searchfor","pid","_updateHash","newHash","newURL","initHistory","updateURL","onHashChange","returnToOriginal","back","pushState","pathname","PhotoSwipe","_photoswipe2","_interopRequireDefault","_photoswipeUiDefault2","PhotoSwipeMounter","$defaultGallery","getImgs","$gallery","slideSelector","getOptions","$img","$imgs","imgOffset","imgWidth","getWH","wh","wh_value","getImgSize","getWidth","getHeight","getImgInfo","original_src","caption_classname","$figcaption","get_caption","$elem","$caption_element","$parent","getImgInfoArray","imgInfoArray","addUID","openPhotoSwipe","globalOptions","eventHandler","openFromURL","$galleries","hashData","photoswipeParseHash","gid","addClickHandler","removeClickHandler","isUpdate","imgInfoArrayPromise","pswp","_fullscrenAPI","_controls","_captionContainer","_fakeCaptionContainer","_indexIndicator","_shareButton","_shareModal","_initalCloseOnScrollValue","_isIdle","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_galleryHasOneSlide","_blockControlsTap","_idleInterval","_idleTimer","_overlayUIUpdated","_controlsVisible","_shareModalHidden","_defaultUIOptions","barsSize","closeElClasses","timeToIdle","timeToIdleOutside","loadingIndicatorDelay","addCaptionHTMLFn","captionEl","fullscreenEl","zoomEl","shareEl","counterEl","arrowEl","preloaderEl","tapToClose","tapToToggleControls","clickToCloseNonZoomable","shareButtons","label","download","getImageURLForShare","getPageURLForShare","getTextForShare","indexIndicatorSep","fitControlsWidth","_onControlsTap","_onIdleMouseMove","uiElement","found","clickedClass","srcElement","_uiElements","onTap","tapDelay","_togglePswpClass","cName","_countNumItems","hasOneSlide","_toggleShareModalClass","_toggleShareModal","_updateShareURLs","_openWindowPopup","shareButtonData","image_url","page_url","share_text","shareButtonOut","parseShareButtonOut","onclick","_hasCloseClass","_idleIncrement","setIdle","_onMouseLeaveWindow","_toggleLoadingIndicator","_applyNavBarGaps","gap","bars","captionSize","isFullscreen","exit","enter","pinchControlsHidden","hideControls","showControls","point","preventObj","onGlobalTap","onMouseOver","eventK","updateFullscreen","classAttr","loopThroughChildElements","sChildren","topBar","_setupUIElements","getFullscreenAPI","isIdle","updateIndexIndicator","supportsFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","tF","requestFullscreen","enterK","exitK","elementK","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","ALLOW_KEYBOARD_INPUT","imagesLoaded","Shuffle","initShuffle","shuffleInstance","sizer","delimeter","filterGroup","btn","btnGroup","ALL_ITEMS","searchText","shuffle","layout","EvEmitter","_events","onceEvents","_onceEvents","emitEvent","onceListeners","allOff","arraySlice","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","child","9","11","LoadingImage","Background","reURL","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","isLoaded","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","proxyImage","unbindEvents","makeJQueryPlugin","setPrototypeOf","ReferenceError","emit","TinyEmitter","BASE","SHUFFLE_ITEM","VISIBLE","isHidden","addClasses","applyCss","Css","INITIAL","Scale","removeClasses","E","paddingTop","paddingBottom","borderBottomWidth","borderRightWidth","by","randomize","C","L","z","A","F","every","intersects","includes","Set","delimiter","lastSort","lastFilter","isEnabled","isInitialized","_transitions","_queue","_getElementOption","_init","_getItems","Classes","_initItems","_onResize","_getResizeFunction","_validateStyles","_setColumns","initialSort","setItemTransitions","_handleResize","throttle","throttleTime","_getFilteredSets","_toggleFilterClasses","_doesPassFilter","FILTER_ATTRIBUTE_KEY","filterMode","FilterMode","ANY","visibleItems","_getFilteredItems","useTransforms","transitionTimingFunction","transitionProperty","columnWidth","gutterWidth","_getGutterSize","_getColumnSize","columnThreshold","cols","containerWidth","colWidth","_getContainerSize","positions","staggerAmount","staggerAmountMax","_getNextPositions","equals","getStylesForTransition","_getStaggerAmount","isCentered","_getItemPosition","getTransformedPositions","itemSize","gridSize","total","threshold","buffer","_getConcealedItems","roundTransforms","_whenTransitionDone","_cancelMovement","_startTransitions","_styleImmediately","_dispatch","EventType","LAYOUT","_getTransitionFunction","_movementFinished","_skipTransitions","_filter","_shrink","_updateItemCount","_resetCols","_layout","_processQueue","_setContainerSize","_mergeNewItems","getItemByElement","_disposeItems","REMOVED","ShuffleItem","ALL","Point","Rect","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","__getCenteredPositions","initSlick","arrows","centerPadding","slidesToShow","centerMode","scrollOn768","slidesToScroll","responsive","breakpoint","slick","Slick","instanceUid","dataSettings","accessibility","adaptiveHeight","appendArrows","appendDots","asNavFor","prevArrow","nextArrow","autoplaySpeed","cssEase","customPaging","slider","dots","dotsClass","draggable","edgeFriction","fade","focusOnSelect","focusOnChange","infinite","initialSlide","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","rows","rtl","slidesPerRow","swipe","swipeToSlide","touchMove","touchThreshold","useCSS","useTransform","variableWidth","verticalSwiping","waitForAnimate","initials","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","scrolling","slideCount","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","reinit","animateHeight","targetHeight","animateSlide","targetLeft","animProps","animStart","applyTransition","disableTransition","getNavTarget","slideHandler","slideTo","buildArrows","buildDots","dot","getDotCount","buildOut","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","row","checkResponsive","forceUpdate","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","cleanUpSlideEvents","orientationChange","cleanUpRows","fadeSlide","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","numDotGroups","tabControlIndexes","slideControlIndex","ariaButtonControl","mappedSlideIndex","initArrowEvents","initDotEvents","initSlideEvents","initUI","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","slickPause","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","bodyStyle","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","allSlides","remainder","evenCoef","infiniteCount","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","swipeStart","swipeMove","positionOffset","verticalSwipeLength","pow","unfilterSlides","slickUnfilter","fromBreakpoint","Typed","initTyped","strings","typeSpeed","backSpeed","backDelay","_initializerJs","_htmlParserJs","elementId","_classCallCheck","initializer","begin","typingComplete","toggleBlinking","onStop","arrayPos","typewrite","curString","curStrPos","backspace","restart","replaceText","cursor","strPos","curLoop","insertCursor","onReset","onBegin","shuffleStringsIfNeeded","bindInputFocusEvents","bindFocusEvents","currentElContent","sequence","startDelay","fadeOutClass","humanize","humanizer","numChars","htmlParser","typeHtmlChars","pauseTime","temporaryPause","onTypingPaused","stringBeforeSkip","stringSkipped","stringAfterSkip","doneTyping","keepTyping","onTypingResumed","setPauseStatus","preStringTyped","nextString","onStringTyped","loopCount","initFadeOut","backSpaceHtmlChars","curStringAtPosition","smartBackspace","stopNum","onLastStringBackspaced","isTyping","isBlinking","cursorBlinking","fadeOutDelay","isInput","showCursor","cursorChar","_defaultsJs","_defaultsJs2","Initializer","elContent","stringsElement","stringsLength","stringEl","getCurrentElContent","autoInsertCss","appendAnimationCss","innerCss","Infinity","HTMLParser","curChar","endTag","googleAnalyticsId","ga","fonts","font","part","browser","filename","validEmail","form","email","onSuccess","onError","reason","initMap","setting","lat","lng","markerLat","markerLng","markerIcon","markers","removeControls","google","maps","Map","disableDefaultUI","locations","infowindow","InfoWindow","marker","Marker","DROP","icon","addListener","navbarToggle","navbarClose","offcanvas","popup","popupShow","once_key","getItem","once_btn","setItem","initRecaptcha","sitekey","grecaptcha","render","recaptchaLoadCallback","hasHeader","navbarHeight","headerHeight","scrollOffsetTop","prevOffsetTop","smoothlyScrollTo","targetTop","windowScrollActions","tooltip_pos","tooltip_offset","spy_offset","scrollspy","window_top","stick_start","toggleStickClass","requiredClass","navItemShow","navSidebarIsAccordion","link","PerfectScrollbar","wheelSpeed","minScrollbarLength","wrapper","castList","dataToOption","getTarget","getURL","optionToData","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","decimal","finalEndVal","countDown","frameVal","decimalMult","printValue","rAF","formatNumber","numerals","easeOutExpo","formattingFn","validateValue","resetDuration","determineDirectionAndSmartEasing","pauseResume","ensureNumber","initCountup","extraOptions","$direction","countup"],"mappings":"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","file":"page.min.0aa5f9e1.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","\n/*\n|--------------------------------------------------------------------------\n| Core\n|--------------------------------------------------------------------------\n|\n| The start point of the project. Include jQuery, Bootstrap and required\n| plugins and define page object. This file is required.\n|\n*/\nrequire('../../plugin/thesaas/js/loaders/core.js');\n\n/*\n|--------------------------------------------------------------------------\n| Vendors\n|--------------------------------------------------------------------------\n|\n| Load some plugins and define initializer methods. If you don't need any\n| of the following plugins, simply comment the line.\n|\n| The minified size of each module has stated for your reference. So you'd\n| know how much KB you can save by removing a vendor.\n|\n*/\nrequire('../../plugin/thesaas/js/vendors/aos.js');            // 14 kb\nrequire('../../plugin/thesaas/js/vendors/constellation.js');  // 03 kb\nrequire('../../plugin/thesaas/js/vendors/countdown.js');      // 05 kb\nrequire('../../plugin/thesaas/js/vendors/countup.js');        // 13 kb\nrequire('../../plugin/thesaas/js/vendors/granim.js');         // 15 kb\nrequire('../../plugin/thesaas/js/vendors/jarallax.js');       // 23 kb\nrequire('../../plugin/thesaas/js/vendors/lity.js');           // 07 kb\nrequire('../../plugin/thesaas/js/vendors/photoswipe.js');     // 45 kb\nrequire('../../plugin/thesaas/js/vendors/shuffle.js');        // 25 kb\nrequire('../../plugin/thesaas/js/vendors/slick.js');          // 43 kb\nrequire('../../plugin/thesaas/js/vendors/typed.js');          // 11 kb\n\n\n/*\n|--------------------------------------------------------------------------\n| Partials\n|--------------------------------------------------------------------------\n|\n| Split the application code to several files. This file is required.\n|\n*/\nrequire('../../plugin/thesaas/js/loaders/partials.js');\n\n\n/*\n|--------------------------------------------------------------------------\n| Configure\n|--------------------------------------------------------------------------\n|\n| Modify some variables to personalize your project. This file is required.\n|\n*/\nrequire('./config.js');\n\n\n/*\n|--------------------------------------------------------------------------\n| Custom script\n|--------------------------------------------------------------------------\n|\n| Write your custom JavaScrip code. Feel free to split your code to several\n| files and import the other files here or inside script.js.\n|\n*/\nrequire('./script.js');\n","\n/*\n|--------------------------------------------------------------------------\n| Main\n|--------------------------------------------------------------------------\n|\n| The start point of the project. Include jQuery, Bootstrap and required\n| plugins and define page object. These files are mandatory.\n|\n*/\nrequire('../partials/main.js');\n\nrequire('../vendors/jquery.js');\nrequire('../vendors/bootstrap.js');\n","/**\n * Load required plugins.\n */\nwindow.$ = window.jQuery = require('jquery');\nwindow.Popper = require('popper.js/dist/umd/popper');\nrequire('bootstrap');\nwindow.SmoothScroll = require('smoothscroll-for-websites');\nrequire('objectFitPolyfill');\n\n/**\n * Create window.page and init the application.\n */\n\n+(function($, window) {\n  var page = {\n    name: 'TheSaaS',\n    version: '2.2.3',\n    vendors: [],\n\n    // Cache popular elements\n    body: $('body'),\n    navbar: $('.navbar'),\n    header: $('.header'),\n    footer: $('.footer'),\n  };\n\n  page.defaults = {\n    googleApiKey: null,\n    googleAnalyticsKey: null,\n    reCaptchaSiteKey: null,\n    reCaptchaLanguage: null,\n    disableAOSonMobile: true,\n    smoothScroll: false,\n  };\n\n  /**\n   * Call all the required initializers.\n   */\n  page.init = function() {\n    // Vendors\n    //\n    page.initVendors();\n\n    // Partials\n    //\n    page.initBind();\n    page.initDrawer();\n    page.initFont();\n    page.initForm();\n    page.initMailer();\n    page.initModal();\n    page.initNavbar();\n    page.initOffcanvas();\n    page.initPopup();\n    page.initScroll();\n    page.initSection();\n    page.initSidebar();\n    page.initVideo();\n\n    // Anchor for headings\n    //\n    $('[data-provide=\"anchor\"]').each(function() {\n      var heading = $(this);\n      heading.append('<a class=\"anchor\" href=\"#' + heading.attr('id') + '\"></a>');\n    });\n  };\n\n  /**\n   * Initialize all of the loaded vendors.\n   */\n  page.initVendors = function() {\n    page.vendors.forEach(function(vendor) {\n      var fn = window.page['init' + vendor];\n      if (typeof fn === 'function') {\n        fn();\n      }\n    });\n  };\n\n  /**\n   * Register loaded vendor to be initialized after DOM load.\n   * It's case sensitive, since it calls \"initVendorName\" method.\n   */\n  page.registerVendor = function($name) {\n    page.vendors.push($name);\n  };\n\n  window.page = page;\n})(jQuery, window);\n\n/**\n * Once the DOM is loaded, start the magic.\n */\n$(function() {\n  //page.init();\n});\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Popper = factory());\n}(this, (function () { 'use strict';\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nreturn Popper;\n\n})));\n//# sourceMappingURL=popper.js.map\n","/*!\n  * Bootstrap v4.4.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, (function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      if (enumerableOnly) symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n      keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n\n      if (i % 2) {\n        ownKeys(Object(source), true).forEach(function (key) {\n          _defineProperty(target, key, source[key]);\n        });\n      } else if (Object.getOwnPropertyDescriptors) {\n        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n      } else {\n        ownKeys(Object(source)).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $ === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $.fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.4.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.4.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLES: '[data-toggle=\"buttons\"]',\n    DATA_TOGGLE: '[data-toggle=\"button\"]',\n    DATA_TOGGLES_BUTTONS: '[data-toggle=\"buttons\"] .btn',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1),\n    LOAD_DATA_API: \"load\" + EVENT_KEY$1 + DATA_API_KEY$1\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          } else if (input.type === 'checkbox') {\n            if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            }\n          } else {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            triggerChangeEvent = false;\n          }\n\n          if (triggerChangeEvent) {\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n        }\n\n        if (triggerChangeEvent) {\n          $(this._element).toggleClass(ClassName$1.ACTIVE);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(Selector$1.INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      Button._jQueryInterface.call($(button), 'toggle');\n    }\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $(window).on(Event$1.LOAD_DATA_API, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(Selector$1.INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        button.classList.remove(ClassName$1.ACTIVE);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        _button.classList.remove(ClassName$1.ACTIVE);\n      }\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.4.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default, {}, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread2({}, Default, {}, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread2({}, _config, {}, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.4.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$1, {}, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.4.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper.js if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE) {\n        return;\n      }\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {\n        return $(item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.4.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDE_PREVENTED: \"hidePrevented\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show',\n    STATIC: 'modal-static'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$3, {}, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      if (this._config.backdrop === 'static') {\n        var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED);\n        $(this._element).trigger(hideEventPrevented);\n\n        if (hideEventPrevented.defaultPrevented) {\n          return;\n        }\n\n        this._element.classList.add(ClassName$5.STATIC);\n\n        var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function () {\n          _this3._element.classList.remove(ClassName$5.STATIC);\n        }).emulateTransitionEnd(modalTransitionDuration);\n\n        this._element.focus();\n      } else {\n        this.hide();\n      }\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n      var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $(_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $(_this8._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          _this9._triggerBackdropTransition();\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.4.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: Selector$6.ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $(_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _objectSpread2({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.4.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread2({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.4.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.4.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.4.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $.Event(Event$a.SHOW);\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$a.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(ClassName$a.HIDE);\n\n        $(_this3._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","//\n// SmoothScroll for websites v1.4.10 (Balazs Galambosi)\n// http://www.smoothscroll.net/\n//\n// Licensed under the terms of the MIT license.\n//\n// You may use it in your theme if you credit me. \n// It is also free to use on any individual website.\n//\n// Exception:\n// The only restriction is to not publish any  \n// extension for browsers or native application\n// without getting a written permission first.\n//\n\n(function () {\n  \n// Scroll Variables (tweakable)\nvar defaultOptions = {\n\n    // Scrolling Core\n    frameRate        : 150, // [Hz]\n    animationTime    : 400, // [ms]\n    stepSize         : 100, // [px]\n\n    // Pulse (less tweakable)\n    // ratio of \"tail\" to \"acceleration\"\n    pulseAlgorithm   : true,\n    pulseScale       : 4,\n    pulseNormalize   : 1,\n\n    // Acceleration\n    accelerationDelta : 50,  // 50\n    accelerationMax   : 3,   // 3\n\n    // Keyboard Settings\n    keyboardSupport   : true,  // option\n    arrowScroll       : 50,    // [px]\n\n    // Other\n    fixedBackground   : true, \n    excluded          : ''    \n};\n\nvar options = defaultOptions;\n\n\n// Other Variables\nvar isExcluded = false;\nvar isFrame = false;\nvar direction = { x: 0, y: 0 };\nvar initDone  = false;\nvar root = document.documentElement;\nvar activeElement;\nvar observer;\nvar refreshSize;\nvar deltaBuffer = [];\nvar deltaBufferTimer;\nvar isMac = /^Mac/.test(navigator.platform);\n\nvar key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, \n            pageup: 33, pagedown: 34, end: 35, home: 36 };\nvar arrowKeys = { 37: 1, 38: 1, 39: 1, 40: 1 };\n\n/***********************************************\n * INITIALIZE\n ***********************************************/\n\n/**\n * Tests if smooth scrolling is allowed. Shuts down everything if not.\n */\nfunction initTest() {\n    if (options.keyboardSupport) {\n        addEvent('keydown', keydown);\n    }\n}\n\n/**\n * Sets up scrolls array, determines if frames are involved.\n */\nfunction init() {\n  \n    if (initDone || !document.body) return;\n\n    initDone = true;\n\n    var body = document.body;\n    var html = document.documentElement;\n    var windowHeight = window.innerHeight; \n    var scrollHeight = body.scrollHeight;\n    \n    // check compat mode for root element\n    root = (document.compatMode.indexOf('CSS') >= 0) ? html : body;\n    activeElement = body;\n    \n    initTest();\n\n    // Checks if this script is running in a frame\n    if (top != self) {\n        isFrame = true;\n    }\n\n    /**\n     * Safari 10 fixed it, Chrome fixed it in v45:\n     * This fixes a bug where the areas left and right to \n     * the content does not trigger the onmousewheel event\n     * on some pages. e.g.: html, body { height: 100% }\n     */\n    else if (isOldSafari &&\n             scrollHeight > windowHeight &&\n            (body.offsetHeight <= windowHeight || \n             html.offsetHeight <= windowHeight)) {\n\n        var fullPageElem = document.createElement('div');\n        fullPageElem.style.cssText = 'position:absolute; z-index:-10000; ' +\n                                     'top:0; left:0; right:0; height:' + \n                                      root.scrollHeight + 'px';\n        document.body.appendChild(fullPageElem);\n        \n        // DOM changed (throttled) to fix height\n        var pendingRefresh;\n        refreshSize = function () {\n            if (pendingRefresh) return; // could also be: clearTimeout(pendingRefresh);\n            pendingRefresh = setTimeout(function () {\n                if (isExcluded) return; // could be running after cleanup\n                fullPageElem.style.height = '0';\n                fullPageElem.style.height = root.scrollHeight + 'px';\n                pendingRefresh = null;\n            }, 500); // act rarely to stay fast\n        };\n  \n        setTimeout(refreshSize, 10);\n\n        addEvent('resize', refreshSize);\n\n        // TODO: attributeFilter?\n        var config = {\n            attributes: true, \n            childList: true, \n            characterData: false \n            // subtree: true\n        };\n\n        observer = new MutationObserver(refreshSize);\n        observer.observe(body, config);\n\n        if (root.offsetHeight <= windowHeight) {\n            var clearfix = document.createElement('div');   \n            clearfix.style.clear = 'both';\n            body.appendChild(clearfix);\n        }\n    }\n\n    // disable fixed background\n    if (!options.fixedBackground && !isExcluded) {\n        body.style.backgroundAttachment = 'scroll';\n        html.style.backgroundAttachment = 'scroll';\n    }\n}\n\n/**\n * Removes event listeners and other traces left on the page.\n */\nfunction cleanup() {\n    observer && observer.disconnect();\n    removeEvent(wheelEvent, wheel);\n    removeEvent('mousedown', mousedown);\n    removeEvent('keydown', keydown);\n    removeEvent('resize', refreshSize);\n    removeEvent('load', init);\n}\n\n\n/************************************************\n * SCROLLING \n ************************************************/\n \nvar que = [];\nvar pending = false;\nvar lastScroll = Date.now();\n\n/**\n * Pushes scroll actions to the scrolling queue.\n */\nfunction scrollArray(elem, left, top) {\n    \n    directionCheck(left, top);\n\n    if (options.accelerationMax != 1) {\n        var now = Date.now();\n        var elapsed = now - lastScroll;\n        if (elapsed < options.accelerationDelta) {\n            var factor = (1 + (50 / elapsed)) / 2;\n            if (factor > 1) {\n                factor = Math.min(factor, options.accelerationMax);\n                left *= factor;\n                top  *= factor;\n            }\n        }\n        lastScroll = Date.now();\n    }          \n    \n    // push a scroll command\n    que.push({\n        x: left, \n        y: top, \n        lastX: (left < 0) ? 0.99 : -0.99,\n        lastY: (top  < 0) ? 0.99 : -0.99, \n        start: Date.now()\n    });\n        \n    // don't act if there's a pending queue\n    if (pending) {\n        return;\n    }  \n\n    var scrollRoot = getScrollRoot();\n    var isWindowScroll = (elem === scrollRoot || elem === document.body);\n    \n    // if we haven't already fixed the behavior, \n    // and it needs fixing for this sesh\n    if (elem.$scrollBehavior == null && isScrollBehaviorSmooth(elem)) {\n        elem.$scrollBehavior = elem.style.scrollBehavior;\n        elem.style.scrollBehavior = 'auto';\n    }\n\n    var step = function (time) {\n        \n        var now = Date.now();\n        var scrollX = 0;\n        var scrollY = 0; \n    \n        for (var i = 0; i < que.length; i++) {\n            \n            var item = que[i];\n            var elapsed  = now - item.start;\n            var finished = (elapsed >= options.animationTime);\n            \n            // scroll position: [0, 1]\n            var position = (finished) ? 1 : elapsed / options.animationTime;\n            \n            // easing [optional]\n            if (options.pulseAlgorithm) {\n                position = pulse(position);\n            }\n            \n            // only need the difference\n            var x = (item.x * position - item.lastX) >> 0;\n            var y = (item.y * position - item.lastY) >> 0;\n            \n            // add this to the total scrolling\n            scrollX += x;\n            scrollY += y;            \n            \n            // update last values\n            item.lastX += x;\n            item.lastY += y;\n        \n            // delete and step back if it's over\n            if (finished) {\n                que.splice(i, 1); i--;\n            }           \n        }\n\n        // scroll left and top\n        if (isWindowScroll) {\n            window.scrollBy(scrollX, scrollY);\n        } \n        else {\n            if (scrollX) elem.scrollLeft += scrollX;\n            if (scrollY) elem.scrollTop  += scrollY;                    \n        }\n        \n        // clean up if there's nothing left to do\n        if (!left && !top) {\n            que = [];\n        }\n        \n        if (que.length) { \n            requestFrame(step, elem, (1000 / options.frameRate + 1)); \n        } else { \n            pending = false;\n            // restore default behavior at the end of scrolling sesh\n            if (elem.$scrollBehavior != null) {\n                elem.style.scrollBehavior = elem.$scrollBehavior;\n                elem.$scrollBehavior = null;\n            }\n        }\n    };\n    \n    // start a new queue of actions\n    requestFrame(step, elem, 0);\n    pending = true;\n}\n\n\n/***********************************************\n * EVENTS\n ***********************************************/\n\n/**\n * Mouse wheel handler.\n * @param {Object} event\n */\nfunction wheel(event) {\n\n    if (!initDone) {\n        init();\n    }\n    \n    var target = event.target;\n\n    // leave early if default action is prevented   \n    // or it's a zooming event with CTRL \n    if (event.defaultPrevented || event.ctrlKey) {\n        return true;\n    }\n    \n    // leave embedded content alone (flash & pdf)\n    if (isNodeName(activeElement, 'embed') || \n       (isNodeName(target, 'embed') && /\\.pdf/i.test(target.src)) ||\n        isNodeName(activeElement, 'object') ||\n        target.shadowRoot) {\n        return true;\n    }\n\n    var deltaX = -event.wheelDeltaX || event.deltaX || 0;\n    var deltaY = -event.wheelDeltaY || event.deltaY || 0;\n    \n    if (isMac) {\n        if (event.wheelDeltaX && isDivisible(event.wheelDeltaX, 120)) {\n            deltaX = -120 * (event.wheelDeltaX / Math.abs(event.wheelDeltaX));\n        }\n        if (event.wheelDeltaY && isDivisible(event.wheelDeltaY, 120)) {\n            deltaY = -120 * (event.wheelDeltaY / Math.abs(event.wheelDeltaY));\n        }\n    }\n    \n    // use wheelDelta if deltaX/Y is not available\n    if (!deltaX && !deltaY) {\n        deltaY = -event.wheelDelta || 0;\n    }\n\n    // line based scrolling (Firefox mostly)\n    if (event.deltaMode === 1) {\n        deltaX *= 40;\n        deltaY *= 40;\n    }\n\n    var overflowing = overflowingAncestor(target);\n\n    // nothing to do if there's no element that's scrollable\n    if (!overflowing) {\n        // except Chrome iframes seem to eat wheel events, which we need to \n        // propagate up, if the iframe has nothing overflowing to scroll\n        if (isFrame && isChrome)  {\n            // change target to iframe element itself for the parent frame\n            Object.defineProperty(event, \"target\", {value: window.frameElement});\n            return parent.wheel(event);\n        }\n        return true;\n    }\n    \n    // check if it's a touchpad scroll that should be ignored\n    if (isTouchpad(deltaY)) {\n        return true;\n    }\n\n    // scale by step size\n    // delta is 120 most of the time\n    // synaptics seems to send 1 sometimes\n    if (Math.abs(deltaX) > 1.2) {\n        deltaX *= options.stepSize / 120;\n    }\n    if (Math.abs(deltaY) > 1.2) {\n        deltaY *= options.stepSize / 120;\n    }\n    \n    scrollArray(overflowing, deltaX, deltaY);\n    event.preventDefault();\n    scheduleClearCache();\n}\n\n/**\n * Keydown event handler.\n * @param {Object} event\n */\nfunction keydown(event) {\n\n    var target   = event.target;\n    var modifier = event.ctrlKey || event.altKey || event.metaKey || \n                  (event.shiftKey && event.keyCode !== key.spacebar);\n    \n    // our own tracked active element could've been removed from the DOM\n    if (!document.body.contains(activeElement)) {\n        activeElement = document.activeElement;\n    }\n\n    // do nothing if user is editing text\n    // or using a modifier key (except shift)\n    // or in a dropdown\n    // or inside interactive elements\n    var inputNodeNames = /^(textarea|select|embed|object)$/i;\n    var buttonTypes = /^(button|submit|radio|checkbox|file|color|image)$/i;\n    if ( event.defaultPrevented ||\n         inputNodeNames.test(target.nodeName) ||\n         isNodeName(target, 'input') && !buttonTypes.test(target.type) ||\n         isNodeName(activeElement, 'video') ||\n         isInsideYoutubeVideo(event) ||\n         target.isContentEditable || \n         modifier ) {\n      return true;\n    }\n\n    // [spacebar] should trigger button press, leave it alone\n    if ((isNodeName(target, 'button') ||\n         isNodeName(target, 'input') && buttonTypes.test(target.type)) &&\n        event.keyCode === key.spacebar) {\n      return true;\n    }\n\n    // [arrwow keys] on radio buttons should be left alone\n    if (isNodeName(target, 'input') && target.type == 'radio' &&\n        arrowKeys[event.keyCode])  {\n      return true;\n    }\n    \n    var shift, x = 0, y = 0;\n    var overflowing = overflowingAncestor(activeElement);\n\n    if (!overflowing) {\n        // Chrome iframes seem to eat key events, which we need to \n        // propagate up, if the iframe has nothing overflowing to scroll\n        return (isFrame && isChrome) ? parent.keydown(event) : true;\n    }\n\n    var clientHeight = overflowing.clientHeight; \n\n    if (overflowing == document.body) {\n        clientHeight = window.innerHeight;\n    }\n\n    switch (event.keyCode) {\n        case key.up:\n            y = -options.arrowScroll;\n            break;\n        case key.down:\n            y = options.arrowScroll;\n            break;         \n        case key.spacebar: // (+ shift)\n            shift = event.shiftKey ? 1 : -1;\n            y = -shift * clientHeight * 0.9;\n            break;\n        case key.pageup:\n            y = -clientHeight * 0.9;\n            break;\n        case key.pagedown:\n            y = clientHeight * 0.9;\n            break;\n        case key.home:\n            if (overflowing == document.body && document.scrollingElement)\n                overflowing = document.scrollingElement;\n            y = -overflowing.scrollTop;\n            break;\n        case key.end:\n            var scroll = overflowing.scrollHeight - overflowing.scrollTop;\n            var scrollRemaining = scroll - clientHeight;\n            y = (scrollRemaining > 0) ? scrollRemaining + 10 : 0;\n            break;\n        case key.left:\n            x = -options.arrowScroll;\n            break;\n        case key.right:\n            x = options.arrowScroll;\n            break;            \n        default:\n            return true; // a key we don't care about\n    }\n\n    scrollArray(overflowing, x, y);\n    event.preventDefault();\n    scheduleClearCache();\n}\n\n/**\n * Mousedown event only for updating activeElement\n */\nfunction mousedown(event) {\n    activeElement = event.target;\n}\n\n\n/***********************************************\n * OVERFLOW\n ***********************************************/\n\nvar uniqueID = (function () {\n    var i = 0;\n    return function (el) {\n        return el.uniqueID || (el.uniqueID = i++);\n    };\n})();\n\nvar cacheX = {}; // cleared out after a scrolling session\nvar cacheY = {}; // cleared out after a scrolling session\nvar clearCacheTimer;\nvar smoothBehaviorForElement = {};\n\n//setInterval(function () { cache = {}; }, 10 * 1000);\n\nfunction scheduleClearCache() {\n    clearTimeout(clearCacheTimer);\n    clearCacheTimer = setInterval(function () { \n        cacheX = cacheY = smoothBehaviorForElement = {}; \n    }, 1*1000);\n}\n\nfunction setCache(elems, overflowing, x) {\n    var cache = x ? cacheX : cacheY;\n    for (var i = elems.length; i--;)\n        cache[uniqueID(elems[i])] = overflowing;\n    return overflowing;\n}\n\nfunction getCache(el, x) {\n    return (x ? cacheX : cacheY)[uniqueID(el)];\n}\n\n//  (body)                (root)\n//         | hidden | visible | scroll |  auto  |\n// hidden  |   no   |    no   |   YES  |   YES  |\n// visible |   no   |   YES   |   YES  |   YES  |\n// scroll  |   no   |   YES   |   YES  |   YES  |\n// auto    |   no   |   YES   |   YES  |   YES  |\n\nfunction overflowingAncestor(el) {\n    var elems = [];\n    var body = document.body;\n    var rootScrollHeight = root.scrollHeight;\n    do {\n        var cached = getCache(el, false);\n        if (cached) {\n            return setCache(elems, cached);\n        }\n        elems.push(el);\n        if (rootScrollHeight === el.scrollHeight) {\n            var topOverflowsNotHidden = overflowNotHidden(root) && overflowNotHidden(body);\n            var isOverflowCSS = topOverflowsNotHidden || overflowAutoOrScroll(root);\n            if (isFrame && isContentOverflowing(root) || \n               !isFrame && isOverflowCSS) {\n                return setCache(elems, getScrollRoot()); \n            }\n        } else if (isContentOverflowing(el) && overflowAutoOrScroll(el)) {\n            return setCache(elems, el);\n        }\n    } while ((el = el.parentElement));\n}\n\nfunction isContentOverflowing(el) {\n    return (el.clientHeight + 10 < el.scrollHeight);\n}\n\n// typically for <body> and <html>\nfunction overflowNotHidden(el) {\n    var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');\n    return (overflow !== 'hidden');\n}\n\n// for all other elements\nfunction overflowAutoOrScroll(el) {\n    var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');\n    return (overflow === 'scroll' || overflow === 'auto');\n}\n\n// for all other elements\nfunction isScrollBehaviorSmooth(el) {\n    var id = uniqueID(el);\n    if (smoothBehaviorForElement[id] == null) {\n        var scrollBehavior = getComputedStyle(el, '')['scroll-behavior'];\n        smoothBehaviorForElement[id] = ('smooth' == scrollBehavior);\n    }\n    return smoothBehaviorForElement[id];\n}\n\n\n/***********************************************\n * HELPERS\n ***********************************************/\n\nfunction addEvent(type, fn, arg) {\n    window.addEventListener(type, fn, arg || false);\n}\n\nfunction removeEvent(type, fn, arg) {\n    window.removeEventListener(type, fn, arg || false);  \n}\n\nfunction isNodeName(el, tag) {\n    return el && (el.nodeName||'').toLowerCase() === tag.toLowerCase();\n}\n\nfunction directionCheck(x, y) {\n    x = (x > 0) ? 1 : -1;\n    y = (y > 0) ? 1 : -1;\n    if (direction.x !== x || direction.y !== y) {\n        direction.x = x;\n        direction.y = y;\n        que = [];\n        lastScroll = 0;\n    }\n}\n\nif (window.localStorage && localStorage.SS_deltaBuffer) {\n    try { // #46 Safari throws in private browsing for localStorage \n        deltaBuffer = localStorage.SS_deltaBuffer.split(',');\n    } catch (e) { } \n}\n\nfunction isTouchpad(deltaY) {\n    if (!deltaY) return;\n    if (!deltaBuffer.length) {\n        deltaBuffer = [deltaY, deltaY, deltaY];\n    }\n    deltaY = Math.abs(deltaY);\n    deltaBuffer.push(deltaY);\n    deltaBuffer.shift();\n    clearTimeout(deltaBufferTimer);\n    deltaBufferTimer = setTimeout(function () {\n        try { // #46 Safari throws in private browsing for localStorage\n            localStorage.SS_deltaBuffer = deltaBuffer.join(',');\n        } catch (e) { }  \n    }, 1000);\n    var dpiScaledWheelDelta = deltaY > 120 && allDeltasDivisableBy(deltaY); // win64 \n    var tp = !allDeltasDivisableBy(120) && !allDeltasDivisableBy(100) && !dpiScaledWheelDelta;\n    if (deltaY < 50) return true;\n    return tp;\n} \n\nfunction isDivisible(n, divisor) {\n    return (Math.floor(n / divisor) == n / divisor);\n}\n\nfunction allDeltasDivisableBy(divisor) {\n    return (isDivisible(deltaBuffer[0], divisor) &&\n            isDivisible(deltaBuffer[1], divisor) &&\n            isDivisible(deltaBuffer[2], divisor));\n}\n\nfunction isInsideYoutubeVideo(event) {\n    var elem = event.target;\n    var isControl = false;\n    if (document.URL.indexOf ('www.youtube.com/watch') != -1) {\n        do {\n            isControl = (elem.classList && \n                         elem.classList.contains('html5-video-controls'));\n            if (isControl) break;\n        } while ((elem = elem.parentNode));\n    }\n    return isControl;\n}\n\nvar requestFrame = (function () {\n      return (window.requestAnimationFrame       || \n              window.webkitRequestAnimationFrame || \n              window.mozRequestAnimationFrame    ||\n              function (callback, element, delay) {\n                 window.setTimeout(callback, delay || (1000/60));\n             });\n})();\n\nvar MutationObserver = (window.MutationObserver || \n                        window.WebKitMutationObserver ||\n                        window.MozMutationObserver);  \n\nvar getScrollRoot = (function() {\n  var SCROLL_ROOT = document.scrollingElement;\n  return function() {\n    if (!SCROLL_ROOT) {\n      var dummy = document.createElement('div');\n      dummy.style.cssText = 'height:10000px;width:1px;';\n      document.body.appendChild(dummy);\n      var bodyScrollTop  = document.body.scrollTop;\n      var docElScrollTop = document.documentElement.scrollTop;\n      window.scrollBy(0, 3);\n      if (document.body.scrollTop != bodyScrollTop)\n        (SCROLL_ROOT = document.body);\n      else \n        (SCROLL_ROOT = document.documentElement);\n      window.scrollBy(0, -3);\n      document.body.removeChild(dummy);\n    }\n    return SCROLL_ROOT;\n  };\n})();\n\n\n/***********************************************\n * PULSE (by Michael Herf)\n ***********************************************/\n \n/**\n * Viscous fluid with a pulse for part and decay for the rest.\n * - Applies a fixed force over an interval (a damped acceleration), and\n * - Lets the exponential bleed away the velocity over a longer interval\n * - Michael Herf, http://stereopsis.com/stopping/\n */\nfunction pulse_(x) {\n    var val, start, expx;\n    // test\n    x = x * options.pulseScale;\n    if (x < 1) { // acceleartion\n        val = x - (1 - Math.exp(-x));\n    } else {     // tail\n        // the previous animation ended here:\n        start = Math.exp(-1);\n        // simple viscous drag\n        x -= 1;\n        expx = 1 - Math.exp(-x);\n        val = start + (expx * (1 - start));\n    }\n    return val * options.pulseNormalize;\n}\n\nfunction pulse(x) {\n    if (x >= 1) return 1;\n    if (x <= 0) return 0;\n\n    if (options.pulseNormalize == 1) {\n        options.pulseNormalize /= pulse_(1);\n    }\n    return pulse_(x);\n}\n\n\n/***********************************************\n * FIRST RUN\n ***********************************************/\n\nvar userAgent = window.navigator.userAgent;\nvar isEdge    = /Edge/.test(userAgent); // thank you MS\nvar isChrome  = /chrome/i.test(userAgent) && !isEdge; \nvar isSafari  = /safari/i.test(userAgent) && !isEdge; \nvar isMobile  = /mobile/i.test(userAgent);\nvar isIEWin7  = /Windows NT 6.1/i.test(userAgent) && /rv:11/i.test(userAgent);\nvar isOldSafari = isSafari && (/Version\\/8/i.test(userAgent) || /Version\\/9/i.test(userAgent));\nvar isEnabledForBrowser = (isChrome || isSafari || isIEWin7) && !isMobile;\n\nvar supportsPassive = false;\ntry {\n  window.addEventListener(\"test\", null, Object.defineProperty({}, 'passive', {\n    get: function () {\n            supportsPassive = true;\n        } \n    }));\n} catch(e) {}\n\nvar wheelOpt = supportsPassive ? { passive: false } : false;\nvar wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel'; \n\nif (wheelEvent && isEnabledForBrowser) {\n    addEvent(wheelEvent, wheel, wheelOpt);\n    addEvent('mousedown', mousedown);\n    addEvent('load', init);\n}\n\n\n/***********************************************\n * PUBLIC INTERFACE\n ***********************************************/\n\nfunction SmoothScroll(optionsToSet) {\n    for (var key in optionsToSet)\n        if (defaultOptions.hasOwnProperty(key)) \n            options[key] = optionsToSet[key];\n}\nSmoothScroll.destroy = cleanup;\n\nif (window.SmoothScrollOptions) // async API\n    SmoothScroll(window.SmoothScrollOptions);\n\nif (typeof define === 'function' && define.amd)\n    define(function() {\n        return SmoothScroll;\n    });\nelse if ('object' == typeof exports)\n    module.exports = SmoothScroll;\nelse\n    window.SmoothScroll = SmoothScroll;\n\n})();\n","!function(){\"use strict\";if(\"undefined\"!=typeof window){var t=window.navigator.userAgent.match(/Edge\\/(\\d{2})\\./),n=!!t&&16<=parseInt(t[1],10);if(!(\"objectFit\"in document.documentElement.style!=!1)||n){var o=function(t,e,i){var n,o,l,a,d;if((i=i.split(\" \")).length<2&&(i[1]=i[0]),\"x\"===t)n=i[0],o=i[1],l=\"left\",a=\"right\",d=e.clientWidth;else{if(\"y\"!==t)return;n=i[1],o=i[0],l=\"top\",a=\"bottom\",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return\"center\"===n||\"50%\"===n?(e.style[l]=\"50%\",void(e.style[\"margin-\"+l]=d/-2+\"px\")):void(0<=n.indexOf(\"%\")?(n=parseInt(n))<50?(e.style[l]=n+\"%\",e.style[\"margin-\"+l]=d*(n/-100)+\"px\"):(n=100-n,e.style[a]=n+\"%\",e.style[\"margin-\"+a]=d*(n/-100)+\"px\"):e.style[l]=n);e.style[a]=\"0\"}else e.style[l]=\"0\"},l=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute(\"data-object-fit\"),i=t.dataset?t.dataset.objectPosition:t.getAttribute(\"data-object-position\");e=e||\"cover\",i=i||\"50% 50%\";var n=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue(\"position\"),n=e.getPropertyValue(\"overflow\"),o=e.getPropertyValue(\"display\");i&&\"static\"!==i||(t.style.position=\"relative\"),\"hidden\"!==n&&(t.style.overflow=\"hidden\"),o&&\"inline\"!==o||(t.style.display=\"block\"),0===t.clientHeight&&(t.style.height=\"100%\"),-1===t.className.indexOf(\"object-fit-polyfill\")&&(t.className=t.className+\" object-fit-polyfill\")}(n),function(t){var e=window.getComputedStyle(t,null),i={\"max-width\":\"none\",\"max-height\":\"none\",\"min-width\":\"0px\",\"min-height\":\"0px\",top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\",\"margin-top\":\"0px\",\"margin-right\":\"0px\",\"margin-bottom\":\"0px\",\"margin-left\":\"0px\"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position=\"absolute\",t.style.width=\"auto\",t.style.height=\"auto\",\"scale-down\"===e&&(e=t.clientWidth<n.clientWidth&&t.clientHeight<n.clientHeight?\"none\":\"contain\"),\"none\"===e?(o(\"x\",t,i),void o(\"y\",t,i)):\"fill\"===e?(t.style.width=\"100%\",t.style.height=\"100%\",o(\"x\",t,i),void o(\"y\",t,i)):(t.style.height=\"100%\",void(\"cover\"===e&&t.clientWidth>n.clientWidth||\"contain\"===e&&t.clientWidth<n.clientWidth?(t.style.top=\"0\",t.style.marginTop=\"0\",o(\"x\",t,i)):(t.style.width=\"100%\",t.style.height=\"auto\",t.style.left=\"0\",t.style.marginLeft=\"0\",o(\"y\",t,i))))},e=function(t){if(void 0===t||t instanceof Event)t=document.querySelectorAll(\"[data-object-fit]\");else if(t&&t.nodeName)t=[t];else{if(\"object\"!=typeof t||!t.length||!t[0].nodeName)return!1;t=t}for(var e=0;e<t.length;e++)if(t[e].nodeName){var i=t[e].nodeName.toLowerCase();if(\"img\"===i){if(n)continue;t[e].complete?l(t[e]):t[e].addEventListener(\"load\",function(){l(this)})}else\"video\"===i?0<t[e].readyState?l(t[e]):t[e].addEventListener(\"loadedmetadata\",function(){l(this)}):l(t[e])}return!0};\"loading\"===document.readyState?document.addEventListener(\"DOMContentLoaded\",e):e(),window.addEventListener(\"resize\",e),window.objectFitPolyfill=e}else window.objectFitPolyfill=function(){return!1}}}();","\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Jquery');\n\n  page.initJquery = function() {\n\n    /**\n     * We will register the CSRF Token as a common header with jQuery so that\n     * all outgoing HTTP requests automatically have it attached. This is just\n     * a simple convenience so we don't have to attach every token manually.\n     */\n\n    var token = document.head.querySelector('meta[name=\"csrf-token\"]');\n\n    if (token) {\n      $.ajaxSetup({\n        headers: { 'X-CSRF-TOKEN': token.content }\n      });\n    }\n\n  }\n\n}(jQuery);\n\n\n\n\n// Check if an element has a specific data attribute\n//\njQuery.fn.hasDataAttr = function(name) {\n  return $(this)[0].hasAttribute('data-'+ name);\n};\n\n\n\n// Get data attribute. If element doesn't have the attribute, return default value\n//\njQuery.fn.dataAttr = function(name, def) {\n  if ($(this)[0] == undefined) {\n    return def;\n  }\n  return $(this)[0].getAttribute('data-'+ name) || def;\n};\n\n\n\n// Instance search\n//\n//$.expr[':'] -> $.expr.pseudos\njQuery.expr[':'].search = function(a, i, m) {\n  return $(a).html().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;\n};\n\n\n// Return outerHTML (inclusing the element) code\n//\njQuery.fn.outerHTML = function() {\n  var html = '';\n  this.each(function(){\n    html += $(this).prop(\"outerHTML\");\n  })\n  return html;\n};\n\n\n// Return HTML code of all the selected elements\n//\njQuery.fn.fullHTML = function() {\n  var html = '';\n  $(this).each(function(){\n    html += $(this).outerHTML();\n  });\n  return html;\n};\n\n// Scroll to end\n//\njQuery.fn.scrollToEnd = function() {\n  $(this).scrollTop( $(this).prop(\"scrollHeight\") );\n  return this;\n};\n\n","\n/**\n * Initialize some of the core Bootstrap components.\n */\n\n+function($){\n  page.registerVendor('Bootstrap');\n\n  page.initBootstrap = function() {\n    $('[data-toggle=\"tooltip\"]').tooltip();\n    $('[data-toggle=\"popover\"]').popover();\n\n\n    // Custom control check\n    //\n    // Since BS4-beta-3, custom-controls needs id and for attributes.\n    // We bypass this requirement.\n    //\n    $(document).on('click', '.custom-checkbox', function() {\n      var input = $(this).children('.custom-control-input').not(':disabled');\n      input.prop('checked', ! input.prop('checked')).trigger( \"change\" );\n    });\n\n    $(document).on('click', '.custom-radio', function() {\n      var input = $(this).children('.custom-control-input').not(':disabled');\n      input.prop('checked', true).trigger( \"change\" );\n    });\n\n\n  }\n\n}(jQuery);\n\n","\n/**\n * Load required plugin.\n */\nwindow.AOS = require('aos');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('AOS');\n\n  page.initAOS = function() {\n    var options = {\n      offset: 220,\n      duration: 1500,\n    }\n\n    if ( page.defaults.disableAOSonMobile ) {\n      options.disable = 'mobile';\n    }\n\n    AOS.init(options);\n  }\n\n}(jQuery);\n\n\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),s=o(c),f=n(8),d=o(f),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x={offset:120,delay:0,easing:\"ease\",duration:400,disable:!1,once:!1,startEvent:\"DOMContentLoaded\",throttleDelay:99,debounceDelay:50,disableMutationObserver:!1},j=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n      aos: MutationObserver is not supported on this browser,\\n      code mutations observing has been disabled.\\n      You may have to call \"refreshHard()\" by yourself.\\n    '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"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},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"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},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;t<e.length;t+=1){if(o=e[t],o.dataset&&o.dataset.aos)return!0;if(i=o.children&&n(o.children))return!0}return!1}function o(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function i(){return!!o()}function r(e,t){var n=window.document,i=o(),r=new i(a);u=t,r.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}function a(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),o=Array.prototype.slice.call(e.removedNodes),i=t.concat(o);if(n(i))return u()})}Object.defineProperty(t,\"__esModule\",{value:!0});var u=function(){};t.default={isSupported:i,ready:r}},function(e,t){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(){return navigator.userAgent||navigator.vendor||window.opera||\"\"}Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,u=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,s=function(){function e(){n(this,e)}return i(e,[{key:\"phone\",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:\"mobile\",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:\"tablet\",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new s},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute(\"data-aos-once\");t>e.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});","\n/**\n *\n */\n\n+function($){\n  page.registerVendor('Constellation');\n\n  page.initConstellation = function() {\n    var distance = 120;\n\n    if( $( window ).width() < 700) {\n      distance = 25;\n    }\n\n    $('.constellation').each(function(){\n      var canvas = $(this),\n          color  = canvas.dataAttr( 'color', 'rgba(255, 255, 255, .8)' ),\n          length = canvas.dataAttr( 'length', 150 ),\n          radius = canvas.dataAttr( 'radius', 150 ),\n          starW  = canvas.dataAttr( 'starWidth', 1 ),\n          lineW  = canvas.dataAttr( 'lineWidth', 0.2 );\n\n      if ( color == 'dark' ) {\n        color = 'rgba(0, 0, 0, .6)';\n      }\n\n      canvas.constellation({\n        distance: distance,\n        length: length,\n        radius: radius,\n        star: {\n          color: color,\n          width: starW\n        },\n        line: {\n          color: color,\n          width: lineW\n        }\n      });\n    });\n\n  }\n\n}(jQuery);\n\n\n// https://codepen.io/acauamontiel/pen/mJdnw\n\n/*!\n * Mantis.js / jQuery / Zepto.js plugin for Constellation\n * @version 1.2.2\n * @author Acauã Montiel <contato@acauamontiel.com.br>\n * @license http://acaua.mit-license.org/\n */\n(function ($, window) {\n  /**\n   * Makes a nice constellation on canvas\n   * @constructor Constellation\n   */\n  function Constellation (canvas, options) {\n    var $canvas = $(canvas),\n      context = canvas.getContext('2d'),\n      defaults = {\n        star: {\n          color: 'rgba(255, 255, 255, .5)',\n          width: 1\n        },\n        line: {\n          color: 'rgba(255, 255, 255, .5)',\n          width: 0.2\n        },\n        position: {\n          x: 0, // This value will be overwritten at startup\n          y: 0 // This value will be overwritten at startup\n        },\n        width: window.innerWidth,\n        height: window.innerHeight,\n        velocity: 0.1,\n        length: 100,\n        distance: 120,\n        radius: 150,\n        stars: []\n      },\n      config = $.extend(true, {}, defaults, options);\n\n    function Star () {\n      this.x = Math.random() * canvas.width;\n      this.y = Math.random() * canvas.height;\n\n      this.vx = (config.velocity - (Math.random() * 0.5));\n      this.vy = (config.velocity - (Math.random() * 0.5));\n\n      this.radius = Math.random() * config.star.width;\n    }\n\n    Star.prototype = {\n      create: function(){\n        context.beginPath();\n        context.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);\n        context.fill();\n      },\n\n      animate: function(){\n        var i;\n        for (i = 0; i < config.length; i++) {\n\n          var star = config.stars[i];\n\n          if (star.y < 0 || star.y > canvas.height) {\n            star.vx = star.vx;\n            star.vy = - star.vy;\n          } else if (star.x < 0 || star.x > canvas.width) {\n            star.vx = - star.vx;\n            star.vy = star.vy;\n          }\n\n          star.x += star.vx;\n          star.y += star.vy;\n        }\n      },\n\n      line: function(){\n        var length = config.length,\n          iStar,\n          jStar,\n          i,\n          j;\n\n        for (i = 0; i < length; i++) {\n          for (j = 0; j < length; j++) {\n            iStar = config.stars[i];\n            jStar = config.stars[j];\n\n            if (\n              (iStar.x - jStar.x) < config.distance &&\n              (iStar.y - jStar.y) < config.distance &&\n              (iStar.x - jStar.x) > - config.distance &&\n              (iStar.y - jStar.y) > - config.distance\n            ) {\n              if (\n                (iStar.x - config.position.x) < config.radius &&\n                (iStar.y - config.position.y) < config.radius &&\n                (iStar.x - config.position.x) > - config.radius &&\n                (iStar.y - config.position.y) > - config.radius\n              ) {\n                context.beginPath();\n                context.moveTo(iStar.x, iStar.y);\n                context.lineTo(jStar.x, jStar.y);\n                context.stroke();\n                context.closePath();\n              }\n            }\n          }\n        }\n      }\n    };\n\n    this.createStars = function () {\n      var length = config.length,\n        star,\n        i;\n\n      context.clearRect(0, 0, canvas.width, canvas.height);\n\n      for (i = 0; i < length; i++) {\n        config.stars.push(new Star());\n        star = config.stars[i];\n\n        star.create();\n      }\n\n      star.line();\n      star.animate();\n    };\n\n    this.setCanvas = function () {\n      canvas.width = config.width;\n      canvas.height = config.height;\n    };\n\n    this.setContext = function () {\n      context.fillStyle = config.star.color;\n      context.strokeStyle = config.line.color;\n      context.lineWidth = config.line.width;\n    };\n\n    this.setInitialPosition = function () {\n      if (!options || !options.hasOwnProperty('position')) {\n        config.position = {\n          x: canvas.width * 0.5,\n          y: canvas.height * 0.5\n        };\n      }\n    };\n\n    this.loop = function (callback) {\n      callback();\n\n      window.requestAnimationFrame(function () {\n        //stats.begin(); // Only for Stats\n        this.loop(callback);\n        //stats.end(); // Only for Stats\n      }.bind(this));\n    };\n\n    this.bind = function () {\n      $canvas.on('mousemove', function(e){\n        config.position.x = e.pageX - $canvas.offset().left;\n        config.position.y = e.pageY - $canvas.offset().top;\n      });\n    };\n\n    this.init = function () {\n      this.setCanvas();\n      this.setContext();\n      this.setInitialPosition();\n      this.loop(this.createStars);\n      this.bind();\n    };\n  }\n\n  $.fn.constellation = function (options) {\n    return this.each(function () {\n      var c = new Constellation(this, options);\n      c.init();\n    });\n  };\n})($, window);\n","\n/**\n * Load required plugin.\n */\nrequire('jquery-countdown');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Countdown');\n\n  page.initCountdown = function() {\n\n    $('[data-countdown]').each(function() {\n      var tag     = $(this),\n          format  = '',\n          options = {\n            textDay:    'Day',\n            textHour:   'Hour',\n            textMinute: 'Minute',\n            textSecond: 'Second',\n          };\n\n      options = $.extend( options, page.getDataOptions(tag));\n\n\n      format += '<div class=\"row gap-x-4\">';\n      format += '<div class=\"col\"><h5>%D</h5><small>'+ options.textDay +'%!D</small></div>';\n      format += '<div class=\"col\"><h5>%H</h5><small>'+ options.textHour +'%!H</small></div>';\n      format += '<div class=\"col\"><h5>%M</h5><small>'+ options.textMinute +'%!M</small></div>';\n      format += '<div class=\"col\"><h5>%S</h5><small>'+ options.textSecond +'%!S</small></div>';\n      format += '</div>';\n\n      if ( tag.hasDataAttr('format') ) {\n        format = tag.data('format');\n      }\n\n      tag.countdown( tag.data('countdown'), function(event) {\n        $(this).html(event.strftime( format ));\n      } )\n\n    });\n\n  }\n\n}(jQuery);\n\n\n\n","/*!\n * The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/)\n * Copyright (c) 2016 Edson Hilios\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n(function(factory) {\n    \"use strict\";\n    if (typeof define === \"function\" && define.amd) {\n        define([ \"jquery\" ], factory);\n    } else {\n        factory(jQuery);\n    }\n})(function($) {\n    \"use strict\";\n    var instances = [], matchers = [], defaultOptions = {\n        precision: 100,\n        elapse: false,\n        defer: false\n    };\n    matchers.push(/^[0-9]*$/.source);\n    matchers.push(/([0-9]{1,2}\\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source);\n    matchers.push(/[0-9]{4}([\\/\\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source);\n    matchers = new RegExp(matchers.join(\"|\"));\n    function parseDateString(dateString) {\n        if (dateString instanceof Date) {\n            return dateString;\n        }\n        if (String(dateString).match(matchers)) {\n            if (String(dateString).match(/^[0-9]*$/)) {\n                dateString = Number(dateString);\n            }\n            if (String(dateString).match(/\\-/)) {\n                dateString = String(dateString).replace(/\\-/g, \"/\");\n            }\n            return new Date(dateString);\n        } else {\n            throw new Error(\"Couldn't cast `\" + dateString + \"` to a date object.\");\n        }\n    }\n    var DIRECTIVE_KEY_MAP = {\n        Y: \"years\",\n        m: \"months\",\n        n: \"daysToMonth\",\n        d: \"daysToWeek\",\n        w: \"weeks\",\n        W: \"weeksToMonth\",\n        H: \"hours\",\n        M: \"minutes\",\n        S: \"seconds\",\n        D: \"totalDays\",\n        I: \"totalHours\",\n        N: \"totalMinutes\",\n        T: \"totalSeconds\"\n    };\n    function escapedRegExp(str) {\n        var sanitize = str.toString().replace(/([.?*+^$[\\]\\\\(){}|-])/g, \"\\\\$1\");\n        return new RegExp(sanitize);\n    }\n    function strftime(offsetObject) {\n        return function(format) {\n            var directives = format.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);\n            if (directives) {\n                for (var i = 0, len = directives.length; i < len; ++i) {\n                    var directive = directives[i].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/), regexp = escapedRegExp(directive[0]), modifier = directive[1] || \"\", plural = directive[3] || \"\", value = null;\n                    directive = directive[2];\n                    if (DIRECTIVE_KEY_MAP.hasOwnProperty(directive)) {\n                        value = DIRECTIVE_KEY_MAP[directive];\n                        value = Number(offsetObject[value]);\n                    }\n                    if (value !== null) {\n                        if (modifier === \"!\") {\n                            value = pluralize(plural, value);\n                        }\n                        if (modifier === \"\") {\n                            if (value < 10) {\n                                value = \"0\" + value.toString();\n                            }\n                        }\n                        format = format.replace(regexp, value.toString());\n                    }\n                }\n            }\n            format = format.replace(/%%/, \"%\");\n            return format;\n        };\n    }\n    function pluralize(format, count) {\n        var plural = \"s\", singular = \"\";\n        if (format) {\n            format = format.replace(/(:|;|\\s)/gi, \"\").split(/\\,/);\n            if (format.length === 1) {\n                plural = format[0];\n            } else {\n                singular = format[0];\n                plural = format[1];\n            }\n        }\n        if (Math.abs(count) > 1) {\n            return plural;\n        } else {\n            return singular;\n        }\n    }\n    var Countdown = function(el, finalDate, options) {\n        this.el = el;\n        this.$el = $(el);\n        this.interval = null;\n        this.offset = {};\n        this.options = $.extend({}, defaultOptions);\n        this.instanceNumber = instances.length;\n        instances.push(this);\n        this.$el.data(\"countdown-instance\", this.instanceNumber);\n        if (options) {\n            if (typeof options === \"function\") {\n                this.$el.on(\"update.countdown\", options);\n                this.$el.on(\"stoped.countdown\", options);\n                this.$el.on(\"finish.countdown\", options);\n            } else {\n                this.options = $.extend({}, defaultOptions, options);\n            }\n        }\n        this.setFinalDate(finalDate);\n        if (this.options.defer === false) {\n            this.start();\n        }\n    };\n    $.extend(Countdown.prototype, {\n        start: function() {\n            if (this.interval !== null) {\n                clearInterval(this.interval);\n            }\n            var self = this;\n            this.update();\n            this.interval = setInterval(function() {\n                self.update.call(self);\n            }, this.options.precision);\n        },\n        stop: function() {\n            clearInterval(this.interval);\n            this.interval = null;\n            this.dispatchEvent(\"stoped\");\n        },\n        toggle: function() {\n            if (this.interval) {\n                this.stop();\n            } else {\n                this.start();\n            }\n        },\n        pause: function() {\n            this.stop();\n        },\n        resume: function() {\n            this.start();\n        },\n        remove: function() {\n            this.stop.call(this);\n            instances[this.instanceNumber] = null;\n            delete this.$el.data().countdownInstance;\n        },\n        setFinalDate: function(value) {\n            this.finalDate = parseDateString(value);\n        },\n        update: function() {\n            if (this.$el.closest(\"html\").length === 0) {\n                this.remove();\n                return;\n            }\n            var hasEventsAttached = $._data(this.el, \"events\") !== undefined, now = new Date(), newTotalSecsLeft;\n            newTotalSecsLeft = this.finalDate.getTime() - now.getTime();\n            newTotalSecsLeft = Math.ceil(newTotalSecsLeft / 1e3);\n            newTotalSecsLeft = !this.options.elapse && newTotalSecsLeft < 0 ? 0 : Math.abs(newTotalSecsLeft);\n            if (this.totalSecsLeft === newTotalSecsLeft || !hasEventsAttached) {\n                return;\n            } else {\n                this.totalSecsLeft = newTotalSecsLeft;\n            }\n            this.elapsed = now >= this.finalDate;\n            this.offset = {\n                seconds: this.totalSecsLeft % 60,\n                minutes: Math.floor(this.totalSecsLeft / 60) % 60,\n                hours: Math.floor(this.totalSecsLeft / 60 / 60) % 24,\n                days: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,\n                daysToWeek: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,\n                daysToMonth: Math.floor(this.totalSecsLeft / 60 / 60 / 24 % 30.4368),\n                weeks: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7),\n                weeksToMonth: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7) % 4,\n                months: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 30.4368),\n                years: Math.abs(this.finalDate.getFullYear() - now.getFullYear()),\n                totalDays: Math.floor(this.totalSecsLeft / 60 / 60 / 24),\n                totalHours: Math.floor(this.totalSecsLeft / 60 / 60),\n                totalMinutes: Math.floor(this.totalSecsLeft / 60),\n                totalSeconds: this.totalSecsLeft\n            };\n            if (!this.options.elapse && this.totalSecsLeft === 0) {\n                this.stop();\n                this.dispatchEvent(\"finish\");\n            } else {\n                this.dispatchEvent(\"update\");\n            }\n        },\n        dispatchEvent: function(eventName) {\n            var event = $.Event(eventName + \".countdown\");\n            event.finalDate = this.finalDate;\n            event.elapsed = this.elapsed;\n            event.offset = $.extend({}, this.offset);\n            event.strftime = strftime(this.offset);\n            this.$el.trigger(event);\n        }\n    });\n    $.fn.countdown = function() {\n        var argumentsArray = Array.prototype.slice.call(arguments, 0);\n        return this.each(function() {\n            var instanceNumber = $(this).data(\"countdown-instance\");\n            if (instanceNumber !== undefined) {\n                var instance = instances[instanceNumber], method = argumentsArray[0];\n                if (Countdown.prototype.hasOwnProperty(method)) {\n                    instance[method].apply(instance, argumentsArray.slice(1));\n                } else if (String(method).match(/^[$A-Z_][0-9A-Z_$]*$/i) === null) {\n                    instance.setFinalDate.call(instance, method);\n                    instance.start();\n                } else {\n                    $.error(\"Method %s does not exist on jQuery.countdown\".replace(/\\%s/gi, method));\n                }\n            } else {\n                new Countdown(this, argumentsArray[0], argumentsArray[1]);\n            }\n        });\n    };\n});","/*!\nWaypoints - 4.0.1\nCopyright © 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  var keyCounter = 0\n  var allWaypoints = {}\n\n  /* http://imakewebthings.com/waypoints/api/waypoint */\n  function Waypoint(options) {\n    if (!options) {\n      throw new Error('No options passed to Waypoint constructor')\n    }\n    if (!options.element) {\n      throw new Error('No element option passed to Waypoint constructor')\n    }\n    if (!options.handler) {\n      throw new Error('No handler option passed to Waypoint constructor')\n    }\n\n    this.key = 'waypoint-' + keyCounter\n    this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n    this.element = this.options.element\n    this.adapter = new Waypoint.Adapter(this.element)\n    this.callback = options.handler\n    this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n    this.enabled = this.options.enabled\n    this.triggerPoint = null\n    this.group = Waypoint.Group.findOrCreate({\n      name: this.options.group,\n      axis: this.axis\n    })\n    this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n    if (Waypoint.offsetAliases[this.options.offset]) {\n      this.options.offset = Waypoint.offsetAliases[this.options.offset]\n    }\n    this.group.add(this)\n    this.context.add(this)\n    allWaypoints[this.key] = this\n    keyCounter += 1\n  }\n\n  /* Private */\n  Waypoint.prototype.queueTrigger = function(direction) {\n    this.group.queueTrigger(this, direction)\n  }\n\n  /* Private */\n  Waypoint.prototype.trigger = function(args) {\n    if (!this.enabled) {\n      return\n    }\n    if (this.callback) {\n      this.callback.apply(this, args)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy */\n  Waypoint.prototype.destroy = function() {\n    this.context.remove(this)\n    this.group.remove(this)\n    delete allWaypoints[this.key]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable */\n  Waypoint.prototype.disable = function() {\n    this.enabled = false\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable */\n  Waypoint.prototype.enable = function() {\n    this.context.refresh()\n    this.enabled = true\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/next */\n  Waypoint.prototype.next = function() {\n    return this.group.next(this)\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/previous */\n  Waypoint.prototype.previous = function() {\n    return this.group.previous(this)\n  }\n\n  /* Private */\n  Waypoint.invokeAll = function(method) {\n    var allWaypointsArray = []\n    for (var waypointKey in allWaypoints) {\n      allWaypointsArray.push(allWaypoints[waypointKey])\n    }\n    for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n      allWaypointsArray[i][method]()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy-all */\n  Waypoint.destroyAll = function() {\n    Waypoint.invokeAll('destroy')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable-all */\n  Waypoint.disableAll = function() {\n    Waypoint.invokeAll('disable')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable-all */\n  Waypoint.enableAll = function() {\n    Waypoint.Context.refreshAll()\n    for (var waypointKey in allWaypoints) {\n      allWaypoints[waypointKey].enabled = true\n    }\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/refresh-all */\n  Waypoint.refreshAll = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-height */\n  Waypoint.viewportHeight = function() {\n    return window.innerHeight || document.documentElement.clientHeight\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-width */\n  Waypoint.viewportWidth = function() {\n    return document.documentElement.clientWidth\n  }\n\n  Waypoint.adapters = []\n\n  Waypoint.defaults = {\n    context: window,\n    continuous: true,\n    enabled: true,\n    group: 'default',\n    horizontal: false,\n    offset: 0\n  }\n\n  Waypoint.offsetAliases = {\n    'bottom-in-view': function() {\n      return this.context.innerHeight() - this.adapter.outerHeight()\n    },\n    'right-in-view': function() {\n      return this.context.innerWidth() - this.adapter.outerWidth()\n    }\n  }\n\n  window.Waypoint = Waypoint\n}())\n;(function() {\n  'use strict'\n\n  function requestAnimationFrameShim(callback) {\n    window.setTimeout(callback, 1000 / 60)\n  }\n\n  var keyCounter = 0\n  var contexts = {}\n  var Waypoint = window.Waypoint\n  var oldWindowLoad = window.onload\n\n  /* http://imakewebthings.com/waypoints/api/context */\n  function Context(element) {\n    this.element = element\n    this.Adapter = Waypoint.Adapter\n    this.adapter = new this.Adapter(element)\n    this.key = 'waypoint-context-' + keyCounter\n    this.didScroll = false\n    this.didResize = false\n    this.oldScroll = {\n      x: this.adapter.scrollLeft(),\n      y: this.adapter.scrollTop()\n    }\n    this.waypoints = {\n      vertical: {},\n      horizontal: {}\n    }\n\n    element.waypointContextKey = this.key\n    contexts[element.waypointContextKey] = this\n    keyCounter += 1\n    if (!Waypoint.windowContext) {\n      Waypoint.windowContext = true\n      Waypoint.windowContext = new Context(window)\n    }\n\n    this.createThrottledScrollHandler()\n    this.createThrottledResizeHandler()\n  }\n\n  /* Private */\n  Context.prototype.add = function(waypoint) {\n    var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n    this.waypoints[axis][waypoint.key] = waypoint\n    this.refresh()\n  }\n\n  /* Private */\n  Context.prototype.checkEmpty = function() {\n    var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n    var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n    var isWindow = this.element == this.element.window\n    if (horizontalEmpty && verticalEmpty && !isWindow) {\n      this.adapter.off('.waypoints')\n      delete contexts[this.key]\n    }\n  }\n\n  /* Private */\n  Context.prototype.createThrottledResizeHandler = function() {\n    var self = this\n\n    function resizeHandler() {\n      self.handleResize()\n      self.didResize = false\n    }\n\n    this.adapter.on('resize.waypoints', function() {\n      if (!self.didResize) {\n        self.didResize = true\n        Waypoint.requestAnimationFrame(resizeHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.createThrottledScrollHandler = function() {\n    var self = this\n    function scrollHandler() {\n      self.handleScroll()\n      self.didScroll = false\n    }\n\n    this.adapter.on('scroll.waypoints', function() {\n      if (!self.didScroll || Waypoint.isTouch) {\n        self.didScroll = true\n        Waypoint.requestAnimationFrame(scrollHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.handleResize = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Private */\n  Context.prototype.handleScroll = function() {\n    var triggeredGroups = {}\n    var axes = {\n      horizontal: {\n        newScroll: this.adapter.scrollLeft(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left'\n      },\n      vertical: {\n        newScroll: this.adapter.scrollTop(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      var isForward = axis.newScroll > axis.oldScroll\n      var direction = isForward ? axis.forward : axis.backward\n\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        if (waypoint.triggerPoint === null) {\n          continue\n        }\n        var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n        var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n        var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n        var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n        if (crossedForward || crossedBackward) {\n          waypoint.queueTrigger(direction)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    for (var groupKey in triggeredGroups) {\n      triggeredGroups[groupKey].flushTriggers()\n    }\n\n    this.oldScroll = {\n      x: axes.horizontal.newScroll,\n      y: axes.vertical.newScroll\n    }\n  }\n\n  /* Private */\n  Context.prototype.innerHeight = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportHeight()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerHeight()\n  }\n\n  /* Private */\n  Context.prototype.remove = function(waypoint) {\n    delete this.waypoints[waypoint.axis][waypoint.key]\n    this.checkEmpty()\n  }\n\n  /* Private */\n  Context.prototype.innerWidth = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportWidth()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerWidth()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-destroy */\n  Context.prototype.destroy = function() {\n    var allWaypoints = []\n    for (var axis in this.waypoints) {\n      for (var waypointKey in this.waypoints[axis]) {\n        allWaypoints.push(this.waypoints[axis][waypointKey])\n      }\n    }\n    for (var i = 0, end = allWaypoints.length; i < end; i++) {\n      allWaypoints[i].destroy()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-refresh */\n  Context.prototype.refresh = function() {\n    /*eslint-disable eqeqeq */\n    var isWindow = this.element == this.element.window\n    /*eslint-enable eqeqeq */\n    var contextOffset = isWindow ? undefined : this.adapter.offset()\n    var triggeredGroups = {}\n    var axes\n\n    this.handleScroll()\n    axes = {\n      horizontal: {\n        contextOffset: isWindow ? 0 : contextOffset.left,\n        contextScroll: isWindow ? 0 : this.oldScroll.x,\n        contextDimension: this.innerWidth(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left',\n        offsetProp: 'left'\n      },\n      vertical: {\n        contextOffset: isWindow ? 0 : contextOffset.top,\n        contextScroll: isWindow ? 0 : this.oldScroll.y,\n        contextDimension: this.innerHeight(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up',\n        offsetProp: 'top'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        var adjustment = waypoint.options.offset\n        var oldTriggerPoint = waypoint.triggerPoint\n        var elementOffset = 0\n        var freshWaypoint = oldTriggerPoint == null\n        var contextModifier, wasBeforeScroll, nowAfterScroll\n        var triggeredBackward, triggeredForward\n\n        if (waypoint.element !== waypoint.element.window) {\n          elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n        }\n\n        if (typeof adjustment === 'function') {\n          adjustment = adjustment.apply(waypoint)\n        }\n        else if (typeof adjustment === 'string') {\n          adjustment = parseFloat(adjustment)\n          if (waypoint.options.offset.indexOf('%') > - 1) {\n            adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n          }\n        }\n\n        contextModifier = axis.contextScroll - axis.contextOffset\n        waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n        wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n        nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n        triggeredBackward = wasBeforeScroll && nowAfterScroll\n        triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n        if (!freshWaypoint && triggeredBackward) {\n          waypoint.queueTrigger(axis.backward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (!freshWaypoint && triggeredForward) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    Waypoint.requestAnimationFrame(function() {\n      for (var groupKey in triggeredGroups) {\n        triggeredGroups[groupKey].flushTriggers()\n      }\n    })\n\n    return this\n  }\n\n  /* Private */\n  Context.findOrCreateByElement = function(element) {\n    return Context.findByElement(element) || new Context(element)\n  }\n\n  /* Private */\n  Context.refreshAll = function() {\n    for (var contextId in contexts) {\n      contexts[contextId].refresh()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n  Context.findByElement = function(element) {\n    return contexts[element.waypointContextKey]\n  }\n\n  window.onload = function() {\n    if (oldWindowLoad) {\n      oldWindowLoad()\n    }\n    Context.refreshAll()\n  }\n\n\n  Waypoint.requestAnimationFrame = function(callback) {\n    var requestFn = window.requestAnimationFrame ||\n      window.mozRequestAnimationFrame ||\n      window.webkitRequestAnimationFrame ||\n      requestAnimationFrameShim\n    requestFn.call(window, callback)\n  }\n  Waypoint.Context = Context\n}())\n;(function() {\n  'use strict'\n\n  function byTriggerPoint(a, b) {\n    return a.triggerPoint - b.triggerPoint\n  }\n\n  function byReverseTriggerPoint(a, b) {\n    return b.triggerPoint - a.triggerPoint\n  }\n\n  var groups = {\n    vertical: {},\n    horizontal: {}\n  }\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/api/group */\n  function Group(options) {\n    this.name = options.name\n    this.axis = options.axis\n    this.id = this.name + '-' + this.axis\n    this.waypoints = []\n    this.clearTriggerQueues()\n    groups[this.axis][this.name] = this\n  }\n\n  /* Private */\n  Group.prototype.add = function(waypoint) {\n    this.waypoints.push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.clearTriggerQueues = function() {\n    this.triggerQueues = {\n      up: [],\n      down: [],\n      left: [],\n      right: []\n    }\n  }\n\n  /* Private */\n  Group.prototype.flushTriggers = function() {\n    for (var direction in this.triggerQueues) {\n      var waypoints = this.triggerQueues[direction]\n      var reverse = direction === 'up' || direction === 'left'\n      waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n      for (var i = 0, end = waypoints.length; i < end; i += 1) {\n        var waypoint = waypoints[i]\n        if (waypoint.options.continuous || i === waypoints.length - 1) {\n          waypoint.trigger([direction])\n        }\n      }\n    }\n    this.clearTriggerQueues()\n  }\n\n  /* Private */\n  Group.prototype.next = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    var isLast = index === this.waypoints.length - 1\n    return isLast ? null : this.waypoints[index + 1]\n  }\n\n  /* Private */\n  Group.prototype.previous = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    return index ? this.waypoints[index - 1] : null\n  }\n\n  /* Private */\n  Group.prototype.queueTrigger = function(waypoint, direction) {\n    this.triggerQueues[direction].push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.remove = function(waypoint) {\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    if (index > -1) {\n      this.waypoints.splice(index, 1)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/first */\n  Group.prototype.first = function() {\n    return this.waypoints[0]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/last */\n  Group.prototype.last = function() {\n    return this.waypoints[this.waypoints.length - 1]\n  }\n\n  /* Private */\n  Group.findOrCreate = function(options) {\n    return groups[options.axis][options.name] || new Group(options)\n  }\n\n  Waypoint.Group = Group\n}())\n;(function() {\n  'use strict'\n\n  var $ = window.jQuery\n  var Waypoint = window.Waypoint\n\n  function JQueryAdapter(element) {\n    this.$element = $(element)\n  }\n\n  $.each([\n    'innerHeight',\n    'innerWidth',\n    'off',\n    'offset',\n    'on',\n    'outerHeight',\n    'outerWidth',\n    'scrollLeft',\n    'scrollTop'\n  ], function(i, method) {\n    JQueryAdapter.prototype[method] = function() {\n      var args = Array.prototype.slice.call(arguments)\n      return this.$element[method].apply(this.$element, args)\n    }\n  })\n\n  $.each([\n    'extend',\n    'inArray',\n    'isEmptyObject'\n  ], function(i, method) {\n    JQueryAdapter[method] = $[method]\n  })\n\n  Waypoint.adapters.push({\n    name: 'jquery',\n    Adapter: JQueryAdapter\n  })\n  Waypoint.Adapter = JQueryAdapter\n}())\n;(function() {\n  'use strict'\n\n  var Waypoint = window.Waypoint\n\n  function createExtension(framework) {\n    return function() {\n      var waypoints = []\n      var overrides = arguments[0]\n\n      if (framework.isFunction(arguments[0])) {\n        overrides = framework.extend({}, arguments[1])\n        overrides.handler = arguments[0]\n      }\n\n      this.each(function() {\n        var options = framework.extend({}, overrides, {\n          element: this\n        })\n        if (typeof options.context === 'string') {\n          options.context = framework(this).closest(options.context)[0]\n        }\n        waypoints.push(new Waypoint(options))\n      })\n\n      return waypoints\n    }\n  }\n\n  if (window.jQuery) {\n    window.jQuery.fn.waypoint = createExtension(window.jQuery)\n  }\n  if (window.Zepto) {\n    window.Zepto.fn.waypoint = createExtension(window.Zepto)\n  }\n}())\n;","\n/**\n * Load required plugin.\n */\nwindow.Granim = require('granim');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Granim');\n\n  page.initGranim = function() {\n    $('[data-granim]').each(function(){\n      var tag       = $(this),\n          granim    = tag.data('granim').split(','),\n          gradients = [],\n          opacity   = [1,1];\n\n      var len = granim.length;\n      if ( len > 0 ) {\n        if ( granim[0].indexOf('-') > -1 ) {\n          for (var i = 0; i < len; i++) {\n            gradients[i] = granim[i].split('-');\n          }\n\n          for (var i = 0; i < gradients[0].length; i++) {\n            opacity[i] = 1;\n          }\n        }\n        else {\n          for (var i = 0; i < len/2; i++) {\n            gradients[i] = [granim[i*2], granim[i*2+1]];\n          }\n        }\n      }\n\n      var options = {\n        element: tag[0],\n        name: 'granim',\n        direction: tag.dataAttr('direction', 'left-right'),\n        isPausedWhenNotInView: true,\n        opacity: opacity,\n        states : {\n          \"default-state\": {\n            gradients: gradients,\n            transitionSpeed: 5000,\n            loop: true\n          }\n         }\n      };\n\n      if (tag.hasDataAttr('opacity')) {\n        options.opacity = tag.data('opacity').split(',');\n      }\n\n      if (tag.hasDataAttr('image')) {\n        options.image = {\n          source: tag.dataAttr('image', ''),\n          position: ['center', 'center'],\n          stretchMode: ['stretch-if-bigger', 'stretch-if-bigger'],\n          blendingMode: 'multiply',\n        }\n      }\n\n      var granimInstance = new Granim(options);\n\n    });\n  }\n\n}(jQuery);\n\n\n\n","module.exports = require('./lib/Granim.js');\r\n","'use strict';\r\n\r\nfunction Granim(options) {\r\n\tthis.getElement(options.element);\r\n\tthis.x1 = 0;\r\n\tthis.y1 = 0;\r\n\tthis.name = options.name || false;\r\n\tthis.elToSetClassOn = options.elToSetClassOn || 'body';\r\n\tthis.direction = options.direction || 'diagonal';\r\n\tthis.customDirection = options.customDirection || {};\r\n\tthis.validateInput('direction');\r\n\tthis.isPausedWhenNotInView = options.isPausedWhenNotInView || false;\r\n\tthis.states = options.states;\r\n\tthis.stateTransitionSpeed = options.stateTransitionSpeed || 1000;\r\n\tthis.previousTimeStamp = null;\r\n\tthis.progress = 0;\r\n\tthis.isPaused = false;\r\n\tthis.isCleared = false;\r\n\tthis.isPausedBecauseNotInView = false;\r\n\tthis.context = this.canvas.getContext('2d');\r\n\tthis.channels = {};\r\n\tthis.channelsIndex = 0;\r\n\tthis.activeState = options.defaultStateName || 'default-state';\r\n\tthis.isChangingState = false;\r\n\tthis.currentColors = [];\r\n\tthis.currentColorsPos = [];\r\n\tthis.activetransitionSpeed = null;\r\n\tthis.eventPolyfill();\r\n\tthis.scrollDebounceThreshold = options.scrollDebounceThreshold || 300;\r\n\tthis.scrollDebounceTimeout = null;\r\n\tthis.isImgLoaded = false;\r\n\tthis.isCanvasInWindowView = false;\r\n\tthis.firstScrollInit = true;\r\n\tthis.animating = false;\r\n\tthis.gradientLength = this.states[this.activeState].gradients[0].length;\r\n\tif (options.image && options.image.source) {\r\n\t\tthis.image = {\r\n\t\t\tsource: options.image.source,\r\n\t\t\tposition: options.image.position || ['center', 'center'],\r\n\t\t\tstretchMode: options.image.stretchMode || false,\r\n\t\t\tblendingMode: options.image.blendingMode || false\r\n\t\t};\r\n\t}\r\n\tthis.events = {\r\n\t\tstart: new CustomEvent('granim:start'),\r\n\t\tend: new CustomEvent('granim:end'),\r\n\t\tgradientChange: function(details) {\r\n\t\t\treturn new CustomEvent('granim:gradientChange', {\r\n\t\t\t\tdetail: {\r\n\t\t\t\t\tisLooping: details.isLooping,\r\n\t\t\t\t\tcolorsFrom: details.colorsFrom,\r\n\t\t\t\t\tcolorsTo: details.colorsTo,\r\n\t\t\t\t\tactiveState: details.activeState\r\n\t\t\t\t},\r\n\t\t\t\tbubbles: false,\r\n\t\t\t\tcancelable: false\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\tthis.callbacks = {\r\n\t\tonStart: typeof options.onStart === 'function' ? options.onStart : false,\r\n\t\tonGradientChange: typeof options.onGradientChange === 'function' ?\r\n\t\t\toptions.onGradientChange :\r\n\t\t\tfalse,\r\n\t\tonEnd: typeof options.onEnd === 'function' ? options.onEnd : false\r\n\t};\r\n\tthis.getDimensions();\r\n\tthis.canvas.setAttribute('width', this.x1);\r\n\tthis.canvas.setAttribute('height', this.y1);\r\n\tthis.setColors();\r\n\r\n\tif (this.image) {\r\n\t\tthis.validateInput('image');\r\n\t\tthis.prepareImage();\r\n\t}\r\n\r\n\tthis.pauseWhenNotInViewNameSpace = this.pauseWhenNotInView.bind(this);\r\n\tthis.setSizeAttributesNameSpace = this.setSizeAttributes.bind(this);\r\n\tthis.onResize();\r\n\r\n\tif (this.isPausedWhenNotInView) {\r\n\t\tthis.onScroll();\r\n\t\t\r\n\t} else {\r\n\t\tif (!this.image) {\r\n\t\t\tthis.refreshColorsAndPos();\r\n\t\t\tthis.animation = requestAnimationFrame(this.animateColors.bind(this));\r\n\t\t\tthis.animating = true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Callback and Event\r\n\tif (this.callbacks.onStart) this.callbacks.onStart();\r\n\tthis.canvas.dispatchEvent(this.events.start);\r\n}\r\n\r\nGranim.prototype.animateColors = require('./animateColors.js');\r\nGranim.prototype.changeBlendingMode = require('./changeBlendingMode.js');\r\nGranim.prototype.changeDirection = require('./changeDirection.js');\r\nGranim.prototype.changeState = require('./changeState.js');\r\nGranim.prototype.clear = require('./clear.js');\r\nGranim.prototype.convertColorToRgba = require('./convertColorToRgba.js');\r\nGranim.prototype.destroy = require('./destroy.js');\r\nGranim.prototype.eventPolyfill = require('./eventPolyfill.js');\r\nGranim.prototype.getColor = require('./getColor.js');\r\nGranim.prototype.getColorDiff = require('./getColorDiff.js');\r\nGranim.prototype.getColorPos = require('./getColorPos.js');\r\nGranim.prototype.getColorPosDiff = require('./getColorPosDiff.js');\r\nGranim.prototype.getCurrentColors = require('./getCurrentColors.js');\r\nGranim.prototype.getCurrentColorsPos = require('./getCurrentColorsPos.js');\r\nGranim.prototype.getDimensions = require('./getDimensions.js');\r\nGranim.prototype.getElement = require('./getElement.js');\r\nGranim.prototype.getLightness = require('./getLightness.js');\r\nGranim.prototype.makeGradient = require('./makeGradient.js');\r\nGranim.prototype.onResize = require('./onResize.js');\r\nGranim.prototype.onScroll = require('./onScroll.js');\r\nGranim.prototype.pause = require('./pause.js');\r\nGranim.prototype.pauseWhenNotInView = require('./pauseWhenNotInView.js');\r\nGranim.prototype.play = require('./play.js');\r\nGranim.prototype.prepareImage = require('./prepareImage.js');\r\nGranim.prototype.refreshColorsAndPos = require('./refreshColorsAndPos.js');\r\nGranim.prototype.setColors = require('./setColors.js');\r\nGranim.prototype.setDirection = require('./setDirection.js');\r\nGranim.prototype.setSizeAttributes = require('./setSizeAttributes.js');\r\nGranim.prototype.triggerError = require('./triggerError.js');\r\nGranim.prototype.validateInput = require('./validateInput.js');\r\n\r\nmodule.exports = Granim;\r\n","'use strict';\r\n\r\nmodule.exports = function(timestamp) {\r\n\tvar wasWindowIdled = timestamp - this.previousTimeStamp > 100;\r\n\tvar isLoop = this.states[this.activeState].loop !== undefined ? this.states[this.activeState].loop : true;\r\n\tvar progressPercent, isLooping, nextGradient;\r\n\r\n\t// If tab was inactive then resumed, reset the previous timestamp\r\n\tif (this.previousTimeStamp === null || wasWindowIdled) {\r\n\t\tthis.previousTimeStamp = timestamp;\r\n\t}\r\n\r\n\t// Compute progress and save the timestamp\r\n\tthis.progress = this.progress + (timestamp - this.previousTimeStamp);\r\n\tprogressPercent = (this.progress / this.activetransitionSpeed * 100).toFixed(2);\r\n\tthis.previousTimeStamp = timestamp;\r\n\r\n\t// Set the new gradient colors in a property\r\n\tthis.refreshColorsAndPos(progressPercent);\r\n\r\n\t// Continue the animation or prepare for the next one\r\n\tif (progressPercent < 100) {\r\n\t\tthis.animation = requestAnimationFrame(this.animateColors.bind(this));\r\n\r\n\t} else {\r\n\t\t// if the current animation index is inferior to the penultimate gradient\r\n\t\t// or to the last gradient with the loop mode activated\r\n\t\tif (this.channelsIndex < this.states[this.activeState].gradients.length - 2 || isLoop) {\r\n\r\n\t\t\t// Set the active transition speed to the active state one after changing state\r\n\t\t\tif (this.isChangingState) {\r\n\t\t\t\tthis.activetransitionSpeed = this.states[this.activeState].transitionSpeed || 5000;\r\n\t\t\t\tthis.isChangingState = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Resetting properties\r\n\t\t\tthis.previousTimeStamp = null;\r\n\t\t\tthis.progress = 0;\r\n\t\t\tthis.channelsIndex++;\r\n\t\t\tisLooping = false;\r\n\r\n\t\t\t// If it's going to loop or if it's the transition after the loop\r\n\t\t\tif (this.channelsIndex === this.states[this.activeState].gradients.length - 1) {\r\n\t\t\t\tisLooping = true;\r\n\t\t\t\t\r\n\t\t\t} else if (this.channelsIndex === this.states[this.activeState].gradients.length) {\r\n\t\t\t\tthis.channelsIndex = 0;\r\n\t\t\t}\r\n\r\n\t\t\t// Checking the next gradient to send in args of an event and a callback\r\n\t\t\tnextGradient = this.states[this.activeState].gradients[this.channelsIndex + 1] === undefined ?\r\n\t\t\t\tthis.states[this.activeState].gradients[0] :\r\n\t\t\t\tthis.states[this.activeState].gradients[this.channelsIndex + 1];\r\n\r\n\t\t\t// Compute the colors for the transition and render a new frame\r\n\t\t\tthis.setColors();\r\n\t\t\tthis.animation = requestAnimationFrame(this.animateColors.bind(this));\r\n\t\t\t\r\n\t\t\t// Callback and Event\r\n\t\t\tif (this.callbacks.onGradientChange) {\r\n\t\t\t\tthis.callbacks.onGradientChange({\r\n\t\t\t\t\tisLooping: isLooping,\r\n\t\t\t\t\tcolorsFrom: this.states[this.activeState].gradients[this.channelsIndex],\r\n\t\t\t\t\tcolorsTo: nextGradient,\r\n\t\t\t\t\tactiveState: this.activeState\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.canvas.dispatchEvent(this.events.gradientChange({\r\n\t\t\t\tisLooping: isLooping,\r\n\t\t\t\tcolorsFrom: this.states[this.activeState].gradients[this.channelsIndex],\r\n\t\t\t\tcolorsTo: nextGradient,\r\n\t\t\t\tactiveState: this.activeState\r\n\t\t\t}));\r\n\r\n\t\t// Else if it was the last gradient on the list and the loop mode is off\r\n\t\t} else {\r\n\t\t\tcancelAnimationFrame(this.animation);\r\n\r\n\t\t\t// Callback and Event\r\n\t\t\tif (this.callbacks.onEnd) this.callbacks.onEnd();\r\n\t\t\tthis.canvas.dispatchEvent(new CustomEvent('granim:end'));\r\n\t\t}\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(newBlendingMode) {\r\n\tthis.context.clearRect(0, 0, this.x1, this.y1);\r\n\tthis.context.globalCompositeOperation =\r\n\t\tthis.image.blendingMode = newBlendingMode;\r\n\tthis.validateInput('blendingMode');\r\n\tif (this.isPaused) this.refreshColorsAndPos();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(newDirection) {\r\n\tthis.context.clearRect(0, 0, this.x1, this.y1);\r\n\tthis.direction = newDirection;\r\n\tthis.validateInput('direction');\r\n\tif (this.isPaused) this.refreshColorsAndPos();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(newState) {\r\n\tvar _this = this;\r\n\r\n\t// Prevent transitioning to the same state\r\n\tif (this.activeState === newState) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Setting the good properties for the transition\r\n\tif (!this.isPaused) {\r\n\t\tthis.isPaused = true;\r\n\t\tthis.pause();\r\n\t}\r\n\r\n\tthis.channelsIndex = -1;\r\n\tthis.activetransitionSpeed = this.stateTransitionSpeed;\r\n\tthis.activeColorsDiff = [];\r\n\tthis.activeColorsPosDiff = [];\r\n\tthis.activeColors = this.getCurrentColors();\r\n\tthis.activeColorsPos = this.getCurrentColorsPos();\r\n\tthis.progress = 0;\r\n\tthis.previousTimeStamp = null;\r\n\tthis.isChangingState = true;\r\n\r\n\t// Compute the gradient color and pos diff between the last frame gradient\r\n\t// and the first one of the new state\r\n\tthis.states[newState].gradients[0].forEach(function(gradientColor, i, arr) {\r\n\t\tvar nextColors = _this.convertColorToRgba(_this.getColor(gradientColor));\r\n\t\tvar nextColorsPos = _this.getColorPos(gradientColor, i);\r\n\t\tvar colorDiff = _this.getColorDiff(_this.activeColors[i], nextColors);\r\n\t\tvar colorPosDiff = _this.getColorPosDiff(_this.activeColorsPos[i], nextColorsPos);\r\n\t\t_this.activeColorsDiff.push(colorDiff);\r\n\t\t_this.activeColorsPosDiff.push(colorPosDiff);\r\n\t});\r\n\r\n\t// Start the animation\r\n\tthis.activeState = newState;\r\n\tthis.play();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tif (!this.isPaused) {\r\n\t\tcancelAnimationFrame(this.animation);\r\n\r\n\t} else {\r\n\t\tthis.isPaused = false;\r\n\t}\r\n\tthis.isCleared = true;\r\n\tthis.context.clearRect(0, 0, this.x1, this.y1);\r\n};\r\n","'use strict';\r\n\r\nvar regex = {\r\n\thexa: /^#(?:[0-9a-fA-F]{3}){1,2}$/,\r\n\trgba: /^rgba\\((\\d{1,3}), ?(\\d{1,3}), ?(\\d{1,3}), ?(.?\\d{1,3})\\)$/,\r\n\trgb: /^rgb\\((\\d{1,3}), ?(\\d{1,3}), ?(\\d{1,3})\\)$/,\r\n\thsla: /^hsla\\((\\d{1,3}), ?(\\d{1,3})%, ?(\\d{1,3})%, ?(.?\\d{1,3})\\)$/,\r\n\thsl: /^hsl\\((\\d{1,3}), ?(\\d{1,3})%, ?(\\d{1,3})%\\)$/\r\n}, match;\r\n\r\nmodule.exports = function(color) {\r\n\tswitch(identifyColorType(color)) {\r\n\t\tdefault:\r\n\t\t\tthis.triggerError('colorType');\r\n\r\n\t\tcase 'hexa':\r\n\t\t\treturn hexToRgba(color);\r\n\r\n\t\tcase 'rgba':\r\n\t\t\treturn [\r\n\t\t\t\tparseInt(match[1], 10),\r\n\t\t\t\tparseInt(match[2], 10),\r\n\t\t\t\tparseInt(match[3], 10),\r\n\t\t\t\tparseFloat(match[4])\r\n\t\t\t];\r\n\r\n\t\tcase 'rgb':\r\n\t\t\treturn [\r\n\t\t\t\tparseInt(match[1], 10),\r\n\t\t\t\tparseInt(match[2], 10),\r\n\t\t\t\tparseInt(match[3], 10),\r\n\t\t\t\t1\r\n\t\t\t];\r\n\r\n\t\tcase 'hsla':\r\n\t\t\treturn hslaToRgb(\r\n\t\t\t\tparseInt(match[1], 10) / 360,\r\n\t\t\t\tparseInt(match[2], 10) / 100,\r\n\t\t\t\tparseInt(match[3], 10) / 100,\r\n\t\t\t\tparseFloat(match[4])\r\n\t\t\t);\r\n\r\n\t\tcase 'hsl':\r\n\t\t\treturn hslaToRgb(\r\n\t\t\t\tparseInt(match[1], 10) / 360,\r\n\t\t\t\tparseInt(match[2], 10) / 100,\r\n\t\t\t\tparseInt(match[3], 10) / 100,\r\n\t\t\t\t1\r\n\t\t\t);\r\n\t}\r\n};\r\n\r\nfunction identifyColorType(color) {\r\n\tvar colorTypes = Object.keys(regex);\r\n\tvar i = 0;\r\n\tfor (i; i < colorTypes.length; i++) {\r\n\t\tmatch = regex[colorTypes[i]].exec(color);\r\n\t\tif (match) return colorTypes[i];\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction hexToRgba(hex) {\r\n\t// Expand shorthand form (e.g. '03F') to full form (e.g. '0033FF')\r\n\tvar shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n\thex = hex.replace(shorthandRegex, function(m, r, g, b) {\r\n\t\treturn r + r + g + g + b + b;\r\n\t});\r\n\tvar result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\treturn result ? [\r\n\t\tparseInt(result[1], 16),\r\n\t\tparseInt(result[2], 16),\r\n\t\tparseInt(result[3], 16),\r\n\t\t1\r\n\t] : null;\r\n}\r\n\r\nfunction hue2rgb(p, q, t) {\r\n\tif (t < 0) t += 1;\r\n\tif (t > 1) t -= 1;\r\n\tif (t < 1 / 6) return p + (q - p) * 6 * t;\r\n\tif (t < 1 / 2) return q;\r\n\tif (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n\treturn p;\r\n}\r\n\r\nfunction hslaToRgb(h, s, l, a) {\r\n\tvar r, g, b, q, p;\r\n\tif (s === 0) {\r\n\t\tr = g = b = l; // achromatic\r\n\t} else {\r\n\t\tq = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n\t\tp = 2 * l - q;\r\n\t\tr = hue2rgb(p, q, h + 1/3);\r\n\t\tg = hue2rgb(p, q, h);\r\n\t\tb = hue2rgb(p, q, h - 1/3);\r\n\t}\r\n\treturn [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a];\r\n}\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tthis.onResize('removeListeners');\r\n\tthis.onScroll('removeListeners');\r\n\tthis.clear();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tif ( typeof window.CustomEvent === 'function' ) return;\r\n\r\n\tfunction CustomEvent(event, params) {\r\n\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\r\n\t\tvar evt = document.createEvent('CustomEvent');\r\n\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n\t\treturn evt;\r\n\t}\r\n\r\n\tCustomEvent.prototype = window.Event.prototype;\r\n\r\n\twindow.CustomEvent = CustomEvent;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(gradientColor) {\r\n\tif (typeof gradientColor === 'string') {\r\n\t\treturn gradientColor;\r\n\r\n\t} else if (typeof gradientColor === 'object' && gradientColor.color) {\r\n\t\treturn gradientColor.color;\r\n\r\n\t} else {\r\n\t\tthis.triggerError('gradient.color');\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(colorA, colorB) {\r\n\tvar i = 0;\r\n\tvar colorDiff = [];\r\n\r\n\tfor (i; i < 4; i++) {\r\n\t\tcolorDiff.push(colorB[i] - colorA[i]);\r\n\t}\r\n\r\n\treturn colorDiff;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(gradientColor, i) {\r\n\tif (typeof gradientColor === 'object' && gradientColor.pos) {\r\n\t\treturn gradientColor.pos;\r\n\r\n\t} else {\r\n\t\t// Ensure first and last position to be 0 and 100\r\n\t\treturn parseFloat(!i ? 0 : ((1 / (this.gradientLength - 1)) * i).toFixed(2));\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(posA, posB) {\r\n\treturn posB - posA;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar i, j;\r\n\tvar currentColors = [];\r\n\r\n\tfor (i = 0; i < this.currentColors.length; i++) {\r\n\t\tcurrentColors.push([]);\r\n\r\n\t\tfor (j = 0; j < 4; j++) {\r\n\t\t\tcurrentColors[i].push(this.currentColors[i][j]);\r\n\t\t}\r\n\t}\r\n\r\n\t// Return a deep copy of the current colors\r\n\treturn currentColors;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar currentColorsPos = [], i;\r\n\r\n\tfor (i = 0; i < this.currentColorsPos.length; i++) {\r\n\t\tcurrentColorsPos.push(this.currentColorsPos[i]);\r\n\t}\r\n\r\n\t// Return a deep copy of the current colors\r\n\treturn currentColorsPos;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tthis.x1 = this.canvas.offsetWidth;\r\n\tthis.y1 = this.canvas.offsetHeight;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(element) {\r\n\tif (element instanceof HTMLCanvasElement) {\r\n\t\tthis.canvas = element;\r\n\r\n\t} else if (typeof element === 'string') {\r\n\t\tthis.canvas = document.querySelector(element);\r\n\r\n\t} else {\r\n\t\tthrow new Error('The element you used is neither a String, nor a HTMLCanvasElement');\r\n\t}\r\n\r\n\tif (!this.canvas) {\r\n\t\tthrow new Error('`' + element + '` could not be found in the DOM');\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar currentColors = this.getCurrentColors();\r\n\tvar gradientAverage = null;\r\n\tvar lightnessAverage, i;\r\n\tvar colorsAverage = currentColors.map(function(el) {\r\n\t\t// Compute the average lightness of each color\r\n\t\t// in the current gradient\r\n\t\treturn Math.max(el[0], el[1], el[2]);\r\n\t});\r\n\r\n\tfor (i = 0; i < colorsAverage.length; i++) {\r\n\t\t// Add all the average lightness of each color\r\n\t\tgradientAverage = gradientAverage === null ?\r\n\t\t\tcolorsAverage[i] : gradientAverage + colorsAverage[i];\r\n\r\n\t\tif (i === colorsAverage.length - 1) {\r\n\t\t\t// if it's the last lightness average\r\n\t\t\t// divide it by the total length to\r\n\t\t\t// have the global average lightness\r\n\t\t\tlightnessAverage = Math.round(gradientAverage / (i + 1));\r\n\t\t}\r\n\t}\r\n\r\n\treturn lightnessAverage >= 128 ? 'light' : 'dark';\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar gradient = this.setDirection();\r\n\tvar elToSetClassOnClass = document.querySelector(this.elToSetClassOn).classList;\r\n\tvar i = 0;\r\n\tthis.context.clearRect(0, 0, this.x1, this.y1);\r\n\r\n\tif (this.image) {\r\n\t\tthis.context.drawImage(\r\n\t\t\tthis.imageNode,\r\n\t\t\tthis.imagePosition.x,\r\n\t\t\tthis.imagePosition.y,\r\n\t\t\tthis.imagePosition.width,\r\n\t\t\tthis.imagePosition.height\r\n\t\t);\r\n\t}\r\n\r\n\tfor (i; i < this.currentColors.length; i++) {\r\n\t\tgradient.addColorStop(this.currentColorsPos[i], 'rgba(' +\r\n\t\t\tthis.currentColors[i][0] + ', ' +\r\n\t\t\tthis.currentColors[i][1] + ', ' +\r\n\t\t\tthis.currentColors[i][2] + ', ' +\r\n\t\t\tthis.currentColors[i][3] + ')'\r\n\t\t);\r\n\t}\r\n\r\n\tif (this.name) {\r\n\t\tif (this.getLightness() === 'light') {\r\n\t\t\telToSetClassOnClass.remove(this.name + '-dark');\r\n\t\t\telToSetClassOnClass.add(this.name + '-light');\r\n\r\n\t\t} else {\r\n\t\t\telToSetClassOnClass.remove(this.name + '-light');\r\n\t\t\telToSetClassOnClass.add(this.name + '-dark');\r\n\t\t}\r\n\t}\r\n\r\n\tthis.context.fillStyle = gradient;\r\n\tthis.context.fillRect(0, 0, this.x1, this.y1);\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(type) {\r\n\tif (type === 'removeListeners') {\r\n\t\twindow.removeEventListener('resize', this.setSizeAttributesNameSpace);\r\n\t\treturn;\r\n\t}\r\n\r\n\twindow.addEventListener('resize', this.setSizeAttributesNameSpace);\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(type) {\r\n\tif (type === 'removeListeners') {\r\n\t\twindow.removeEventListener('scroll', this.pauseWhenNotInViewNameSpace);\r\n\t\treturn;\r\n\t}\r\n\r\n\twindow.addEventListener('scroll', this.pauseWhenNotInViewNameSpace);\r\n\tthis.pauseWhenNotInViewNameSpace();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(state) {\r\n\tvar isPausedBecauseNotInView = state === 'isPausedBecauseNotInView';\r\n\tif (this.isCleared) return;\r\n\tif (!isPausedBecauseNotInView) this.isPaused = true;\r\n\tcancelAnimationFrame(this.animation);\r\n\tthis.animating = false;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar _this = this;\r\n\tif (this.scrollDebounceTimeout) clearTimeout(this.scrollDebounceTimeout);\r\n\r\n\tthis.scrollDebounceTimeout = setTimeout(function() {\r\n\t\tvar elPos = _this.canvas.getBoundingClientRect();\r\n\t\t_this.isCanvasInWindowView = !(elPos.bottom < 0 || elPos.right < 0 ||\r\n\t\t\telPos.left > window.innerWidth || elPos.top > window.innerHeight);\r\n\r\n\t\tif (_this.isCanvasInWindowView) {\r\n\t\t\tif (!_this.isPaused || _this.firstScrollInit) {\r\n\t\t\t\tif (_this.image && !_this.isImgLoaded) {return;}\r\n\t\t\t\t_this.isPausedBecauseNotInView = false;\r\n\t\t\t\t_this.play('isPlayedBecauseInView');\r\n\t\t\t\t_this.firstScrollInit = false;\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\tif (!_this.image && _this.firstScrollInit) {\r\n\t\t\t\t_this.refreshColorsAndPos();\r\n\t\t\t\t_this.firstScrollInit = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!_this.isPaused && !_this.isPausedBecauseNotInView) {\r\n\t\t\t\t_this.isPausedBecauseNotInView = true;\r\n\t\t\t\t_this.pause('isPausedBecauseNotInView');\r\n\t\t\t}\r\n\t\t}\r\n\t}, this.scrollDebounceThreshold);\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(state) {\r\n\tvar isPlayedBecauseInView = state === 'isPlayedBecauseInView';\r\n\tif (!isPlayedBecauseInView) this.isPaused = false;\r\n\tthis.isCleared = false;\r\n\tif (!this.animating) {\r\n\t\tthis.animation = requestAnimationFrame(this.animateColors.bind(this));\r\n\t\tthis.animating = true;\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar _this = this;\r\n\r\n\tif (!this.imagePosition) {\r\n\t\tthis.imagePosition = { x: 0, y: 0, width: 0, height: 0 };\r\n\t}\r\n\r\n\tif (this.image.blendingMode) {\r\n\t\tthis.context.globalCompositeOperation = this.image.blendingMode;\r\n\t}\r\n\r\n\tif (this.imageNode) {\r\n\t\tsetImagePosition();\r\n\t\treturn;\r\n\t}\r\n\r\n\tthis.imageNode = new Image();\r\n\tthis.imageNode.onerror = function() {\r\n\t\tthrow new Error('Granim: The image source is invalid.');\r\n\t};\r\n\tthis.imageNode.onload = function() {\r\n\t\t_this.imgOriginalWidth = _this.imageNode.width;\r\n\t\t_this.imgOriginalHeight = _this.imageNode.height;\r\n\t\tsetImagePosition();\r\n\t\t_this.refreshColorsAndPos();\r\n\t\tif (!_this.isPausedWhenNotInView || _this.isCanvasInWindowView) {\r\n\t\t\t_this.animation = requestAnimationFrame(_this.animateColors.bind(_this));\r\n\t\t}\r\n\t\t_this.isImgLoaded = true;\r\n\t};\r\n\tthis.imageNode.src = this.image.source;\r\n\r\n\tfunction setImagePosition() {\r\n\t\tvar i, currentAxis;\r\n\r\n\t\tfor (i = 0; i < 2; i++) {\r\n\t\t\tcurrentAxis = !i ? 'x' : 'y';\r\n\t\t\tsetImageAxisPosition(currentAxis);\r\n\t\t}\r\n\r\n\t\tfunction setImageAxisPosition(axis) {\r\n\t\t\tvar canvasWidthOrHeight = _this[axis + '1'];\r\n\t\t\tvar imgOriginalWidthOrHeight = _this[axis === 'x' ? 'imgOriginalWidth' : 'imgOriginalHeight'];\r\n\t\t\tvar imageAlignIndex = axis === 'x' ? _this.image.position[0] : _this.image.position[1];\r\n\t\t\tvar imageAxisPosition;\r\n\t\t\tswitch(imageAlignIndex) {\r\n\t\t\t\tcase 'center':\r\n\t\t\t\t\timageAxisPosition = imgOriginalWidthOrHeight > canvasWidthOrHeight\r\n\t\t\t\t\t\t? -(imgOriginalWidthOrHeight - canvasWidthOrHeight) / 2\r\n\t\t\t\t\t\t: (canvasWidthOrHeight - imgOriginalWidthOrHeight) / 2;\r\n\t\t\t\t\t_this.imagePosition[axis] = imageAxisPosition;\r\n\t\t\t\t\t_this.imagePosition[axis === 'x' ? 'width' : 'height'] = imgOriginalWidthOrHeight;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'top':\r\n\t\t\t\t\t_this.imagePosition['y'] = 0;\r\n\t\t\t\t\t_this.imagePosition['height'] = imgOriginalWidthOrHeight;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t_this.imagePosition['y'] = canvasWidthOrHeight - imgOriginalWidthOrHeight;\r\n\t\t\t\t\t_this.imagePosition['height'] = imgOriginalWidthOrHeight;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'right':\r\n\t\t\t\t\t_this.imagePosition['x'] = canvasWidthOrHeight - imgOriginalWidthOrHeight;\r\n\t\t\t\t\t_this.imagePosition['width'] = imgOriginalWidthOrHeight;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'left':\r\n\t\t\t\t\t_this.imagePosition['x'] = 0;\r\n\t\t\t\t\t_this.imagePosition['width'] = imgOriginalWidthOrHeight;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (_this.image.stretchMode) {\r\n\t\t\t\timageAlignIndex = axis === 'x' ? _this.image.stretchMode[0] : _this.image.stretchMode[1];\r\n\t\t\t\tswitch(imageAlignIndex) {\r\n\t\t\t\t\tcase 'none':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'stretch':\r\n\t\t\t\t\t\t_this.imagePosition[axis] = 0;\r\n\t\t\t\t\t\t_this.imagePosition[axis === 'x' ? 'width' : 'height'] = canvasWidthOrHeight;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'stretch-if-bigger':\r\n\t\t\t\t\t\tif (imgOriginalWidthOrHeight < canvasWidthOrHeight) break;\r\n\t\t\t\t\t\t_this.imagePosition[axis] = 0;\r\n\t\t\t\t\t\t_this.imagePosition[axis === 'x' ? 'width' : 'height'] = canvasWidthOrHeight;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'stretch-if-smaller':\r\n\t\t\t\t\t\tif (imgOriginalWidthOrHeight > canvasWidthOrHeight) break;\r\n\t\t\t\t\t\t_this.imagePosition[axis] = 0;\r\n\t\t\t\t\t\t_this.imagePosition[axis === 'x' ? 'width' : 'height'] = canvasWidthOrHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(progressPercent) {\r\n\tvar _this = this, activeChannel, activeChannelPos, i, j;\r\n\r\n\t// Loop through each colors of the active gradient\r\n\tfor (i = 0; i < this.activeColors.length; i++) {\r\n\r\n\t\t// Generate RGBA colors\r\n\t\tfor (j = 0; j < 4; j++) {\r\n\t\t\t// If color value [0-255] round to the integer,\r\n\t\t\t// Else if opacity [0-1] round to 2 decimals\r\n\t\t\tactiveChannel = _this.activeColors[i][j] +\r\n\t\t\t\t(j !== 3\r\n\t\t\t\t\t? Math.ceil(_this.activeColorsDiff[i][j] / 100 * progressPercent)\r\n\t\t\t\t\t: Math.round((_this.activeColorsDiff[i][j] / 100 * progressPercent) * 100) / 100\r\n\t\t\t\t);\r\n\r\n\t\t\t// Prevent colors values from going < 0 & > 255\r\n\t\t\tif (activeChannel <= 255 && activeChannel >= 0) {\r\n\t\t\t\t_this.currentColors[i][j] = activeChannel;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Generate gradient color position\r\n\t\tactiveChannelPos = parseFloat((_this.activeColorsPos[i] +\r\n\t\t\t(_this.activeColorsPosDiff[i] / 100 * progressPercent)\r\n\t\t).toFixed(4));\r\n\r\n\t\tif (activeChannelPos <= 1 && activeChannelPos >= 0) {\r\n\t\t\t_this.currentColorsPos[i] = activeChannelPos;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.makeGradient();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar _this = this, colorDiff, colorPosDiff, nextColors, nextColorsPos;\r\n\r\n\tif (!this.channels[this.activeState]) this.channels[this.activeState] = [];\r\n\r\n\t// If the actual channel exist, reassign properties and exit\r\n\t// (each channel is saved to prevent recomputing it each time)\r\n\tif (this.channels[this.activeState][this.channelsIndex] !== undefined) {\r\n\t\tthis.activeColors = this.channels[this.activeState][this.channelsIndex].colors;\r\n\t\tthis.activeColorsDiff = this.channels[this.activeState][this.channelsIndex].colorsDiff;\r\n\t\tthis.activeColorsPos = this.channels[this.activeState][this.channelsIndex].colorsPos;\r\n\t\tthis.activeColorsPosDiff = this.channels[this.activeState][this.channelsIndex].colorsPosDiff;\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Set blank properties\r\n\tthis.channels[this.activeState].push([{}]);\r\n\tthis.channels[this.activeState][this.channelsIndex].colors = [];\r\n\tthis.channels[this.activeState][this.channelsIndex].colorsDiff = [];\r\n\tthis.channels[this.activeState][this.channelsIndex].colorsPos = [];\r\n\tthis.channels[this.activeState][this.channelsIndex].colorsPosDiff = [];\r\n\tthis.activeColors = [];\r\n\tthis.activeColorsDiff = [];\r\n\tthis.activeColorsPos = [];\r\n\tthis.activeColorsPosDiff = [];\r\n\r\n\t// Go on each gradient of the current state\r\n\tthis.states[this.activeState].gradients[this.channelsIndex].forEach(function(color, i) {\r\n\t\t// Push the hex color converted to rgba on the channel and the active color properties\r\n\t\tvar colorPos = _this.getColorPos(color, i);\r\n\t\tvar color = _this.getColor(color);\r\n\t\tvar rgbaColor = _this.convertColorToRgba(color);\r\n\t\tvar activeChannel = _this.channels[_this.activeState];\r\n\r\n\t\tactiveChannel[_this.channelsIndex].colors.push(rgbaColor);\r\n\t\t_this.activeColors.push(rgbaColor);\r\n\t\tactiveChannel[_this.channelsIndex].colorsPos.push(colorPos);\r\n\t\t_this.activeColorsPos.push(colorPos);\r\n\r\n\t\t// If it's the first channel to be set, set the currentColors\r\n\t\tif (!_this.isCurrentColorsSet) {\r\n\t\t\t_this.currentColors.push(_this.convertColorToRgba(color));\r\n\t\t\t_this.currentColorsPos.push(colorPos);\r\n\t\t}\r\n\r\n\t\t// If it's the last gradient, compute the color diff between the last gradient and the first one,\r\n\t\t// else between the penultimate one and the last one\r\n\t\tif (_this.channelsIndex === _this.states[_this.activeState].gradients.length - 1) {\r\n\t\t\tcolorDiff = _this.getColorDiff(\r\n\t\t\t\tactiveChannel[_this.channelsIndex].colors[i],\r\n\t\t\t\tactiveChannel[0].colors[i]\r\n\t\t\t);\r\n\t\t\tcolorPosDiff = _this.getColorPosDiff(\r\n\t\t\t\tactiveChannel[_this.channelsIndex].colorsPos[i],\r\n\t\t\t\tactiveChannel[0].colorsPos[i]\r\n\t\t\t);\r\n\r\n\t\t} else {\r\n\t\t\tnextColors = _this.convertColorToRgba(_this.getColor(_this.states[_this.activeState].gradients[_this.channelsIndex + 1][i]));\r\n\t\t\tnextColorsPos = _this.getColorPos(_this.states[_this.activeState].gradients[_this.channelsIndex + 1][i], i);\r\n\t\t\tcolorDiff = _this.getColorDiff(activeChannel[_this.channelsIndex].colors[i], nextColors);\r\n\t\t\tcolorPosDiff = _this.getColorPosDiff(activeChannel[_this.channelsIndex].colorsPos[i], nextColorsPos);\r\n\t\t}\r\n\r\n\t\tactiveChannel[_this.channelsIndex].colorsDiff.push(colorDiff);\r\n\t\t_this.activeColorsDiff.push(colorDiff);\r\n\t\tactiveChannel[_this.channelsIndex].colorsPosDiff.push(colorPosDiff);\r\n\t\t_this.activeColorsPosDiff.push(colorPosDiff);\r\n\t});\r\n\r\n\tthis.activetransitionSpeed = this.states[this.activeState].transitionSpeed || 5000;\r\n\tthis.isCurrentColorsSet = true;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tvar ctx = this.context;\r\n\r\n\tswitch(this.direction) {\r\n\t\tcase 'diagonal':\r\n\t\t\treturn ctx.createLinearGradient(0, 0, this.x1, this.y1);\r\n\r\n\t\tcase 'left-right':\r\n\t\t\treturn ctx.createLinearGradient(0, 0, this.x1, 0);\r\n\r\n\t\tcase 'top-bottom':\r\n\t\t\treturn ctx.createLinearGradient(this.x1 / 2, 0, this.x1 / 2, this.y1);\r\n\r\n\t\tcase 'radial':\r\n\t\t\treturn ctx.createRadialGradient(this.x1 / 2, this.y1 / 2, this.x1 / 2, this.x1 / 2, this.y1 / 2, 0);\r\n\r\n\t\tcase 'custom':\r\n\t\t\treturn ctx.createLinearGradient(\r\n\t\t\t\tgetCustomCoordinateInPixels(this.customDirection.x0, this.x1),\r\n\t\t\t\tgetCustomCoordinateInPixels(this.customDirection.y0, this.y1),\r\n\t\t\t\tgetCustomCoordinateInPixels(this.customDirection.x1, this.x1),\r\n\t\t\t\tgetCustomCoordinateInPixels(this.customDirection.y1, this.y1)\r\n\t\t\t);\r\n\t}\r\n};\r\n\r\nfunction getCustomCoordinateInPixels(coordinate, size) {\r\n\treturn coordinate.indexOf('%') > -1\r\n\t\t? size / 100 * parseInt(coordinate.split('%')[0], 10)\r\n\t\t: parseInt(coordinate.split('px')[0], 10);\r\n}\r\n","'use strict';\r\n\r\nmodule.exports = function() {\r\n\tthis.getDimensions();\r\n\tthis.canvas.setAttribute('width', this.x1);\r\n\tthis.canvas.setAttribute('height', this.y1);\r\n\tif (this.image) this.prepareImage();\r\n\tthis.refreshColorsAndPos();\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(element) {\r\n\tvar siteURL = 'https://sarcadass.github.io/granim.js/api.html';\r\n\tthrow new Error('Granim: Input error on \"' + element + '\" option.\\nCheck the API ' + siteURL + '.');\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function(inputType) {\r\n\tvar xPositionValues = ['left', 'center', 'right'];\r\n\tvar yPositionValues = ['top', 'center', 'bottom'];\r\n\tvar stretchModeValues = ['none', 'stretch', 'stretch-if-smaller', 'stretch-if-bigger'];\r\n\tvar blendingModeValues = ['multiply', 'screen', 'normal', 'overlay', 'darken',\r\n\t\t'lighten', 'lighter', 'color-dodge', 'color-burn', 'hard-light', 'soft-light',\r\n\t\t'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\r\n\tvar directionValues = ['diagonal', 'left-right', 'top-bottom', 'radial', 'custom'];\r\n\r\n\tswitch(inputType) {\r\n\t\tcase 'image':\r\n\t\t\t// Validate image.position\r\n\t\t\tif ((!Array.isArray(this.image.position) || this.image.position.length !== 2) ||\r\n\t\t\t\txPositionValues.indexOf(this.image.position[0]) === -1 ||\r\n\t\t\t\tyPositionValues.indexOf(this.image.position[1]) === -1\r\n\t\t\t) { this.triggerError('image.position'); }\r\n\t\t\t// Validate image.stretchMode\r\n\t\t\tif (this.image.stretchMode) {\r\n\t\t\t\tif ((!Array.isArray(this.image.stretchMode) || this.image.stretchMode.length !== 2) ||\r\n\t\t\t\t\tstretchModeValues.indexOf(this.image.stretchMode[0]) === -1 ||\r\n\t\t\t\t\tstretchModeValues.indexOf(this.image.stretchMode[1]) === -1\r\n\t\t\t\t) { this.triggerError('image.stretchMode'); }\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'blendingMode':\r\n\t\t\tif (blendingModeValues.indexOf(this.image.blendingMode) === -1) {\r\n\t\t\t\tthis.clear();\r\n\t\t\t\tthis.triggerError('blendingMode');\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'direction':\r\n\t\t\tif (directionValues.indexOf(this.direction) === -1) {\r\n\t\t\t\tthis.triggerError('direction');\r\n\t\t\t} else {\r\n\t\t\t\tif (this.direction === 'custom') {\r\n\t\t\t\t\tif (!areDefinedInPixelsOrPercentage([\r\n\t\t\t\t\t\tthis.customDirection.x0,\r\n\t\t\t\t\t\tthis.customDirection.x1,\r\n\t\t\t\t\t\tthis.customDirection.y0,\r\n\t\t\t\t\t\tthis.customDirection.y1\r\n\t\t\t\t\t])) {\r\n\t\t\t\t\t\tthis.triggerError('customDirection');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n\r\nfunction areDefinedInPixelsOrPercentage(array) {\r\n\tvar definedInPixelsOrPercentage = true, i = 0, value;\r\n\twhile (definedInPixelsOrPercentage && i < array.length) {\r\n\t\tvalue = array[i];\r\n\t\tif (typeof value !== 'string') {\r\n\t\t\tdefinedInPixelsOrPercentage = false;\r\n\t\t} else {\r\n\t\t\tvar splittedValue = null;\r\n\t\t\tvar unit = null;\r\n\t\t\tif (value.indexOf('px') !== -1) unit = 'px';\r\n\t\t\tif (value.indexOf('%') !== -1) unit = '%';\r\n\t\t\tsplittedValue = value.split(unit).filter(function(value) {\r\n\t\t\t\treturn value.length > 0;\r\n\t\t\t});\r\n\t\t\t// Check if there is a unit ('px' or '%'),\r\n\t\t\t// a char before the unit,\r\n\t\t\t// no char after the unit,\r\n\t\t\t// the string without the unit is only composed of digits\r\n\t\t\tif (\r\n\t\t\t\t!unit\r\n\t\t\t\t|| splittedValue.length > 2\r\n\t\t\t\t|| !splittedValue[0]\r\n\t\t\t\t|| splittedValue[1]\r\n\t\t\t\t|| !/^-?\\d+\\.?\\d*$/.test(splittedValue[0])\r\n\t\t\t) {\r\n\t\t\t\tdefinedInPixelsOrPercentage = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++;\r\n\t}\r\n\treturn definedInPixelsOrPercentage;\r\n}\r\n","\n/**\n * Load required plugin.\n */\nrequire('jarallax/dist/jarallax.min');\nrequire('jarallax/dist/jarallax-video.min');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Jarallax');\n\n  page.initJarallax = function() {\n\n    // Parallax image\n    //\n    $('[data-parallax]').each(function() {\n      var tag = $(this);\n      var options = {\n        imgSrc: tag.data('parallax'),\n        speed: 0.3,\n      };\n\n      if ( tag.hasClass('header') ) {\n        options.speed = 0.6;\n      }\n\n      options = $.extend( options, page.getDataOptions(tag));\n\n      tag.jarallax( options );\n\n    });\n\n\n    // Video backgrounds\n    //\n    $('[data-video]').each(function() {\n      var tag = $(this);\n      var options = {\n        videoSrc: tag.data('video'),\n        speed: 1,\n      };\n\n      if ( options.videoSrc.indexOf('mp4:') > -1 ) {\n        options.speed = 0.5;\n      }\n\n      options = $.extend( options, page.getDataOptions(tag));\n\n      tag.jarallax( options );\n\n    });\n\n  }\n\n}(jQuery);\n\n\n\n","/*!\n * Name    : Just Another Parallax [Jarallax]\n * Version : 1.12.0\n * Author  : nK <https://nkdev.info>\n * GitHub  : https://github.com/nk-o/jarallax\n */!function(n){var o={};function i(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=n,i.c=o,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,\"a\",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p=\"\",i(i.s=11)}([,,function(e,t){e.exports=function(e){\"complete\"===document.readyState||\"interactive\"===document.readyState?e.call():document.attachEvent?document.attachEvent(\"onreadystatechange\",function(){\"interactive\"===document.readyState&&e.call()}):document.addEventListener&&document.addEventListener(\"DOMContentLoaded\",e)}},,function(n,e,t){(function(e){var t;t=\"undefined\"!=typeof window?window:void 0!==e?e:\"undefined\"!=typeof self?self:{},n.exports=t}).call(this,t(5))},function(e,t){function n(e){return(n=\"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})(e)}var o;o=function(){return this}();try{o=o||new Function(\"return this\")()}catch(e){\"object\"===(\"undefined\"==typeof window?\"undefined\":n(window))&&(o=window)}e.exports=o},,,,,,function(e,t,n){e.exports=n(12)},function(e,t,n){\"use strict\";n.r(t);var o=n(2),i=n.n(o),a=n(4),r=n(13);function l(e){return(l=\"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})(e)}var s=a.window.jarallax;if(a.window.jarallax=r.default,a.window.jarallax.noConflict=function(){return a.window.jarallax=s,this},void 0!==a.jQuery){var c=function(){var e=arguments||[];Array.prototype.unshift.call(e,this);var t=r.default.apply(a.window,e);return\"object\"!==l(t)?t:this};c.constructor=r.default.constructor;var u=a.jQuery.fn.jarallax;a.jQuery.fn.jarallax=c,a.jQuery.fn.jarallax.noConflict=function(){return a.jQuery.fn.jarallax=u,this}}i()(function(){Object(r.default)(document.querySelectorAll(\"[data-jarallax]\"))})},function(e,t,n){\"use strict\";n.r(t);var o=n(2),i=n.n(o),a=n(14),r=n.n(a),b=n(4);function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e)))return;var n=[],o=!0,i=!1,a=void 0;try{for(var r,l=e[Symbol.iterator]();!(o=(r=l.next()).done)&&(n.push(r.value),!t||n.length!==t);o=!0);}catch(e){i=!0,a=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw a}}return n}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function u(e){return(u=\"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})(e)}function l(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}var s,v,m=-1<navigator.userAgent.indexOf(\"MSIE \")||-1<navigator.userAgent.indexOf(\"Trident/\")||-1<navigator.userAgent.indexOf(\"Edge/\"),p=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),d=function(){for(var e=\"transform WebkitTransform MozTransform\".split(\" \"),t=document.createElement(\"div\"),n=0;n<e.length;n++)if(t&&void 0!==t.style[e[n]])return e[n];return!1}();function f(){v=p?(!s&&document.body&&((s=document.createElement(\"div\")).style.cssText=\"position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;\",document.body.appendChild(s)),(s?s.clientHeight:0)||b.window.innerHeight||document.documentElement.clientHeight):b.window.innerHeight||document.documentElement.clientHeight}f(),b.window.addEventListener(\"resize\",f),b.window.addEventListener(\"orientationchange\",f),b.window.addEventListener(\"load\",f),i()(function(){f()});var g=[];function y(){g.length&&(g.forEach(function(e,t){var n=e.instance,o=e.oldData,i=n.$item.getBoundingClientRect(),a={width:i.width,height:i.height,top:i.top,bottom:i.bottom,wndW:b.window.innerWidth,wndH:v},r=!o||o.wndW!==a.wndW||o.wndH!==a.wndH||o.width!==a.width||o.height!==a.height,l=r||!o||o.top!==a.top||o.bottom!==a.bottom;g[t].oldData=a,r&&n.onResize(),l&&n.onScroll()}),r()(y))}function h(e,t){(\"object\"===(\"undefined\"==typeof HTMLElement?\"undefined\":u(HTMLElement))?e instanceof HTMLElement:e&&\"object\"===u(e)&&null!==e&&1===e.nodeType&&\"string\"==typeof e.nodeName)&&(e=[e]);for(var n,o=t,i=Array.prototype.slice.call(arguments,2),a=e.length,r=0;r<a;r++)if(\"object\"===u(o)||void 0===o?e[r].jarallax||(e[r].jarallax=new w(e[r],o)):e[r].jarallax&&(n=e[r].jarallax[o].apply(e[r].jarallax,i)),void 0!==n)return n;return e}var x=0,w=function(){function s(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,s);var n=this;n.instanceID=x++,n.$item=e,n.defaults={type:\"scroll\",speed:.5,imgSrc:null,imgElement:\".jarallax-img\",imgSize:\"cover\",imgPosition:\"50% 50%\",imgRepeat:\"no-repeat\",keepImg:!1,elementInViewport:null,zIndex:-100,disableParallax:!1,disableVideo:!1,videoSrc:null,videoStartTime:0,videoEndTime:0,videoVolume:0,videoLoop:!0,videoPlayOnlyVisible:!0,videoLazyLoading:!0,onScroll:null,onInit:null,onDestroy:null,onCoverImage:null};var o=n.$item.dataset||{},i={};if(Object.keys(o).forEach(function(e){var t=e.substr(0,1).toLowerCase()+e.substr(1);t&&void 0!==n.defaults[t]&&(i[t]=o[e])}),n.options=n.extend({},n.defaults,i,t),n.pureOptions=n.extend({},n.options),Object.keys(n.options).forEach(function(e){\"true\"===n.options[e]?n.options[e]=!0:\"false\"===n.options[e]&&(n.options[e]=!1)}),n.options.speed=Math.min(2,Math.max(-1,parseFloat(n.options.speed))),\"string\"==typeof n.options.disableParallax&&(n.options.disableParallax=new RegExp(n.options.disableParallax)),n.options.disableParallax instanceof RegExp){var a=n.options.disableParallax;n.options.disableParallax=function(){return a.test(navigator.userAgent)}}if(\"function\"!=typeof n.options.disableParallax&&(n.options.disableParallax=function(){return!1}),\"string\"==typeof n.options.disableVideo&&(n.options.disableVideo=new RegExp(n.options.disableVideo)),n.options.disableVideo instanceof RegExp){var r=n.options.disableVideo;n.options.disableVideo=function(){return r.test(navigator.userAgent)}}\"function\"!=typeof n.options.disableVideo&&(n.options.disableVideo=function(){return!1});var l=n.options.elementInViewport;l&&\"object\"===u(l)&&void 0!==l.length&&(l=c(l,1)[0]);l instanceof Element||(l=null),n.options.elementInViewport=l,n.image={src:n.options.imgSrc||null,$container:null,useImgTag:!1,position:/iPad|iPhone|iPod|Android/.test(navigator.userAgent)?\"absolute\":\"fixed\"},n.initImg()&&n.canInitParallax()&&n.init()}return function(e,t,n){t&&l(e.prototype,t),n&&l(e,n)}(s,[{key:\"css\",value:function(t,n){return\"string\"==typeof n?b.window.getComputedStyle(t).getPropertyValue(n):(n.transform&&d&&(n[d]=n.transform),Object.keys(n).forEach(function(e){t.style[e]=n[e]}),t)}},{key:\"extend\",value:function(n){var o=arguments;return n=n||{},Object.keys(arguments).forEach(function(t){o[t]&&Object.keys(o[t]).forEach(function(e){n[e]=o[t][e]})}),n}},{key:\"getWindowData\",value:function(){return{width:b.window.innerWidth||document.documentElement.clientWidth,height:v,y:document.documentElement.scrollTop}}},{key:\"initImg\",value:function(){var e=this,t=e.options.imgElement;return t&&\"string\"==typeof t&&(t=e.$item.querySelector(t)),t instanceof Element||(e.options.imgSrc?(t=new Image).src=e.options.imgSrc:t=null),t&&(e.options.keepImg?e.image.$item=t.cloneNode(!0):(e.image.$item=t,e.image.$itemParent=t.parentNode),e.image.useImgTag=!0),!!e.image.$item||(null===e.image.src&&(e.image.src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",e.image.bgImage=e.css(e.$item,\"background-image\")),!(!e.image.bgImage||\"none\"===e.image.bgImage))}},{key:\"canInitParallax\",value:function(){return d&&!this.options.disableParallax()}},{key:\"init\",value:function(){var e=this,t={position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",overflow:\"hidden\",pointerEvents:\"none\"},n={};if(!e.options.keepImg){var o=e.$item.getAttribute(\"style\");if(o&&e.$item.setAttribute(\"data-jarallax-original-styles\",o),e.image.useImgTag){var i=e.image.$item.getAttribute(\"style\");i&&e.image.$item.setAttribute(\"data-jarallax-original-styles\",i)}}if(\"static\"===e.css(e.$item,\"position\")&&e.css(e.$item,{position:\"relative\"}),\"auto\"===e.css(e.$item,\"z-index\")&&e.css(e.$item,{zIndex:0}),e.image.$container=document.createElement(\"div\"),e.css(e.image.$container,t),e.css(e.image.$container,{\"z-index\":e.options.zIndex}),m&&e.css(e.image.$container,{opacity:.9999}),e.image.$container.setAttribute(\"id\",\"jarallax-container-\".concat(e.instanceID)),e.$item.appendChild(e.image.$container),e.image.useImgTag?n=e.extend({\"object-fit\":e.options.imgSize,\"object-position\":e.options.imgPosition,\"font-family\":\"object-fit: \".concat(e.options.imgSize,\"; object-position: \").concat(e.options.imgPosition,\";\"),\"max-width\":\"none\"},t,n):(e.image.$item=document.createElement(\"div\"),e.image.src&&(n=e.extend({\"background-position\":e.options.imgPosition,\"background-size\":e.options.imgSize,\"background-repeat\":e.options.imgRepeat,\"background-image\":e.image.bgImage||'url(\"'.concat(e.image.src,'\")')},t,n))),\"opacity\"!==e.options.type&&\"scale\"!==e.options.type&&\"scale-opacity\"!==e.options.type&&1!==e.options.speed||(e.image.position=\"absolute\"),\"fixed\"===e.image.position){var a=function(e){for(var t=[];null!==e.parentElement;)1===(e=e.parentElement).nodeType&&t.push(e);return t}(e.$item).filter(function(e){var t=b.window.getComputedStyle(e),n=t[\"-webkit-transform\"]||t[\"-moz-transform\"]||t.transform;return n&&\"none\"!==n||/(auto|scroll)/.test(t.overflow+t[\"overflow-y\"]+t[\"overflow-x\"])});e.image.position=a.length?\"absolute\":\"fixed\"}n.position=e.image.position,e.css(e.image.$item,n),e.image.$container.appendChild(e.image.$item),e.onResize(),e.onScroll(!0),e.options.onInit&&e.options.onInit.call(e),\"none\"!==e.css(e.$item,\"background-image\")&&e.css(e.$item,{\"background-image\":\"none\"}),e.addToParallaxList()}},{key:\"addToParallaxList\",value:function(){g.push({instance:this}),1===g.length&&y()}},{key:\"removeFromParallaxList\",value:function(){var n=this;g.forEach(function(e,t){e.instance.instanceID===n.instanceID&&g.splice(t,1)})}},{key:\"destroy\",value:function(){var e=this;e.removeFromParallaxList();var t=e.$item.getAttribute(\"data-jarallax-original-styles\");if(e.$item.removeAttribute(\"data-jarallax-original-styles\"),t?e.$item.setAttribute(\"style\",t):e.$item.removeAttribute(\"style\"),e.image.useImgTag){var n=e.image.$item.getAttribute(\"data-jarallax-original-styles\");e.image.$item.removeAttribute(\"data-jarallax-original-styles\"),n?e.image.$item.setAttribute(\"style\",t):e.image.$item.removeAttribute(\"style\"),e.image.$itemParent&&e.image.$itemParent.appendChild(e.image.$item)}e.$clipStyles&&e.$clipStyles.parentNode.removeChild(e.$clipStyles),e.image.$container&&e.image.$container.parentNode.removeChild(e.image.$container),e.options.onDestroy&&e.options.onDestroy.call(e),delete e.$item.jarallax}},{key:\"clipContainer\",value:function(){if(\"fixed\"===this.image.position){var e=this,t=e.image.$container.getBoundingClientRect(),n=t.width,o=t.height;if(!e.$clipStyles)e.$clipStyles=document.createElement(\"style\"),e.$clipStyles.setAttribute(\"type\",\"text/css\"),e.$clipStyles.setAttribute(\"id\",\"jarallax-clip-\".concat(e.instanceID)),(document.head||document.getElementsByTagName(\"head\")[0]).appendChild(e.$clipStyles);var i=\"#jarallax-container-\".concat(e.instanceID,\" {\\n           clip: rect(0 \").concat(n,\"px \").concat(o,\"px 0);\\n           clip: rect(0, \").concat(n,\"px, \").concat(o,\"px, 0);\\n        }\");e.$clipStyles.styleSheet?e.$clipStyles.styleSheet.cssText=i:e.$clipStyles.innerHTML=i}}},{key:\"coverImage\",value:function(){var e=this,t=e.image.$container.getBoundingClientRect(),n=t.height,o=e.options.speed,i=\"scroll\"===e.options.type||\"scroll-opacity\"===e.options.type,a=0,r=n,l=0;return i&&(o<0?(a=o*Math.max(n,v),v<n&&(a-=o*(n-v))):a=o*(n+v),1<o?r=Math.abs(a-v):o<0?r=a/o+Math.abs(a):r+=(v-n)*(1-o),a/=2),e.parallaxScrollDistance=a,l=i?(v-r)/2:(n-r)/2,e.css(e.image.$item,{height:\"\".concat(r,\"px\"),marginTop:\"\".concat(l,\"px\"),left:\"fixed\"===e.image.position?\"\".concat(t.left,\"px\"):\"0\",width:\"\".concat(t.width,\"px\")}),e.options.onCoverImage&&e.options.onCoverImage.call(e),{image:{height:r,marginTop:l},container:t}}},{key:\"isVisible\",value:function(){return this.isElementInViewport||!1}},{key:\"onScroll\",value:function(e){var t=this,n=t.$item.getBoundingClientRect(),o=n.top,i=n.height,a={},r=n;if(t.options.elementInViewport&&(r=t.options.elementInViewport.getBoundingClientRect()),t.isElementInViewport=0<=r.bottom&&0<=r.right&&r.top<=v&&r.left<=b.window.innerWidth,e||t.isElementInViewport){var l=Math.max(0,o),s=Math.max(0,i+o),c=Math.max(0,-o),u=Math.max(0,o+i-v),m=Math.max(0,i-(o+i-v)),p=Math.max(0,-o+v-i),d=1-2*(v-o)/(v+i),f=1;if(i<v?f=1-(c||u)/i:s<=v?f=s/v:m<=v&&(f=m/v),\"opacity\"!==t.options.type&&\"scale-opacity\"!==t.options.type&&\"scroll-opacity\"!==t.options.type||(a.transform=\"translate3d(0,0,0)\",a.opacity=f),\"scale\"===t.options.type||\"scale-opacity\"===t.options.type){var g=1;t.options.speed<0?g-=t.options.speed*f:g+=t.options.speed*(1-f),a.transform=\"scale(\".concat(g,\") translate3d(0,0,0)\")}if(\"scroll\"===t.options.type||\"scroll-opacity\"===t.options.type){var y=t.parallaxScrollDistance*d;\"absolute\"===t.image.position&&(y-=o),a.transform=\"translate3d(0,\".concat(y,\"px,0)\")}t.css(t.image.$item,a),t.options.onScroll&&t.options.onScroll.call(t,{section:n,beforeTop:l,beforeTopEnd:s,afterTop:c,beforeBottom:u,beforeBottomEnd:m,afterBottom:p,visiblePercent:f,fromViewportCenter:d})}}},{key:\"onResize\",value:function(){this.coverImage(),this.clipContainer()}}]),s}();h.constructor=w,t.default=h},function(e,t,n){var o=n(15),i=o.requestAnimationFrame||o.webkitRequestAnimationFrame||o.mozRequestAnimationFrame||function(e){var t=+new Date,n=Math.max(0,16-(t-a)),o=setTimeout(e,n);return a=t,o},a=+new Date;var r=o.cancelAnimationFrame||o.webkitCancelAnimationFrame||o.mozCancelAnimationFrame||clearTimeout;Function.prototype.bind&&(i=i.bind(o),r=r.bind(o)),(e.exports=i).cancel=r},function(n,e,t){(function(e){var t;t=\"undefined\"!=typeof window?window:void 0!==e?e:\"undefined\"!=typeof self?self:{},n.exports=t}).call(this,t(5))}]);\n//# sourceMappingURL=jarallax.min.js.map\n","/*!\n * Name    : Video Background Extension for Jarallax\n * Version : 1.0.1\n * Author  : nK <https://nkdev.info>\n * GitHub  : https://github.com/nk-o/jarallax\n */!function(o){var i={};function n(e){if(i[e])return i[e].exports;var t=i[e]={i:e,l:!1,exports:{}};return o[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}n.m=o,n.c=i,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t)n.d(o,i,function(e){return t[e]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=6)}([,,function(e,t){e.exports=function(e){\"complete\"===document.readyState||\"interactive\"===document.readyState?e.call():document.attachEvent?document.attachEvent(\"onreadystatechange\",function(){\"interactive\"===document.readyState&&e.call()}):document.addEventListener&&document.addEventListener(\"DOMContentLoaded\",e)}},,function(o,e,t){(function(e){var t;t=\"undefined\"!=typeof window?window:void 0!==e?e:\"undefined\"!=typeof self?self:{},o.exports=t}).call(this,t(5))},function(e,t){function o(e){return(o=\"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})(e)}var i;i=function(){return this}();try{i=i||new Function(\"return this\")()}catch(e){\"object\"===(\"undefined\"==typeof window?\"undefined\":o(window))&&(i=window)}e.exports=i},function(e,t,o){e.exports=o(7)},function(e,t,o){\"use strict\";o.r(t);var i=o(8),n=o.n(i),a=o(4),r=o.n(a),l=o(2),p=o.n(l),u=o(10);r.a.VideoWorker=r.a.VideoWorker||n.a,Object(u.default)(),p()(function(){\"undefined\"!=typeof jarallax&&jarallax(document.querySelectorAll(\"[data-jarallax-video]\"))})},function(e,t,o){e.exports=o(9)},function(e,t,o){\"use strict\";function n(e){return(n=\"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})(e)}function a(e,t){for(var o=0;o<t.length;o++){var i=t[o];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function i(){this._done=[],this._fail=[]}o.r(t),o.d(t,\"default\",function(){return c}),i.prototype={execute:function(e,t){var o=e.length;for(t=Array.prototype.slice.call(t);o--;)e[o].apply(null,t)},resolve:function(){this.execute(this._done,arguments)},reject:function(){this.execute(this._fail,arguments)},done:function(e){this._done.push(e)},fail:function(e){this._fail.push(e)}};var r=0,l=0,p=0,u=0,s=0,d=new i,y=new i,c=function(){function i(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,i);var o=this;o.url=e,o.options_default={autoplay:!1,loop:!1,mute:!1,volume:100,showContols:!0,startTime:0,endTime:0},o.options=o.extend({},o.options_default,t),o.videoID=o.parseURL(e),o.videoID&&(o.ID=r++,o.loadAPI(),o.init())}return function(e,t,o){t&&a(e.prototype,t),o&&a(e,o)}(i,[{key:\"extend\",value:function(o){var i=arguments;return o=o||{},Object.keys(arguments).forEach(function(t){i[t]&&Object.keys(i[t]).forEach(function(e){o[e]=i[t][e]})}),o}},{key:\"parseURL\",value:function(e){var t,o,i,n,a,r=!(!(t=e.match(/.*(?:youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=)([^#\\&\\?]*).*/))||11!==t[1].length)&&t[1],l=!(!(o=e.match(/https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/))||!o[3])&&o[3],p=(i=e.split(/,(?=mp4\\:|webm\\:|ogv\\:|ogg\\:)/),n={},a=0,i.forEach(function(e){var t=e.match(/^(mp4|webm|ogv|ogg)\\:(.*)/);t&&t[1]&&t[2]&&(n[\"ogv\"===t[1]?\"ogg\":t[1]]=t[2],a=1)}),!!a&&n);return r?(this.type=\"youtube\",r):l?(this.type=\"vimeo\",l):!!p&&(this.type=\"local\",p)}},{key:\"isValid\",value:function(){return!!this.videoID}},{key:\"on\",value:function(e,t){this.userEventsList=this.userEventsList||[],(this.userEventsList[e]||(this.userEventsList[e]=[])).push(t)}},{key:\"off\",value:function(o,i){var n=this;this.userEventsList&&this.userEventsList[o]&&(i?this.userEventsList[o].forEach(function(e,t){e===i&&(n.userEventsList[o][t]=!1)}):delete this.userEventsList[o])}},{key:\"fire\",value:function(e){var t=this,o=[].slice.call(arguments,1);this.userEventsList&&void 0!==this.userEventsList[e]&&this.userEventsList[e].forEach(function(e){e&&e.apply(t,o)})}},{key:\"play\",value:function(e){var t=this;t.player&&(\"youtube\"===t.type&&t.player.playVideo&&(void 0!==e&&t.player.seekTo(e||0),YT.PlayerState.PLAYING!==t.player.getPlayerState()&&t.player.playVideo()),\"vimeo\"===t.type&&(void 0!==e&&t.player.setCurrentTime(e),t.player.getPaused().then(function(e){e&&t.player.play()})),\"local\"===t.type&&(void 0!==e&&(t.player.currentTime=e),t.player.paused&&t.player.play()))}},{key:\"pause\",value:function(){var t=this;t.player&&(\"youtube\"===t.type&&t.player.pauseVideo&&YT.PlayerState.PLAYING===t.player.getPlayerState()&&t.player.pauseVideo(),\"vimeo\"===t.type&&t.player.getPaused().then(function(e){e||t.player.pause()}),\"local\"===t.type&&(t.player.paused||t.player.pause()))}},{key:\"mute\",value:function(){var e=this;e.player&&(\"youtube\"===e.type&&e.player.mute&&e.player.mute(),\"vimeo\"===e.type&&e.player.setVolume&&e.player.setVolume(0),\"local\"===e.type&&(e.$video.muted=!0))}},{key:\"unmute\",value:function(){var e=this;e.player&&(\"youtube\"===e.type&&e.player.mute&&e.player.unMute(),\"vimeo\"===e.type&&e.player.setVolume&&e.player.setVolume(e.options.volume),\"local\"===e.type&&(e.$video.muted=!1))}},{key:\"setVolume\",value:function(e){var t=0<arguments.length&&void 0!==e&&e,o=this;o.player&&t&&(\"youtube\"===o.type&&o.player.setVolume&&o.player.setVolume(t),\"vimeo\"===o.type&&o.player.setVolume&&o.player.setVolume(t),\"local\"===o.type&&(o.$video.volume=t/100))}},{key:\"getVolume\",value:function(t){var e=this;e.player?(\"youtube\"===e.type&&e.player.getVolume&&t(e.player.getVolume()),\"vimeo\"===e.type&&e.player.getVolume&&e.player.getVolume().then(function(e){t(e)}),\"local\"===e.type&&t(100*e.$video.volume)):t(!1)}},{key:\"getMuted\",value:function(t){var e=this;e.player?(\"youtube\"===e.type&&e.player.isMuted&&t(e.player.isMuted()),\"vimeo\"===e.type&&e.player.getVolume&&e.player.getVolume().then(function(e){t(!!e)}),\"local\"===e.type&&t(e.$video.muted)):t(null)}},{key:\"getImageURL\",value:function(t){var o=this;if(o.videoImage)t(o.videoImage);else{if(\"youtube\"===o.type){var e=[\"maxresdefault\",\"sddefault\",\"hqdefault\",\"0\"],i=0,n=new Image;n.onload=function(){120!==(this.naturalWidth||this.width)||i===e.length-1?(o.videoImage=\"https://img.youtube.com/vi/\".concat(o.videoID,\"/\").concat(e[i],\".jpg\"),t(o.videoImage)):(i++,this.src=\"https://img.youtube.com/vi/\".concat(o.videoID,\"/\").concat(e[i],\".jpg\"))},n.src=\"https://img.youtube.com/vi/\".concat(o.videoID,\"/\").concat(e[i],\".jpg\")}if(\"vimeo\"===o.type){var a=new XMLHttpRequest;a.open(\"GET\",\"https://vimeo.com/api/v2/video/\".concat(o.videoID,\".json\"),!0),a.onreadystatechange=function(){if(4===this.readyState&&200<=this.status&&this.status<400){var e=JSON.parse(this.responseText);o.videoImage=e[0].thumbnail_large,t(o.videoImage)}},a.send(),a=null}}}},{key:\"getIframe\",value:function(e){this.getVideo(e)}},{key:\"getVideo\",value:function(p){var u=this;u.$video?p(u.$video):u.onAPIready(function(){var e,t;if(u.$video||((e=document.createElement(\"div\")).style.display=\"none\"),\"youtube\"===u.type){var o,i;u.playerOptions={},u.playerOptions.videoId=u.videoID,u.playerOptions.playerVars={autohide:1,rel:0,autoplay:0,playsinline:1},u.options.showContols||(u.playerOptions.playerVars.iv_load_policy=3,u.playerOptions.playerVars.modestbranding=1,u.playerOptions.playerVars.controls=0,u.playerOptions.playerVars.showinfo=0,u.playerOptions.playerVars.disablekb=1),u.playerOptions.events={onReady:function(t){if(u.options.mute?t.target.mute():u.options.volume&&t.target.setVolume(u.options.volume),u.options.autoplay&&u.play(u.options.startTime),u.fire(\"ready\",t),u.options.loop&&!u.options.endTime){u.options.endTime=u.player.getDuration()-.1}setInterval(function(){u.getVolume(function(e){u.options.volume!==e&&(u.options.volume=e,u.fire(\"volumechange\",t))})},150)},onStateChange:function(e){u.options.loop&&e.data===YT.PlayerState.ENDED&&u.play(u.options.startTime),o||e.data!==YT.PlayerState.PLAYING||(o=1,u.fire(\"started\",e)),e.data===YT.PlayerState.PLAYING&&u.fire(\"play\",e),e.data===YT.PlayerState.PAUSED&&u.fire(\"pause\",e),e.data===YT.PlayerState.ENDED&&u.fire(\"ended\",e),e.data===YT.PlayerState.PLAYING?i=setInterval(function(){u.fire(\"timeupdate\",e),u.options.endTime&&u.player.getCurrentTime()>=u.options.endTime&&(u.options.loop?u.play(u.options.startTime):u.pause())},150):clearInterval(i)}};var n=!u.$video;if(n){var a=document.createElement(\"div\");a.setAttribute(\"id\",u.playerID),e.appendChild(a),document.body.appendChild(e)}u.player=u.player||new window.YT.Player(u.playerID,u.playerOptions),n&&(u.$video=document.getElementById(u.playerID),u.videoWidth=parseInt(u.$video.getAttribute(\"width\"),10)||1280,u.videoHeight=parseInt(u.$video.getAttribute(\"height\"),10)||720)}if(\"vimeo\"===u.type){if(u.playerOptions={id:u.videoID,autopause:0,transparent:0,autoplay:u.options.autoplay?1:0,loop:u.options.loop?1:0,muted:u.options.mute?1:0},u.options.volume&&(u.playerOptions.volume=u.options.volume),u.options.showContols||(u.playerOptions.badge=0,u.playerOptions.byline=0,u.playerOptions.portrait=0,u.playerOptions.title=0),!u.$video){var r=\"\";Object.keys(u.playerOptions).forEach(function(e){\"\"!==r&&(r+=\"&\"),r+=\"\".concat(e,\"=\").concat(encodeURIComponent(u.playerOptions[e]))}),u.$video=document.createElement(\"iframe\"),u.$video.setAttribute(\"id\",u.playerID),u.$video.setAttribute(\"src\",\"https://player.vimeo.com/video/\".concat(u.videoID,\"?\").concat(r)),u.$video.setAttribute(\"frameborder\",\"0\"),u.$video.setAttribute(\"mozallowfullscreen\",\"\"),u.$video.setAttribute(\"allowfullscreen\",\"\"),e.appendChild(u.$video),document.body.appendChild(e)}var l;u.player=u.player||new Vimeo.Player(u.$video,u.playerOptions),u.options.startTime&&u.options.autoplay&&u.player.setCurrentTime(u.options.startTime),u.player.getVideoWidth().then(function(e){u.videoWidth=e||1280}),u.player.getVideoHeight().then(function(e){u.videoHeight=e||720}),u.player.on(\"timeupdate\",function(e){l||(u.fire(\"started\",e),l=1),u.fire(\"timeupdate\",e),u.options.endTime&&u.options.endTime&&e.seconds>=u.options.endTime&&(u.options.loop?u.play(u.options.startTime):u.pause())}),u.player.on(\"play\",function(e){u.fire(\"play\",e),u.options.startTime&&0===e.seconds&&u.play(u.options.startTime)}),u.player.on(\"pause\",function(e){u.fire(\"pause\",e)}),u.player.on(\"ended\",function(e){u.fire(\"ended\",e)}),u.player.on(\"loaded\",function(e){u.fire(\"ready\",e)}),u.player.on(\"volumechange\",function(e){u.fire(\"volumechange\",e)})}\"local\"===u.type&&(u.$video||(u.$video=document.createElement(\"video\"),u.options.showContols&&(u.$video.controls=!0),u.options.mute?u.$video.muted=!0:u.$video.volume&&(u.$video.volume=u.options.volume/100),u.options.loop&&(u.$video.loop=!0),u.$video.setAttribute(\"playsinline\",\"\"),u.$video.setAttribute(\"webkit-playsinline\",\"\"),u.$video.setAttribute(\"id\",u.playerID),e.appendChild(u.$video),document.body.appendChild(e),Object.keys(u.videoID).forEach(function(e){!function(e,t,o){var i=document.createElement(\"source\");i.src=t,i.type=o,e.appendChild(i)}(u.$video,u.videoID[e],\"video/\".concat(e))})),u.player=u.player||u.$video,u.player.addEventListener(\"playing\",function(e){t||u.fire(\"started\",e),t=1}),u.player.addEventListener(\"timeupdate\",function(e){u.fire(\"timeupdate\",e),u.options.endTime&&u.options.endTime&&this.currentTime>=u.options.endTime&&(u.options.loop?u.play(u.options.startTime):u.pause())}),u.player.addEventListener(\"play\",function(e){u.fire(\"play\",e)}),u.player.addEventListener(\"pause\",function(e){u.fire(\"pause\",e)}),u.player.addEventListener(\"ended\",function(e){u.fire(\"ended\",e)}),u.player.addEventListener(\"loadedmetadata\",function(){u.videoWidth=this.videoWidth||1280,u.videoHeight=this.videoHeight||720,u.fire(\"ready\"),u.options.autoplay&&u.play(u.options.startTime)}),u.player.addEventListener(\"volumechange\",function(e){u.getVolume(function(e){u.options.volume=e}),u.fire(\"volumechange\",e)}));p(u.$video)})}},{key:\"init\",value:function(){this.playerID=\"VideoWorker-\".concat(this.ID)}},{key:\"loadAPI\",value:function(){if(!l||!p){var e=\"\";if(\"youtube\"!==this.type||l||(l=1,e=\"https://www.youtube.com/iframe_api\"),\"vimeo\"!==this.type||p||(p=1,e=\"https://player.vimeo.com/api/player.js\"),e){var t=document.createElement(\"script\"),o=document.getElementsByTagName(\"head\")[0];t.src=e,o.appendChild(t),t=o=null}}}},{key:\"onAPIready\",value:function(e){if(\"youtube\"===this.type&&(\"undefined\"!=typeof YT&&0!==YT.loaded||u?\"object\"===(\"undefined\"==typeof YT?\"undefined\":n(YT))&&1===YT.loaded?e():d.done(function(){e()}):(u=1,window.onYouTubeIframeAPIReady=function(){window.onYouTubeIframeAPIReady=null,d.resolve(\"done\"),e()})),\"vimeo\"===this.type)if(\"undefined\"!=typeof Vimeo||s)\"undefined\"!=typeof Vimeo?e():y.done(function(){e()});else{s=1;var t=setInterval(function(){\"undefined\"!=typeof Vimeo&&(clearInterval(t),y.resolve(\"done\"),e())},20)}\"local\"===this.type&&e()}}]),i}()},function(e,t,o){\"use strict\";o.r(t),o.d(t,\"default\",function(){return a});var i=o(8),r=o.n(i),n=o(4),p=o.n(n);function a(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:p.a.jarallax;if(void 0!==e){var t=e.constructor,i=t.prototype.onScroll;t.prototype.onScroll=function(){var o=this;i.apply(o),o.isVideoInserted||!o.video||o.options.videoLazyLoading&&!o.isElementInViewport||o.options.disableVideo()||(o.isVideoInserted=!0,o.video.getVideo(function(e){var t=e.parentNode;o.css(e,{position:o.image.position,top:\"0px\",left:\"0px\",right:\"0px\",bottom:\"0px\",width:\"100%\",height:\"100%\",maxWidth:\"none\",maxHeight:\"none\",margin:0,zIndex:-1}),o.$video=e,o.image.$container.appendChild(e),t.parentNode.removeChild(t)}))};var l=t.prototype.coverImage;t.prototype.coverImage=function(){var e=this,t=l.apply(e),o=!!e.image.$item&&e.image.$item.nodeName;if(t&&e.video&&o&&(\"IFRAME\"===o||\"VIDEO\"===o)){var i=t.image.height,n=i*e.image.width/e.image.height,a=(t.container.width-n)/2,r=t.image.marginTop;t.container.width>n&&(i=(n=t.container.width)*e.image.height/e.image.width,a=0,r+=(t.image.height-i)/2),\"IFRAME\"===o&&(i+=400,r-=200),e.css(e.$video,{width:\"\".concat(n,\"px\"),marginLeft:\"\".concat(a,\"px\"),height:\"\".concat(i,\"px\"),marginTop:\"\".concat(r,\"px\")})}return t};var o=t.prototype.initImg;t.prototype.initImg=function(){var e=this,t=o.apply(e);return e.options.videoSrc||(e.options.videoSrc=e.$item.getAttribute(\"data-jarallax-video\")||null),e.options.videoSrc?(e.defaultInitImgResult=t,!0):t};var n=t.prototype.canInitParallax;t.prototype.canInitParallax=function(){var o=this,e=n.apply(o);if(!o.options.videoSrc)return e;var t=new r.a(o.options.videoSrc,{autoplay:!0,loop:o.options.videoLoop,showContols:!1,startTime:o.options.videoStartTime||0,endTime:o.options.videoEndTime||0,mute:o.options.videoVolume?0:1,volume:o.options.videoVolume||0});if(t.isValid())if(e){if(t.on(\"ready\",function(){if(o.options.videoPlayOnlyVisible){var e=o.onScroll;o.onScroll=function(){e.apply(o),!o.options.videoLoop&&(o.options.videoLoop||o.videoEnded)||(o.isVisible()?t.play():t.pause())}}else t.play()}),t.on(\"started\",function(){o.image.$default_item=o.image.$item,o.image.$item=o.$video,o.image.width=o.video.videoWidth||1280,o.image.height=o.video.videoHeight||720,o.coverImage(),o.clipContainer(),o.onScroll(),o.image.$default_item&&(o.image.$default_item.style.display=\"none\")}),t.on(\"ended\",function(){o.videoEnded=!0,o.options.videoLoop||o.image.$default_item&&(o.image.$item=o.image.$default_item,o.image.$item.style.display=\"block\",o.coverImage(),o.clipContainer(),o.onScroll())}),o.video=t,!o.defaultInitImgResult)return o.image.src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",\"local\"===t.type||(t.getImageURL(function(e){o.image.bgImage='url(\"'.concat(e,'\")'),o.init()}),!1)}else o.defaultInitImgResult||t.getImageURL(function(e){var t=o.$item.getAttribute(\"style\");t&&o.$item.setAttribute(\"data-jarallax-original-styles\",t),o.css(o.$item,{\"background-image\":'url(\"'.concat(e,'\")'),\"background-position\":\"center\",\"background-size\":\"cover\"})});return e};var a=t.prototype.destroy;t.prototype.destroy=function(){var e=this;e.image.$default_item&&(e.image.$item=e.image.$default_item,delete e.image.$default_item),a.apply(e)}}}}]);\n//# sourceMappingURL=jarallax-video.min.js.map\n","\n/**\n * Load required plugin.\n */\nwindow.Lity = require('lity');\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Lity');\n\n  page.initLity = function() {\n\n    $(document).on('click', '[data-provide~=\"lightbox\"]', Lity);\n\n  }\n\n}(jQuery);\n\n\n\n","/*! Lity - v2.4.0 - 2019-08-10\n* http://sorgalla.com/lity/\n* Copyright (c) 2015-2019 Jan Sorgalla; Licensed MIT */\n(function(window, factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], function($) {\n            return factory(window, $);\n        });\n    } else if (typeof module === 'object' && typeof module.exports === 'object') {\n        module.exports = factory(window, require('jquery'));\n    } else {\n        window.lity = factory(window, window.jQuery || window.Zepto);\n    }\n}(typeof window !== \"undefined\" ? window : this, function(window, $) {\n    'use strict';\n\n    var document = window.document;\n\n    var _win = $(window);\n    var _deferred = $.Deferred;\n    var _html = $('html');\n    var _instances = [];\n\n    var _attrAriaHidden = 'aria-hidden';\n    var _dataAriaHidden = 'lity-' + _attrAriaHidden;\n\n    var _focusableElementsSelector = 'a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^=\"-\"])';\n\n    var _defaultOptions = {\n        esc: true,\n        handler: null,\n        handlers: {\n            image: imageHandler,\n            inline: inlineHandler,\n            youtube: youtubeHandler,\n            vimeo: vimeoHandler,\n            googlemaps: googlemapsHandler,\n            facebookvideo: facebookvideoHandler,\n            iframe: iframeHandler\n        },\n        template: '<div class=\"lity\" role=\"dialog\" aria-label=\"Dialog Window (Press escape to close)\" tabindex=\"-1\"><div class=\"lity-wrap\" data-lity-close role=\"document\"><div class=\"lity-loader\" aria-hidden=\"true\">Loading...</div><div class=\"lity-container\"><div class=\"lity-content\"></div><button class=\"lity-close\" type=\"button\" aria-label=\"Close (Press escape to close)\" data-lity-close>&times;</button></div></div></div>'\n    };\n\n    var _imageRegexp = /(^data:image\\/)|(\\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\\?\\S*)?$)/i;\n    var _youtubeRegex = /(youtube(-nocookie)?\\.com|youtu\\.be)\\/(watch\\?v=|v\\/|u\\/|embed\\/?)?([\\w-]{11})(.*)?/i;\n    var _vimeoRegex =  /(vimeo(pro)?.com)\\/(?:[^\\d]+)?(\\d+)\\??(.*)?$/;\n    var _googlemapsRegex = /((maps|www)\\.)?google\\.([^\\/\\?]+)\\/?((maps\\/?)?\\?)(.*)/i;\n    var _facebookvideoRegex = /(facebook\\.com)\\/([a-z0-9_-]*)\\/videos\\/([0-9]*)(.*)?$/i;\n\n    var _transitionEndEvent = (function() {\n        var el = document.createElement('div');\n\n        var transEndEventNames = {\n            WebkitTransition: 'webkitTransitionEnd',\n            MozTransition: 'transitionend',\n            OTransition: 'oTransitionEnd otransitionend',\n            transition: 'transitionend'\n        };\n\n        for (var name in transEndEventNames) {\n            if (el.style[name] !== undefined) {\n                return transEndEventNames[name];\n            }\n        }\n\n        return false;\n    })();\n\n    function transitionEnd(element) {\n        var deferred = _deferred();\n\n        if (!_transitionEndEvent || !element.length) {\n            deferred.resolve();\n        } else {\n            element.one(_transitionEndEvent, deferred.resolve);\n            setTimeout(deferred.resolve, 500);\n        }\n\n        return deferred.promise();\n    }\n\n    function settings(currSettings, key, value) {\n        if (arguments.length === 1) {\n            return $.extend({}, currSettings);\n        }\n\n        if (typeof key === 'string') {\n            if (typeof value === 'undefined') {\n                return typeof currSettings[key] === 'undefined'\n                    ? null\n                    : currSettings[key];\n            }\n\n            currSettings[key] = value;\n        } else {\n            $.extend(currSettings, key);\n        }\n\n        return this;\n    }\n\n    function parseQueryParams(params) {\n        var pairs = decodeURI(params.split('#')[0]).split('&');\n        var obj = {}, p;\n\n        for (var i = 0, n = pairs.length; i < n; i++) {\n            if (!pairs[i]) {\n                continue;\n            }\n\n            p = pairs[i].split('=');\n            obj[p[0]] = p[1];\n        }\n\n        return obj;\n    }\n\n    function appendQueryParams(url, params) {\n        return url + (url.indexOf('?') > -1 ? '&' : '?') + $.param(params);\n    }\n\n    function transferHash(originalUrl, newUrl) {\n        var pos = originalUrl.indexOf('#');\n\n        if (-1 === pos) {\n            return newUrl;\n        }\n\n        if (pos > 0) {\n            originalUrl = originalUrl.substr(pos);\n        }\n\n        return newUrl + originalUrl;\n    }\n\n    function error(msg) {\n        return $('<span class=\"lity-error\"/>').append(msg);\n    }\n\n    function imageHandler(target, instance) {\n        var desc = (instance.opener() && instance.opener().data('lity-desc')) || 'Image with no description';\n        var img = $('<img src=\"' + target + '\" alt=\"' + desc + '\"/>');\n        var deferred = _deferred();\n        var failed = function() {\n            deferred.reject(error('Failed loading image'));\n        };\n\n        img\n            .on('load', function() {\n                if (this.naturalWidth === 0) {\n                    return failed();\n                }\n\n                deferred.resolve(img);\n            })\n            .on('error', failed)\n        ;\n\n        return deferred.promise();\n    }\n\n    imageHandler.test = function(target) {\n        return _imageRegexp.test(target);\n    };\n\n    function inlineHandler(target, instance) {\n        var el, placeholder, hasHideClass;\n\n        try {\n            el = $(target);\n        } catch (e) {\n            return false;\n        }\n\n        if (!el.length) {\n            return false;\n        }\n\n        placeholder = $('<i style=\"display:none !important\"/>');\n        hasHideClass = el.hasClass('lity-hide');\n\n        instance\n            .element()\n            .one('lity:remove', function() {\n                placeholder\n                    .before(el)\n                    .remove()\n                ;\n\n                if (hasHideClass && !el.closest('.lity-content').length) {\n                    el.addClass('lity-hide');\n                }\n            })\n        ;\n\n        return el\n            .removeClass('lity-hide')\n            .after(placeholder)\n        ;\n    }\n\n    function youtubeHandler(target) {\n        var matches = _youtubeRegex.exec(target);\n\n        if (!matches) {\n            return false;\n        }\n\n        return iframeHandler(\n            transferHash(\n                target,\n                appendQueryParams(\n                    'https://www.youtube' + (matches[2] || '') + '.com/embed/' + matches[4],\n                    $.extend(\n                        {\n                            autoplay: 1\n                        },\n                        parseQueryParams(matches[5] || '')\n                    )\n                )\n            )\n        );\n    }\n\n    function vimeoHandler(target) {\n        var matches = _vimeoRegex.exec(target);\n\n        if (!matches) {\n            return false;\n        }\n\n        return iframeHandler(\n            transferHash(\n                target,\n                appendQueryParams(\n                    'https://player.vimeo.com/video/' + matches[3],\n                    $.extend(\n                        {\n                            autoplay: 1\n                        },\n                        parseQueryParams(matches[4] || '')\n                    )\n                )\n            )\n        );\n    }\n\n    function facebookvideoHandler(target) {\n        var matches = _facebookvideoRegex.exec(target);\n\n        if (!matches) {\n            return false;\n        }\n\n        if (0 !== target.indexOf('http')) {\n            target = 'https:' + target;\n        }\n\n        return iframeHandler(\n            transferHash(\n                target,\n                appendQueryParams(\n                    'https://www.facebook.com/plugins/video.php?href=' + target,\n                    $.extend(\n                        {\n                            autoplay: 1\n                        },\n                        parseQueryParams(matches[4] || '')\n                    )\n                )\n            )\n        );\n    }\n\n    function googlemapsHandler(target) {\n        var matches = _googlemapsRegex.exec(target);\n\n        if (!matches) {\n            return false;\n        }\n\n        return iframeHandler(\n            transferHash(\n                target,\n                appendQueryParams(\n                    'https://www.google.' + matches[3] + '/maps?' + matches[6],\n                    {\n                        output: matches[6].indexOf('layer=c') > 0 ? 'svembed' : 'embed'\n                    }\n                )\n            )\n        );\n    }\n\n    function iframeHandler(target) {\n        return '<div class=\"lity-iframe-container\"><iframe frameborder=\"0\" allowfullscreen allow=\"autoplay; fullscreen\" src=\"' + target + '\"/></div>';\n    }\n\n    function winHeight() {\n        return document.documentElement.clientHeight\n            ? document.documentElement.clientHeight\n            : Math.round(_win.height());\n    }\n\n    function keydown(e) {\n        var current = currentInstance();\n\n        if (!current) {\n            return;\n        }\n\n        // ESC key\n        if (e.keyCode === 27 && !!current.options('esc')) {\n            current.close();\n        }\n\n        // TAB key\n        if (e.keyCode === 9) {\n            handleTabKey(e, current);\n        }\n    }\n\n    function handleTabKey(e, instance) {\n        var focusableElements = instance.element().find(_focusableElementsSelector);\n        var focusedIndex = focusableElements.index(document.activeElement);\n\n        if (e.shiftKey && focusedIndex <= 0) {\n            focusableElements.get(focusableElements.length - 1).focus();\n            e.preventDefault();\n        } else if (!e.shiftKey && focusedIndex === focusableElements.length - 1) {\n            focusableElements.get(0).focus();\n            e.preventDefault();\n        }\n    }\n\n    function resize() {\n        $.each(_instances, function(i, instance) {\n            instance.resize();\n        });\n    }\n\n    function registerInstance(instanceToRegister) {\n        if (1 === _instances.unshift(instanceToRegister)) {\n            _html.addClass('lity-active');\n\n            _win\n                .on({\n                    resize: resize,\n                    keydown: keydown\n                })\n            ;\n        }\n\n        $('body > *').not(instanceToRegister.element())\n            .addClass('lity-hidden')\n            .each(function() {\n                var el = $(this);\n\n                if (undefined !== el.data(_dataAriaHidden)) {\n                    return;\n                }\n\n                el.data(_dataAriaHidden, el.attr(_attrAriaHidden) || null);\n            })\n            .attr(_attrAriaHidden, 'true')\n        ;\n    }\n\n    function removeInstance(instanceToRemove) {\n        var show;\n\n        instanceToRemove\n            .element()\n            .attr(_attrAriaHidden, 'true')\n        ;\n\n        if (1 === _instances.length) {\n            _html.removeClass('lity-active');\n\n            _win\n                .off({\n                    resize: resize,\n                    keydown: keydown\n                })\n            ;\n        }\n\n        _instances = $.grep(_instances, function(instance) {\n            return instanceToRemove !== instance;\n        });\n\n        if (!!_instances.length) {\n            show = _instances[0].element();\n        } else {\n            show = $('.lity-hidden');\n        }\n\n        show\n            .removeClass('lity-hidden')\n            .each(function() {\n                var el = $(this), oldAttr = el.data(_dataAriaHidden);\n\n                if (!oldAttr) {\n                    el.removeAttr(_attrAriaHidden);\n                } else {\n                    el.attr(_attrAriaHidden, oldAttr);\n                }\n\n                el.removeData(_dataAriaHidden);\n            })\n        ;\n    }\n\n    function currentInstance() {\n        if (0 === _instances.length) {\n            return null;\n        }\n\n        return _instances[0];\n    }\n\n    function factory(target, instance, handlers, preferredHandler) {\n        var handler = 'inline', content;\n\n        var currentHandlers = $.extend({}, handlers);\n\n        if (preferredHandler && currentHandlers[preferredHandler]) {\n            content = currentHandlers[preferredHandler](target, instance);\n            handler = preferredHandler;\n        } else {\n            // Run inline and iframe handlers after all other handlers\n            $.each(['inline', 'iframe'], function(i, name) {\n                delete currentHandlers[name];\n\n                currentHandlers[name] = handlers[name];\n            });\n\n            $.each(currentHandlers, function(name, currentHandler) {\n                // Handler might be \"removed\" by setting callback to null\n                if (!currentHandler) {\n                    return true;\n                }\n\n                if (\n                    currentHandler.test &&\n                    !currentHandler.test(target, instance)\n                ) {\n                    return true;\n                }\n\n                content = currentHandler(target, instance);\n\n                if (false !== content) {\n                    handler = name;\n                    return false;\n                }\n            });\n        }\n\n        return {handler: handler, content: content || ''};\n    }\n\n    function Lity(target, options, opener, activeElement) {\n        var self = this;\n        var result;\n        var isReady = false;\n        var isClosed = false;\n        var element;\n        var content;\n\n        options = $.extend(\n            {},\n            _defaultOptions,\n            options\n        );\n\n        element = $(options.template);\n\n        // -- API --\n\n        self.element = function() {\n            return element;\n        };\n\n        self.opener = function() {\n            return opener;\n        };\n\n        self.options  = $.proxy(settings, self, options);\n        self.handlers = $.proxy(settings, self, options.handlers);\n\n        self.resize = function() {\n            if (!isReady || isClosed) {\n                return;\n            }\n\n            content\n                .css('max-height', winHeight() + 'px')\n                .trigger('lity:resize', [self])\n            ;\n        };\n\n        self.close = function() {\n            if (!isReady || isClosed) {\n                return;\n            }\n\n            isClosed = true;\n\n            removeInstance(self);\n\n            var deferred = _deferred();\n\n            // We return focus only if the current focus is inside this instance\n            if (\n                activeElement &&\n                (\n                    document.activeElement === element[0] ||\n                    $.contains(element[0], document.activeElement)\n                )\n            ) {\n                try {\n                    activeElement.focus();\n                } catch (e) {\n                    // Ignore exceptions, eg. for SVG elements which can't be\n                    // focused in IE11\n                }\n            }\n\n            content.trigger('lity:close', [self]);\n\n            element\n                .removeClass('lity-opened')\n                .addClass('lity-closed')\n            ;\n\n            transitionEnd(content.add(element))\n                .always(function() {\n                    content.trigger('lity:remove', [self]);\n                    element.remove();\n                    element = undefined;\n                    deferred.resolve();\n                })\n            ;\n\n            return deferred.promise();\n        };\n\n        // -- Initialization --\n\n        result = factory(target, self, options.handlers, options.handler);\n\n        element\n            .attr(_attrAriaHidden, 'false')\n            .addClass('lity-loading lity-opened lity-' + result.handler)\n            .appendTo('body')\n            .focus()\n            .on('click', '[data-lity-close]', function(e) {\n                if ($(e.target).is('[data-lity-close]')) {\n                    self.close();\n                }\n            })\n            .trigger('lity:open', [self])\n        ;\n\n        registerInstance(self);\n\n        $.when(result.content)\n            .always(ready)\n        ;\n\n        function ready(result) {\n            content = $(result)\n                .css('max-height', winHeight() + 'px')\n            ;\n\n            element\n                .find('.lity-loader')\n                .each(function() {\n                    var loader = $(this);\n\n                    transitionEnd(loader)\n                        .always(function() {\n                            loader.remove();\n                        })\n                    ;\n                })\n            ;\n\n            element\n                .removeClass('lity-loading')\n                .find('.lity-content')\n                .empty()\n                .append(content)\n            ;\n\n            isReady = true;\n\n            content\n                .trigger('lity:ready', [self])\n            ;\n        }\n    }\n\n    function lity(target, options, opener) {\n        if (!target.preventDefault) {\n            opener = $(opener);\n        } else {\n            target.preventDefault();\n            opener = $(this);\n            target = opener.data('lity-target') || opener.attr('href') || opener.attr('src');\n        }\n\n        var instance = new Lity(\n            target,\n            $.extend(\n                {},\n                opener.data('lity-options') || opener.data('lity'),\n                options\n            ),\n            opener,\n            document.activeElement\n        );\n\n        if (!target.preventDefault) {\n            return instance;\n        }\n    }\n\n    lity.version  = '2.4.0';\n    lity.options  = $.proxy(settings, lity, _defaultOptions);\n    lity.handlers = $.proxy(settings, lity, _defaultOptions.handlers);\n    lity.current  = currentInstance;\n\n    $(document).on('click.lity', '[data-lity]', lity);\n\n    return lity;\n}));\n","/**\n * Load required plugin.\n */\nrequire('jquery.photoswipe/dist/jquery.photoswipe-global.js');\n\n/**\n * Configure the plugin.\n */\n\n+(function($) {\n  page.registerVendor('PhotoSwipe');\n\n  page.initPhotoSwipe = function() {\n    $('[data-provide=\"photoswipe\"]').each(function() {\n      var tag = $(this),\n        selector = tag.dataAttr('photoswipe-selector', '.gallery-item');\n\n      var options = {\n        closeEl: true,\n      };\n      options = $.extend(options, page.getDataOptions(tag));\n\n      $(tag).photoSwipe(selector, options);\n    });\n  };\n})(jQuery);\n","(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n/*! PhotoSwipe - v4.1.1 - 2015-12-24\n* http://photoswipe.com\n* Copyright (c) 2015 Dmitry Semenov; */\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipe = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\tvar PhotoSwipe = function(template, UiClass, items, options){\n\n/*>>framework-bridge*/\n/**\n *\n * Set of generic functions used by gallery.\n * \n * You're free to modify anything here as long as functionality is kept.\n * \n */\nvar framework = {\n\tfeatures: null,\n\tbind: function(target, type, listener, unbind) {\n\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n\t\ttype = type.split(' ');\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tif(type[i]) {\n\t\t\t\ttarget[methodName]( type[i], listener, false);\n\t\t\t}\n\t\t}\n\t},\n\tisArray: function(obj) {\n\t\treturn (obj instanceof Array);\n\t},\n\tcreateEl: function(classes, tag) {\n\t\tvar el = document.createElement(tag || 'div');\n\t\tif(classes) {\n\t\t\tel.className = classes;\n\t\t}\n\t\treturn el;\n\t},\n\tgetScrollY: function() {\n\t\tvar yOffset = window.pageYOffset;\n\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n\t},\n\tunbind: function(target, type, listener) {\n\t\tframework.bind(target,type,listener,true);\n\t},\n\tremoveClass: function(el, className) {\n\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); \n\t},\n\taddClass: function(el, className) {\n\t\tif( !framework.hasClass(el,className) ) {\n\t\t\tel.className += (el.className ? ' ' : '') + className;\n\t\t}\n\t},\n\thasClass: function(el, className) {\n\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n\t},\n\tgetChildByClass: function(parentEl, childClassName) {\n\t\tvar node = parentEl.firstChild;\n\t\twhile(node) {\n\t\t\tif( framework.hasClass(node, childClassName) ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t},\n\tarraySearch: function(array, value, key) {\n\t\tvar i = array.length;\n\t\twhile(i--) {\n\t\t\tif(array[i][key] === value) {\n\t\t\t\treturn i;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t},\n\textend: function(o1, o2, preventOverwrite) {\n\t\tfor (var prop in o2) {\n\t\t\tif (o2.hasOwnProperty(prop)) {\n\t\t\t\tif(preventOverwrite && o1.hasOwnProperty(prop)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\to1[prop] = o2[prop];\n\t\t\t}\n\t\t}\n\t},\n\teasing: {\n\t\tsine: {\n\t\t\tout: function(k) {\n\t\t\t\treturn Math.sin(k * (Math.PI / 2));\n\t\t\t},\n\t\t\tinOut: function(k) {\n\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\n\t\t\t}\n\t\t},\n\t\tcubic: {\n\t\t\tout: function(k) {\n\t\t\t\treturn --k * k * k + 1;\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n\t},\n\n\t/**\n\t * \n\t * @return {object}\n\t * \n\t * {\n\t *  raf : request animation frame function\n\t *  caf : cancel animation frame function\n\t *  transfrom : transform property key (with vendor), or null if not supported\n\t *  oldIE : IE8 or below\n\t * }\n\t * \n\t */\n\tdetectFeatures: function() {\n\t\tif(framework.features) {\n\t\t\treturn framework.features;\n\t\t}\n\t\tvar helperEl = framework.createEl(),\n\t\t\thelperStyle = helperEl.style,\n\t\t\tvendor = '',\n\t\t\tfeatures = {};\n\n\t\t// IE8 and below\n\t\tfeatures.oldIE = document.all && !document.addEventListener;\n\n\t\tfeatures.touch = 'ontouchstart' in window;\n\n\t\tif(window.requestAnimationFrame) {\n\t\t\tfeatures.raf = window.requestAnimationFrame;\n\t\t\tfeatures.caf = window.cancelAnimationFrame;\n\t\t}\n\n\t\tfeatures.pointerEvent = navigator.pointerEnabled || navigator.msPointerEnabled;\n\n\t\t// fix false-positive detection of old Android in new IE\n\t\t// (IE11 ua string contains \"Android 4.0\")\n\t\t\n\t\tif(!features.pointerEvent) { \n\n\t\t\tvar ua = navigator.userAgent;\n\n\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\n\t\t\t// http://stackoverflow.com/a/14223920\n\t\t\t// \n\t\t\t// This detection is made because of buggy top/bottom toolbars\n\t\t\t// that don't trigger window.resize event.\n\t\t\t// For more info refer to _isFixedPosition variable in core.js\n\n\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\n\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\t\t\tif(v && v.length > 0) {\n\t\t\t\t\tv = parseInt(v[1], 10);\n\t\t\t\t\tif(v >= 1 && v < 8 ) {\n\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect old Android (before KitKat)\n\t\t\t// due to bugs related to position:fixed\n\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\t\t\t\n\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\n\t\t\tvar androidversion =  match ? match[1] : 0;\n\t\t\tandroidversion = parseFloat(androidversion);\n\t\t\tif(androidversion >= 1 ) {\n\t\t\t\tif(androidversion < 4.4) {\n\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\n\t\t\t\t}\n\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\n\t\t\t}\t\n\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n\t\t}\n\t\t\n\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\n\t\t\tvendors = ['', 'webkit','Moz','ms','O'],\n\t\t\tstyleCheckItem,\n\t\t\tstyleName;\n\n\t\tfor(var i = 0; i < 4; i++) {\n\t\t\tvendor = vendors[i];\n\n\t\t\tfor(var a = 0; a < 3; a++) {\n\t\t\t\tstyleCheckItem = styleChecks[a];\n\n\t\t\t\t// uppercase first letter of property name, if vendor is present\n\t\t\t\tstyleName = vendor + (vendor ? \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) : \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem);\n\t\t\t\n\t\t\t\tif(!features[styleCheckItem] && styleName in helperStyle ) {\n\t\t\t\t\tfeatures[styleCheckItem] = styleName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(vendor && !features.raf) {\n\t\t\t\tvendor = vendor.toLowerCase();\n\t\t\t\tfeatures.raf = window[vendor+'RequestAnimationFrame'];\n\t\t\t\tif(features.raf) {\n\t\t\t\t\tfeatures.caf = window[vendor+'CancelAnimationFrame'] || \n\t\t\t\t\t\t\t\t\twindow[vendor+'CancelRequestAnimationFrame'];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(!features.raf) {\n\t\t\tvar lastTime = 0;\n\t\t\tfeatures.raf = function(fn) {\n\t\t\t\tvar currTime = new Date().getTime();\n\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\t\t\tvar id = window.setTimeout(function() { fn(currTime + timeToCall); }, timeToCall);\n\t\t\t\tlastTime = currTime + timeToCall;\n\t\t\t\treturn id;\n\t\t\t};\n\t\t\tfeatures.caf = function(id) { clearTimeout(id); };\n\t\t}\n\n\t\t// Detect SVG support\n\t\tfeatures.svg = !!document.createElementNS && \n\t\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n\t\tframework.features = features;\n\n\t\treturn features;\n\t}\n};\n\nframework.detectFeatures();\n\n// Override addEventListener for old versions of IE\nif(framework.features.oldIE) {\n\n\tframework.bind = function(target, type, listener, unbind) {\n\t\t\n\t\ttype = type.split(' ');\n\n\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\n\t\t\tevName,\n\t\t\t_handleEv = function() {\n\t\t\t\tlistener.handleEvent.call(listener);\n\t\t\t};\n\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tevName = type[i];\n\t\t\tif(evName) {\n\n\t\t\t\tif(typeof listener === 'object' && listener.handleEvent) {\n\t\t\t\t\tif(!unbind) {\n\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!listener['oldIE' + evName]) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener['oldIE' + evName]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t};\n\t\n}\n\n/*>>framework-bridge*/\n\n/*>>core*/\n//function(template, UiClass, items, options)\n\nvar self = this;\n\n/**\n * Static vars, don't change unless you know what you're doing.\n */\nvar DOUBLE_TAP_RADIUS = 25, \n\tNUM_HOLDERS = 3;\n\n/**\n * Options\n */\nvar _options = {\n\tallowPanToNext:true,\n\tspacing: 0.12,\n\tbgOpacity: 1,\n\tmouseUsed: false,\n\tloop: true,\n\tpinchToClose: true,\n\tcloseOnScroll: true,\n\tcloseOnVerticalDrag: true,\n\tverticalDragRange: 0.75,\n\thideAnimationDuration: 333,\n\tshowAnimationDuration: 333,\n\tshowHideOpacity: false,\n\tfocus: true,\n\tescKey: true,\n\tarrowKeys: true,\n\tmainScrollEndFriction: 0.35,\n\tpanEndFriction: 0.35,\n\tisClickableElement: function(el) {\n        return el.tagName === 'A';\n    },\n    getDoubleTapZoom: function(isMouseClick, item) {\n    \tif(isMouseClick) {\n    \t\treturn 1;\n    \t} else {\n    \t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\n    \t}\n    },\n    maxSpreadZoom: 1.33,\n\tmodal: true,\n\n\t// not fully implemented yet\n\tscaleMode: 'fit' // TODO\n};\nframework.extend(_options, options);\n\n\n/**\n * Private helper variables & functions\n */\n\nvar _getEmptyPoint = function() { \n\t\treturn {x:0,y:0}; \n\t};\n\nvar _isOpen,\n\t_isDestroying,\n\t_closedByScroll,\n\t_currentItemIndex,\n\t_containerStyle,\n\t_containerShiftIndex,\n\t_currPanDist = _getEmptyPoint(),\n\t_startPanOffset = _getEmptyPoint(),\n\t_panOffset = _getEmptyPoint(),\n\t_upMoveEvents, // drag move, drag end & drag cancel events array\n\t_downEvents, // drag start events array\n\t_globalEventHandlers,\n\t_viewportSize = {},\n\t_currZoomLevel,\n\t_startZoomLevel,\n\t_translatePrefix,\n\t_translateSufix,\n\t_updateSizeInterval,\n\t_itemsNeedUpdate,\n\t_currPositionIndex = 0,\n\t_offset = {},\n\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\n\t_itemHolders,\n\t_prevItemIndex,\n\t_indexDiff = 0, // difference of indexes since last content update\n\t_dragStartEvent,\n\t_dragMoveEvent,\n\t_dragEndEvent,\n\t_dragCancelEvent,\n\t_transformKey,\n\t_pointerEventEnabled,\n\t_isFixedPosition = true,\n\t_likelyTouchDevice,\n\t_modules = [],\n\t_requestAF,\n\t_cancelAF,\n\t_initalClassName,\n\t_initalWindowScrollY,\n\t_oldIE,\n\t_currentWindowScrollY,\n\t_features,\n\t_windowVisibleSize = {},\n\t_renderMaxResolution = false,\n\n\t// Registers PhotoSWipe module (History, Controller ...)\n\t_registerModule = function(name, module) {\n\t\tframework.extend(self, module.publicMethods);\n\t\t_modules.push(name);\n\t},\n\n\t_getLoopedId = function(index) {\n\t\tvar numSlides = _getNumItems();\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t\n\t// Micro bind/trigger\n\t_listeners = {},\n\t_listen = function(name, fn) {\n\t\tif(!_listeners[name]) {\n\t\t\t_listeners[name] = [];\n\t\t}\n\t\treturn _listeners[name].push(fn);\n\t},\n\t_shout = function(name) {\n\t\tvar listeners = _listeners[name];\n\n\t\tif(listeners) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\targs.shift();\n\n\t\t\tfor(var i = 0; i < listeners.length; i++) {\n\t\t\t\tlisteners[i].apply(self, args);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getCurrentTime = function() {\n\t\treturn new Date().getTime();\n\t},\n\t_applyBgOpacity = function(opacity) {\n\t\t_bgOpacity = opacity;\n\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\n\t},\n\n\t_applyZoomTransform = function(styleObj,x,y,zoom,item) {\n\t\tif(!_renderMaxResolution || (item && item !== self.currItem) ) {\n\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\t\n\t\t}\n\t\t\t\n\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n\t},\n\t_applyCurrentZoomPan = function( allowRenderResolution ) {\n\t\tif(_currZoomElementStyle) {\n\n\t\t\tif(allowRenderResolution) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\tif(!_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\n\t\t\t\t\t\t_renderMaxResolution = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem);\n\t\t\t\t\t\t_renderMaxResolution = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n\t\t}\n\t},\n\t_applyZoomPanToItem = function(item) {\n\t\tif(item.container) {\n\n\t\t\t_applyZoomTransform(item.container.style, \n\t\t\t\t\t\t\t\titem.initialPosition.x, \n\t\t\t\t\t\t\t\titem.initialPosition.y, \n\t\t\t\t\t\t\t\titem.initialZoomLevel,\n\t\t\t\t\t\t\t\titem);\n\t\t}\n\t},\n\t_setTranslateX = function(x, elStyle) {\n\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n\t},\n\t_moveMainScroll = function(x, dragging) {\n\n\t\tif(!_options.loop && dragging) {\n\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\n\n\t\t\tif( (newSlideIndexOffset < 0 && delta > 0) || \n\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {\n\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n\t\t\t} \n\t\t}\n\t\t\n\t\t_mainScrollPos.x = x;\n\t\t_setTranslateX(x, _containerStyle);\n\t},\n\t_calculatePanOffset = function(axis, zoomLevel) {\n\t\tvar m = _midZoomPoint[axis] - _offset[axis];\n\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * ( zoomLevel / _startZoomLevel );\n\t},\n\t\n\t_equalizePoints = function(p1, p2) {\n\t\tp1.x = p2.x;\n\t\tp1.y = p2.y;\n\t\tif(p2.id) {\n\t\t\tp1.id = p2.id;\n\t\t}\n\t},\n\t_roundPoint = function(p) {\n\t\tp.x = Math.round(p.x);\n\t\tp.y = Math.round(p.y);\n\t},\n\n\t_mouseMoveTimeout = null,\n\t_onFirstMouseMove = function() {\n\t\t// Wait until mouse move event is fired at least twice during 100ms\n\t\t// We do this, because some mobile browsers trigger it on touchstart\n\t\tif(_mouseMoveTimeout ) { \n\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\t\t\tframework.addClass(template, 'pswp--has_mouse');\n\t\t\t_options.mouseUsed = true;\n\t\t\t_shout('mouseUsed');\n\t\t}\n\t\t_mouseMoveTimeout = setTimeout(function() {\n\t\t\t_mouseMoveTimeout = null;\n\t\t}, 100);\n\t},\n\n\t_bindEvents = function() {\n\t\tframework.bind(document, 'keydown', self);\n\n\t\tif(_features.transform) {\n\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\n\t\t\tframework.bind(self.scrollWrap, 'click', self);\n\t\t}\n\t\t\n\n\t\tif(!_options.mouseUsed) {\n\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\n\t\t}\n\n\t\tframework.bind(window, 'resize scroll', self);\n\n\t\t_shout('bindEvents');\n\t},\n\n\t_unbindEvents = function() {\n\t\tframework.unbind(window, 'resize', self);\n\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n\t\tframework.unbind(document, 'keydown', self);\n\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n\t\tif(_features.transform) {\n\t\t\tframework.unbind(self.scrollWrap, 'click', self);\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\t\t}\n\n\t\t_shout('unbindEvents');\n\t},\n\t\n\t_calculatePanBounds = function(zoomLevel, update) {\n\t\tvar bounds = _calculateItemSize( self.currItem, _viewportSize, zoomLevel );\n\t\tif(update) {\n\t\t\t_currPanBounds = bounds;\n\t\t}\n\t\treturn bounds;\n\t},\n\t\n\t_getMinZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.initialZoomLevel;\n\t},\n\t_getMaxZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\n\t},\n\n\t// Return true if offset is out of the bounds\n\t_modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel) {\n\t\tif(destZoomLevel === self.currItem.initialZoomLevel) {\n\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\n\t\t\treturn true;\n\t\t} else {\n\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel); \n\n\t\t\tif(destPanOffset[axis] > destPanBounds.min[axis]) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\n\t\t\t\treturn true;\n\t\t\t} else if(destPanOffset[axis] < destPanBounds.max[axis] ) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t_setupTransforms = function() {\n\n\t\tif(_transformKey) {\n\t\t\t// setup 3d transforms\n\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\n\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\t\n\t\t\treturn;\n\t\t}\n\n\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\n\t\t// (so they use left/top/width/height, instead of CSS transform)\n\t\n\t\t_transformKey = 'left';\n\t\tframework.addClass(template, 'pswp--ie');\n\n\t\t_setTranslateX = function(x, elStyle) {\n\t\t\telStyle.left = x + 'px';\n\t\t};\n\t\t_applyZoomPanToItem = function(item) {\n\n\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\ts = item.container.style,\n\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\th = zoomRatio * item.h;\n\n\t\t\ts.width = w + 'px';\n\t\t\ts.height = h + 'px';\n\t\t\ts.left = item.initialPosition.x + 'px';\n\t\t\ts.top = item.initialPosition.y + 'px';\n\n\t\t};\n\t\t_applyCurrentZoomPan = function() {\n\t\t\tif(_currZoomElementStyle) {\n\n\t\t\t\tvar s = _currZoomElementStyle,\n\t\t\t\t\titem = self.currItem,\n\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\t\th = zoomRatio * item.h;\n\n\t\t\t\ts.width = w + 'px';\n\t\t\t\ts.height = h + 'px';\n\n\n\t\t\t\ts.left = _panOffset.x + 'px';\n\t\t\t\ts.top = _panOffset.y + 'px';\n\t\t\t}\n\t\t\t\n\t\t};\n\t},\n\n\t_onKeyDown = function(e) {\n\t\tvar keydownAction = '';\n\t\tif(_options.escKey && e.keyCode === 27) { \n\t\t\tkeydownAction = 'close';\n\t\t} else if(_options.arrowKeys) {\n\t\t\tif(e.keyCode === 37) {\n\t\t\t\tkeydownAction = 'prev';\n\t\t\t} else if(e.keyCode === 39) { \n\t\t\t\tkeydownAction = 'next';\n\t\t\t}\n\t\t}\n\n\t\tif(keydownAction) {\n\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\n\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n\t\t\tif( !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey ) {\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\te.returnValue = false;\n\t\t\t\t} \n\t\t\t\tself[keydownAction]();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onGlobalClick = function(e) {\n\t\tif(!e) {\n\t\t\treturn;\n\t\t}\n\n\t\t// don't allow click event to pass through when triggering after drag or some other gesture\n\t\tif(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\n\t_updatePageScrollOffset = function() {\n\t\tself.setScrollOffset(0, framework.getScrollY());\t\t\n\t};\n\t\n\n\n\t\n\n\n\n// Micro animation engine\nvar _animations = {},\n\t_numAnimations = 0,\n\t_stopAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\tif(_animations[name].raf) {\n\t\t\t\t_cancelAF( _animations[name].raf );\n\t\t\t}\n\t\t\t_numAnimations--;\n\t\t\tdelete _animations[name];\n\t\t}\n\t},\n\t_registerStartAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\t_stopAnimation(name);\n\t\t}\n\t\tif(!_animations[name]) {\n\t\t\t_numAnimations++;\n\t\t\t_animations[name] = {};\n\t\t}\n\t},\n\t_stopAllAnimations = function() {\n\t\tfor (var prop in _animations) {\n\n\t\t\tif( _animations.hasOwnProperty( prop ) ) {\n\t\t\t\t_stopAnimation(prop);\n\t\t\t} \n\t\t\t\n\t\t}\n\t},\n\t_animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete) {\n\t\tvar startAnimTime = _getCurrentTime(), t;\n\t\t_registerStartAnimation(name);\n\n\t\tvar animloop = function(){\n\t\t\tif ( _animations[name] ) {\n\t\t\t\t\n\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\n\t\t\t\t//b - beginning (start prop)\n\t\t\t\t//d - anim duration\n\n\t\t\t\tif ( t >= d ) {\n\t\t\t\t\t_stopAnimation(name);\n\t\t\t\t\tonUpdate(endProp);\n\t\t\t\t\tif(onComplete) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdate( (endProp - b) * easingFn(t/d) + b );\n\n\t\t\t\t_animations[name].raf = _requestAF(animloop);\n\t\t\t}\n\t\t};\n\t\tanimloop();\n\t};\n\t\n\n\nvar publicMethods = {\n\n\t// make a few local variables and functions public\n\tshout: _shout,\n\tlisten: _listen,\n\tviewportSize: _viewportSize,\n\toptions: _options,\n\n\tisMainScrollAnimating: function() {\n\t\treturn _mainScrollAnimating;\n\t},\n\tgetZoomLevel: function() {\n\t\treturn _currZoomLevel;\n\t},\n\tgetCurrentIndex: function() {\n\t\treturn _currentItemIndex;\n\t},\n\tisDragging: function() {\n\t\treturn _isDragging;\n\t},\t\n\tisZooming: function() {\n\t\treturn _isZooming;\n\t},\n\tsetScrollOffset: function(x,y) {\n\t\t_offset.x = x;\n\t\t_currentWindowScrollY = _offset.y = y;\n\t\t_shout('updateScrollOffset', _offset);\n\t},\n\tapplyZoomPan: function(zoomLevel,panX,panY,allowRenderResolution) {\n\t\t_panOffset.x = panX;\n\t\t_panOffset.y = panY;\n\t\t_currZoomLevel = zoomLevel;\n\t\t_applyCurrentZoomPan( allowRenderResolution );\n\t},\n\n\tinit: function() {\n\n\t\tif(_isOpen || _isDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i;\n\n\t\tself.framework = framework; // basic functionality\n\t\tself.template = template; // root DOM element of PhotoSwipe\n\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\n\n\t\t_initalClassName = template.className;\n\t\t_isOpen = true;\n\t\t\t\t\n\t\t_features = framework.detectFeatures();\n\t\t_requestAF = _features.raf;\n\t\t_cancelAF = _features.caf;\n\t\t_transformKey = _features.transform;\n\t\t_oldIE = _features.oldIE;\n\t\t\n\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n\t\t_containerStyle = self.container.style; // for fast access\n\n\t\t// Objects that hold slides (there are only 3 in DOM)\n\t\tself.itemHolders = _itemHolders = [\n\t\t\t{el:self.container.children[0] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[1] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[2] , wrap:0, index: -1}\n\t\t];\n\n\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n\t\t_setupTransforms();\n\n\t\t// Setup global events\n\t\t_globalEventHandlers = {\n\t\t\tresize: self.updateSize,\n\t\t\tscroll: _updatePageScrollOffset,\n\t\t\tkeydown: _onKeyDown,\n\t\t\tclick: _onGlobalClick\n\t\t};\n\n\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \n\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n\t\tif(!_features.animationName || !_features.transform || oldPhone) {\n\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\n\t\t}\n\n\t\t// init modules\n\t\tfor(i = 0; i < _modules.length; i++) {\n\t\t\tself['init' + _modules[i]]();\n\t\t}\n\t\t\n\t\t// init\n\t\tif(UiClass) {\n\t\t\tvar ui = self.ui = new UiClass(self, framework);\n\t\t\tui.init();\n\t\t}\n\n\t\t_shout('firstUpdate');\n\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\n\t\t// validate index\n\t\tif( isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems() ) {\n\t\t\t_currentItemIndex = 0;\n\t\t}\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\n\t\t\n\t\tif(_features.isOldIOSPhone || _features.isOldAndroid) {\n\t\t\t_isFixedPosition = false;\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'false');\n\t\tif(_options.modal) {\n\t\t\tif(!_isFixedPosition) {\n\t\t\t\ttemplate.style.position = 'absolute';\n\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\n\t\t\t} else {\n\t\t\t\ttemplate.style.position = 'fixed';\n\t\t\t}\n\t\t}\n\n\t\tif(_currentWindowScrollY === undefined) {\n\t\t\t_shout('initialLayout');\n\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n\t\t}\n\t\t\n\t\t// add classes to root element of PhotoSwipe\n\t\tvar rootClasses = 'pswp--open ';\n\t\tif(_options.mainClass) {\n\t\t\trootClasses += _options.mainClass + ' ';\n\t\t}\n\t\tif(_options.showHideOpacity) {\n\t\t\trootClasses += 'pswp--animate_opacity ';\n\t\t}\n\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\n\t\trootClasses += _features.svg ? ' pswp--svg' : '';\n\t\tframework.addClass(template, rootClasses);\n\n\t\tself.updateSize();\n\n\t\t// initial update\n\t\t_containerShiftIndex = -1;\n\t\t_indexDiff = null;\n\t\tfor(i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n\t\t}\n\n\t\tif(!_oldIE) {\n\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n\t\t}\t\n\n\t\t_listen('initialZoomInEnd', function() {\n\t\t\tself.setContent(_itemHolders[0], _currentItemIndex-1);\n\t\t\tself.setContent(_itemHolders[2], _currentItemIndex+1);\n\n\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n\t\t\tif(_options.focus) {\n\t\t\t\t// focus causes layout, \n\t\t\t\t// which causes lag during the animation, \n\t\t\t\t// that's why we delay it untill the initial zoom transition ends\n\t\t\t\ttemplate.focus();\n\t\t\t}\n\t\t\t \n\n\t\t\t_bindEvents();\n\t\t});\n\n\t\t// set content for center slide (first time)\n\t\tself.setContent(_itemHolders[1], _currentItemIndex);\n\t\t\n\t\tself.updateCurrItem();\n\n\t\t_shout('afterInit');\n\n\t\tif(!_isFixedPosition) {\n\n\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\n\t\t\t// \n\t\t\t// This is done to detect when Safari top & bottom bars appear, \n\t\t\t// as this action doesn't trigger any events (like resize). \n\t\t\t// \n\t\t\t// On iOS8 they fixed this.\n\t\t\t// \n\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\t\t\t\n\t\t\t_updateSizeInterval = setInterval(function() {\n\t\t\t\tif(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel)  ) {\n\t\t\t\t\tself.updateSize();\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}\n\n\t\tframework.addClass(template, 'pswp--visible');\n\t},\n\n\t// Close the gallery, then destroy it\n\tclose: function() {\n\t\tif(!_isOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\t_isOpen = false;\n\t\t_isDestroying = true;\n\t\t_shout('close');\n\t\t_unbindEvents();\n\n\t\t_showOrHide(self.currItem, null, true, self.destroy);\n\t},\n\n\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n\tdestroy: function() {\n\t\t_shout('destroy');\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'true');\n\t\ttemplate.className = _initalClassName;\n\n\t\tif(_updateSizeInterval) {\n\t\t\tclearInterval(_updateSizeInterval);\n\t\t}\n\n\t\tframework.unbind(self.scrollWrap, _downEvents, self);\n\n\t\t// we unbind scroll event at the end, as closing animation may depend on it\n\t\tframework.unbind(window, 'scroll', self);\n\n\t\t_stopDragUpdateLoop();\n\n\t\t_stopAllAnimations();\n\n\t\t_listeners = null;\n\t},\n\n\t/**\n\t * Pan image to position\n\t * @param {Number} x     \n\t * @param {Number} y     \n\t * @param {Boolean} force Will ignore bounds if set to true.\n\t */\n\tpanTo: function(x,y,force) {\n\t\tif(!force) {\n\t\t\tif(x > _currPanBounds.min.x) {\n\t\t\t\tx = _currPanBounds.min.x;\n\t\t\t} else if(x < _currPanBounds.max.x) {\n\t\t\t\tx = _currPanBounds.max.x;\n\t\t\t}\n\n\t\t\tif(y > _currPanBounds.min.y) {\n\t\t\t\ty = _currPanBounds.min.y;\n\t\t\t} else if(y < _currPanBounds.max.y) {\n\t\t\t\ty = _currPanBounds.max.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\t_panOffset.x = x;\n\t\t_panOffset.y = y;\n\t\t_applyCurrentZoomPan();\n\t},\n\t\n\thandleEvent: function (e) {\n\t\te = e || window.event;\n\t\tif(_globalEventHandlers[e.type]) {\n\t\t\t_globalEventHandlers[e.type](e);\n\t\t}\n\t},\n\n\n\tgoTo: function(index) {\n\n\t\tindex = _getLoopedId(index);\n\n\t\tvar diff = index - _currentItemIndex;\n\t\t_indexDiff = diff;\n\n\t\t_currentItemIndex = index;\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_currPositionIndex -= diff;\n\t\t\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\t\t\n\n\t\t_stopAllAnimations();\n\t\t_mainScrollAnimating = false;\n\n\t\tself.updateCurrItem();\n\t},\n\tnext: function() {\n\t\tself.goTo( _currentItemIndex + 1);\n\t},\n\tprev: function() {\n\t\tself.goTo( _currentItemIndex - 1);\n\t},\n\n\t// update current zoom/pan objects\n\tupdateCurrZoomItem: function(emulateSetContent) {\n\t\tif(emulateSetContent) {\n\t\t\t_shout('beforeChange', 0);\n\t\t}\n\n\t\t// itemHolder[1] is middle (current) item\n\t\tif(_itemHolders[1].el.children.length) {\n\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\n\t\t\tif( framework.hasClass(zoomElement, 'pswp__zoom-wrap') ) {\n\t\t\t\t_currZoomElementStyle = zoomElement.style;\n\t\t\t} else {\n\t\t\t\t_currZoomElementStyle = null;\n\t\t\t}\n\t\t} else {\n\t\t\t_currZoomElementStyle = null;\n\t\t}\n\t\t\n\t\t_currPanBounds = self.currItem.bounds;\t\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t_panOffset.y = _currPanBounds.center.y;\n\n\t\tif(emulateSetContent) {\n\t\t\t_shout('afterChange');\n\t\t}\n\t},\n\n\n\tinvalidateCurrItems: function() {\n\t\t_itemsNeedUpdate = true;\n\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\tif( _itemHolders[i].item ) {\n\t\t\t\t_itemHolders[i].item.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateCurrItem: function(beforeAnimation) {\n\n\t\tif(_indexDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar diffAbs = Math.abs(_indexDiff),\n\t\t\ttempHolder;\n\n\t\tif(beforeAnimation && diffAbs < 2) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_renderMaxResolution = false;\n\t\t\n\t\t_shout('beforeChange', _indexDiff);\n\n\t\tif(diffAbs >= NUM_HOLDERS) {\n\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n\t\t\tdiffAbs = NUM_HOLDERS;\n\t\t}\n\t\tfor(var i = 0; i < diffAbs; i++) {\n\t\t\tif(_indexDiff > 0) {\n\t\t\t\ttempHolder = _itemHolders.shift();\n\t\t\t\t_itemHolders[NUM_HOLDERS-1] = tempHolder; // move first to last\n\n\t\t\t\t_containerShiftIndex++;\n\t\t\t\t_setTranslateX( (_containerShiftIndex+2) * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n\t\t\t} else {\n\t\t\t\ttempHolder = _itemHolders.pop();\n\t\t\t\t_itemHolders.unshift( tempHolder ); // move last to first\n\n\t\t\t\t_containerShiftIndex--;\n\t\t\t\t_setTranslateX( _containerShiftIndex * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// reset zoom/pan on previous item\n\t\tif(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\n\t\t\tif(prevItem.initialZoomLevel !== _currZoomLevel) {\n\t\t\t\t_calculateItemSize(prevItem , _viewportSize );\n\t\t\t\t_setImageSize(prevItem);\n\t\t\t\t_applyZoomPanToItem( prevItem ); \t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\t// reset diff after update\n\t\t_indexDiff = 0;\n\n\t\tself.updateCurrZoomItem();\n\n\t\t_prevItemIndex = _currentItemIndex;\n\n\t\t_shout('afterChange');\n\t\t\n\t},\n\n\n\n\tupdateSize: function(force) {\n\t\t\n\t\tif(!_isFixedPosition && _options.modal) {\n\t\t\tvar windowScrollY = framework.getScrollY();\n\t\t\tif(_currentWindowScrollY !== windowScrollY) {\n\t\t\t\ttemplate.style.top = windowScrollY + 'px';\n\t\t\t\t_currentWindowScrollY = windowScrollY;\n\t\t\t}\n\t\t\tif(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_windowVisibleSize.x = window.innerWidth;\n\t\t\t_windowVisibleSize.y = window.innerHeight;\n\n\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\n\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\n\t\t}\n\n\n\n\t\t_viewportSize.x = self.scrollWrap.clientWidth;\n\t\t_viewportSize.y = self.scrollWrap.clientHeight;\n\n\t\t_updatePageScrollOffset();\n\n\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n\t\t_slideSize.y = _viewportSize.y;\n\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\n\t\t_shout('beforeResize'); // even may be used for example to switch image sources\n\n\n\t\t// don't re-calculate size on inital size update\n\t\tif(_containerShiftIndex !== undefined) {\n\n\t\t\tvar holder,\n\t\t\t\titem,\n\t\t\t\thIndex;\n\n\t\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t\tholder = _itemHolders[i];\n\t\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, holder.el.style);\n\n\t\t\t\thIndex = _currentItemIndex+i-1;\n\n\t\t\t\tif(_options.loop && _getNumItems() > 2) {\n\t\t\t\t\thIndex = _getLoopedId(hIndex);\n\t\t\t\t}\n\n\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\n\t\t\t\titem = _getItemAt( hIndex );\n\n\t\t\t\t// re-render gallery item if `needsUpdate`,\n\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\n\t\t\t\tif( item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds) ) {\n\n\t\t\t\t\tself.cleanSlide( item );\n\t\t\t\t\t\n\t\t\t\t\tself.setContent( holder, hIndex );\n\n\t\t\t\t\t// if \"center\" slide\n\t\t\t\t\tif(i === 1) {\n\t\t\t\t\t\tself.currItem = item;\n\t\t\t\t\t\tself.updateCurrZoomItem(true);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.needsUpdate = false;\n\n\t\t\t\t} else if(holder.index === -1 && hIndex >= 0) {\n\t\t\t\t\t// add content first time\n\t\t\t\t\tself.setContent( holder, hIndex );\n\t\t\t\t}\n\t\t\t\tif(item && item.container) {\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t_setImageSize(item);\n\t\t\t\t\t_applyZoomPanToItem( item );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t_itemsNeedUpdate = false;\n\t\t}\t\n\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\t\t_currPanBounds = self.currItem.bounds;\n\n\t\tif(_currPanBounds) {\n\t\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t\t_panOffset.y = _currPanBounds.center.y;\n\t\t\t_applyCurrentZoomPan( true );\n\t\t}\n\t\t\n\t\t_shout('resize');\n\t},\n\t\n\t// Zoom current item to\n\tzoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn) {\n\t\t/*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n\t\tif(centerPoint) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x ;\n\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y ;\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\t\t}\n\n\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\n\t\t\tdestPanOffset = {};\n\n\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n\t\tvar initialZoomLevel = _currZoomLevel;\n\t\tvar initialPanOffset = {\n\t\t\tx: _panOffset.x,\n\t\t\ty: _panOffset.y\n\t\t};\n\n\t\t_roundPoint(destPanOffset);\n\n\t\tvar onUpdate = function(now) {\n\t\t\tif(now === 1) {\n\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t_panOffset.x = destPanOffset.x;\n\t\t\t\t_panOffset.y = destPanOffset.y;\n\t\t\t} else {\n\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t}\n\n\t\t\tif(updateFn) {\n\t\t\t\tupdateFn(now);\n\t\t\t}\n\n\t\t\t_applyCurrentZoomPan( now === 1 );\n\t\t};\n\n\t\tif(speed) {\n\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n\t\t} else {\n\t\t\tonUpdate(1);\n\t\t}\n\t}\n\n\n};\n\n\n/*>>core*/\n\n/*>>gestures*/\n/**\n * Mouse/touch/pointer event handlers.\n * \n * separated from @core.js for readability\n */\n\nvar MIN_SWIPE_DISTANCE = 30,\n\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\nvar _gestureStartTime,\n\t_gestureCheckSpeedTime,\n\n\t// pool of objects that are used during dragging of zooming\n\tp = {}, // first point\n\tp2 = {}, // second point (for zoom gesture)\n\tdelta = {},\n\t_currPoint = {},\n\t_startPoint = {},\n\t_currPointers = [],\n\t_startMainScrollPos = {},\n\t_releaseAnimData,\n\t_posPoints = [], // array of points during dragging, used to determine type of gesture\n\t_tempPoint = {},\n\n\t_isZoomingIn,\n\t_verticalDragInitiated,\n\t_oldAndroidTouchEndTimeout,\n\t_currZoomedItemIndex = 0,\n\t_centerPoint = _getEmptyPoint(),\n\t_lastReleaseTime = 0,\n\t_isDragging, // at least one pointer is down\n\t_isMultitouch, // at least two _pointers are down\n\t_zoomStarted, // zoom level changed during zoom gesture\n\t_moved,\n\t_dragAnimFrame,\n\t_mainScrollShifted,\n\t_currentPoints, // array of current touch points\n\t_isZooming,\n\t_currPointsDistance,\n\t_startPointsDistance,\n\t_currPanBounds,\n\t_mainScrollPos = _getEmptyPoint(),\n\t_currZoomElementStyle,\n\t_mainScrollAnimating, // true, if animation after swipe gesture is running\n\t_midZoomPoint = _getEmptyPoint(),\n\t_currCenterPoint = _getEmptyPoint(),\n\t_direction,\n\t_isFirstMove,\n\t_opacityChanged,\n\t_bgOpacity,\n\t_wasOverInitialZoom,\n\n\t_isEqualPoints = function(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t},\n\t_isNearbyPoints = function(touch0, touch1) {\n\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n\t},\n\t_calculatePointsDistance = function(p1, p2) {\n\t\t_tempPoint.x = Math.abs( p1.x - p2.x );\n\t\t_tempPoint.y = Math.abs( p1.y - p2.y );\n\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n\t},\n\t_stopDragUpdateLoop = function() {\n\t\tif(_dragAnimFrame) {\n\t\t\t_cancelAF(_dragAnimFrame);\n\t\t\t_dragAnimFrame = null;\n\t\t}\n\t},\n\t_dragUpdateLoop = function() {\n\t\tif(_isDragging) {\n\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\n\t\t\t_renderMovement();\n\t\t}\n\t},\n\t_canPan = function() {\n\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel ===  self.currItem.initialZoomLevel);\n\t},\n\t\n\t// find the closest parent DOM element\n\t_closestElement = function(el, fn) {\n\t  \tif(!el || el === document) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \t// don't search elements above pswp__scroll-wrap\n\t  \tif(el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1 ) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \tif( fn(el) ) {\n\t  \t\treturn el;\n\t  \t}\n\n\t  \treturn _closestElement(el.parentNode, fn);\n\t},\n\n\t_preventObj = {},\n\t_preventDefaultEventBehaviour = function(e, isDown) {\n\t    _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n\t\t_shout('preventDragEvent', e, isDown, _preventObj);\n\t\treturn _preventObj.prevent;\n\n\t},\n\t_convertTouchToPoint = function(touch, p) {\n\t\tp.x = touch.pageX;\n\t\tp.y = touch.pageY;\n\t\tp.id = touch.identifier;\n\t\treturn p;\n\t},\n\t_findCenterOfPoints = function(p1, p2, pCenter) {\n\t\tpCenter.x = (p1.x + p2.x) * 0.5;\n\t\tpCenter.y = (p1.y + p2.y) * 0.5;\n\t},\n\t_pushPosPoint = function(time, x, y) {\n\t\tif(time - _gestureCheckSpeedTime > 50) {\n\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\n\t\t\to.x = x;\n\t\t\to.y = y; \n\t\t\t_posPoints.push(o);\n\t\t\t_gestureCheckSpeedTime = time;\n\t\t}\n\t},\n\n\t_calculateVerticalDragOpacityRatio = function() {\n\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n\t\treturn 1 -  Math.abs( yOffset / (_viewportSize.y / 2)  );\n\t},\n\n\t\n\t// points pool, reused during touch events\n\t_ePoint1 = {},\n\t_ePoint2 = {},\n\t_tempPointsArr = [],\n\t_tempCounter,\n\t_getTouchPoints = function(e) {\n\t\t// clean up previous points, without recreating array\n\t\twhile(_tempPointsArr.length > 0) {\n\t\t\t_tempPointsArr.pop();\n\t\t}\n\n\t\tif(!_pointerEventEnabled) {\n\t\t\tif(e.type.indexOf('touch') > -1) {\n\n\t\t\t\tif(e.touches && e.touches.length > 0) {\n\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n\t\t\t\t\tif(e.touches.length > 1) {\n\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_ePoint1.x = e.pageX;\n\t\t\t\t_ePoint1.y = e.pageY;\n\t\t\t\t_ePoint1.id = '';\n\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\n\t\t\t}\n\t\t} else {\n\t\t\t_tempCounter = 0;\n\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\n\t\t\t_currPointers.forEach(function(p) {\n\t\t\t\tif(_tempCounter === 0) {\n\t\t\t\t\t_tempPointsArr[0] = p;\n\t\t\t\t} else if(_tempCounter === 1) {\n\t\t\t\t\t_tempPointsArr[1] = p;\n\t\t\t\t}\n\t\t\t\t_tempCounter++;\n\n\t\t\t});\n\t\t}\n\t\treturn _tempPointsArr;\n\t},\n\n\t_panOrMoveMainScroll = function(axis, delta) {\n\n\t\tvar panFriction,\n\t\t\toverDiff = 0,\n\t\t\tnewOffset = _panOffset[axis] + delta[axis],\n\t\t\tstartOverDiff,\n\t\t\tdir = delta[axis] > 0,\n\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\n\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n\t\t\tnewPanPos,\n\t\t\tnewMainScrollPos;\n\n\t\t// calculate fdistance over the bounds and friction\n\t\tif(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \n\t\t\t// Looks not as nice as was expected. Left for history.\n\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n\t\t} else {\n\t\t\tpanFriction = 1;\n\t\t}\n\t\t\n\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n\t\t// move main scroll or start panning\n\t\tif(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n\n\t\t\tif(!_currZoomElementStyle) {\n\t\t\t\t\n\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t} else if(_direction === 'h' && axis === 'x' && !_zoomStarted ) {\n\t\t\t\t\n\t\t\t\tif(dir) {\n\t\t\t\t\tif(newOffset > _currPanBounds.min[axis]) {\n\t\t\t\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\n\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// drag right\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\t\t\t\t\t\tif(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif(newOffset < _currPanBounds.max[axis] ) {\n\t\t\t\t\t\tpanFriction =_options.panEndFriction;\n\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\n\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t\t\t\tif(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t//\n\t\t\t}\n\n\t\t\tif(axis === 'x') {\n\n\t\t\t\tif(newMainScrollPos !== undefined) {\n\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\n\t\t\t\t\tif(newMainScrollPos === _startMainScrollPos.x) {\n\t\t\t\t\t\t_mainScrollShifted = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_mainScrollShifted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\tif(newPanPos !== undefined) {\n\t\t\t\t\t\t_panOffset.x = newPanPos;\n\t\t\t\t\t} else if(!_mainScrollShifted) {\n\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newMainScrollPos !== undefined;\n\t\t\t}\n\n\t\t}\n\n\t\tif(!_mainScrollAnimating) {\n\t\t\t\n\t\t\tif(!_mainScrollShifted) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t},\n\n\t// Pointerdown/touchstart/mousedown handler\n\t_onDragStart = function(e) {\n\n\t\t// Allow dragging only via left mouse button.\n\t\t// As this handler is not added in IE8 - we ignore e.which\n\t\t// \n\t\t// http://www.quirksmode.org/js/events_properties.html\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\t\tif(e.type === 'mousedown' && e.button > 0  ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_initialZoomRunning) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_preventDefaultEventBehaviour(e, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\n\n\t\t_shout('pointerDown');\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex < 0) {\n\t\t\t\tpointerIndex = _currPointers.length;\n\t\t\t}\n\t\t\t_currPointers[pointerIndex] = {x:e.pageX, y:e.pageY, id: e.pointerId};\n\t\t}\n\t\t\n\n\n\t\tvar startPointsList = _getTouchPoints(e),\n\t\t\tnumPoints = startPointsList.length;\n\n\t\t_currentPoints = null;\n\n\t\t_stopAllAnimations();\n\n\t\t// init drag\n\t\tif(!_isDragging || numPoints === 1) {\n\n\t\t\t\n\n\t\t\t_isDragging = _isFirstMove = true;\n\t\t\tframework.bind(window, _upMoveEvents, self);\n\n\t\t\t_isZoomingIn = \n\t\t\t\t_wasOverInitialZoom = \n\t\t\t\t_opacityChanged = \n\t\t\t\t_verticalDragInitiated = \n\t\t\t\t_mainScrollShifted = \n\t\t\t\t_moved = \n\t\t\t\t_isMultitouch = \n\t\t\t\t_zoomStarted = false;\n\n\t\t\t_direction = null;\n\n\t\t\t_shout('firstTouchStart', startPointsList);\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_currPanDist.x = _currPanDist.y = 0;\n\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\n\t\t\t_equalizePoints(_startPoint, _currPoint);\n\n\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\n\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n\t\t\t_posPoints = [{\n\t\t\t\tx: _currPoint.x,\n\t\t\t\ty: _currPoint.y\n\t\t\t}];\n\n\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n\t\t\t//_mainScrollAnimationEnd(true);\n\t\t\t_calculatePanBounds( _currZoomLevel, true );\n\t\t\t\n\t\t\t// Start rendering\n\t\t\t_stopDragUpdateLoop();\n\t\t\t_dragUpdateLoop();\n\t\t\t\n\t\t}\n\n\t\t// init zoom\n\t\tif(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_zoomStarted = false; // true if zoom changed at least once\n\n\t\t\t_isZooming = _isMultitouch = true;\n\t\t\t_currPanDist.y = _currPanDist.x = 0;\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_equalizePoints(p, startPointsList[0]);\n\t\t\t_equalizePoints(p2, startPointsList[1]);\n\n\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\n\n\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n\t\t}\n\n\n\t},\n\n\t// Pointermove/touchmove/mousemove handler\n\t_onDragMove = function(e) {\n\n\t\te.preventDefault();\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\tvar p = _currPointers[pointerIndex];\n\t\t\t\tp.x = e.pageX;\n\t\t\t\tp.y = e.pageY; \n\t\t\t}\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tvar touchesList = _getTouchPoints(e);\n\t\t\tif(!_direction && !_moved && !_isZooming) {\n\n\t\t\t\tif(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\n\t\t\t\t\t_direction = 'h';\n\t\t\t\t} else {\n\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n\t\t\t\t\t// check the direction of movement\n\t\t\t\t\tif(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\n\t\t\t\t\t\t_currentPoints = touchesList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_currentPoints = touchesList;\n\t\t\t}\n\t\t}\t\n\t},\n\t// \n\t_renderMovement =  function() {\n\n\t\tif(!_currentPoints) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar numPoints = _currentPoints.length;\n\n\t\tif(numPoints === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_equalizePoints(p, _currentPoints[0]);\n\n\t\tdelta.x = p.x - _currPoint.x;\n\t\tdelta.y = p.y - _currPoint.y;\n\n\t\tif(_isZooming && numPoints > 1) {\n\t\t\t// Handle behaviour for more than 1 point\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\t\t\n\t\t\t// check if one of two points changed\n\t\t\tif( !delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_equalizePoints(p2, _currentPoints[1]);\n\n\n\t\t\tif(!_zoomStarted) {\n\t\t\t\t_zoomStarted = true;\n\t\t\t\t_shout('zoomGestureStarted');\n\t\t\t}\n\t\t\t\n\t\t\t// Distance between two points\n\t\t\tvar pointsDistance = _calculatePointsDistance(p,p2);\n\n\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\n\n\t\t\t// slightly over the of initial zoom level\n\t\t\tif(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n\t\t\t\t_wasOverInitialZoom = true;\n\t\t\t}\n\n\t\t\t// Apply the friction if zoom level is out of the bounds\n\t\t\tvar zoomFriction = 1,\n\t\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\t\tif ( zoomLevel < minZoomLevel ) {\n\t\t\t\t\n\t\t\t\tif(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n\t\t\t\t\t// fade out background if zooming out\n\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\n\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n\t\t\t\t\t_applyBgOpacity(percent);\n\t\t\t\t\t_shout('onPinchClose', percent);\n\t\t\t\t\t_opacityChanged = true;\n\t\t\t\t} else {\n\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n\t\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t\t}\n\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if ( zoomLevel > maxZoomLevel ) {\n\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / ( minZoomLevel * 6 );\n\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t}\n\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n\t\t\t}\n\n\t\t\tif(zoomFriction < 0) {\n\t\t\t\tzoomFriction = 0;\n\t\t\t}\n\n\t\t\t// distance between touch points after friction is applied\n\t\t\t_currPointsDistance = pointsDistance;\n\n\t\t\t// _centerPoint - The point in the middle of two pointers\n\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\n\t\t\n\t\t\t// paning with two pointers pressed\n\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\n\n\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\n\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\n\t\t\t_currZoomLevel = zoomLevel;\n\t\t\t_applyCurrentZoomPan();\n\n\t\t} else {\n\n\t\t\t// handle behaviour for one point (dragging or panning)\n\n\t\t\tif(!_direction) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_isFirstMove) {\n\t\t\t\t_isFirstMove = false;\n\n\t\t\t\t// subtract drag distance that was used during the detection direction  \n\n\t\t\t\tif( Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\n\t\t\t// do nothing if pointers position hasn't changed\n\t\t\tif(delta.x === 0 && delta.y === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_direction === 'v' && _options.closeOnVerticalDrag) {\n\t\t\t\tif(!_canPan()) {\n\t\t\t\t\t_currPanDist.y += delta.y;\n\t\t\t\t\t_panOffset.y += delta.y;\n\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\t\t\t_verticalDragInitiated = true;\n\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\n\n\t\t\t\t\t_applyBgOpacity(opacityRatio);\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n\t\t\t_moved = true;\n\t\t\t_currPanBounds = self.currItem.bounds;\n\t\t\t\n\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\n\t\t\tif(!mainScrollChanged) {\n\t\t\t\t_panOrMoveMainScroll('y', delta);\n\n\t\t\t\t_roundPoint(_panOffset);\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t}\n\n\t},\n\t\n\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n\t_onDragRelease = function(e) {\n\n\t\tif(_features.isOldAndroid ) {\n\n\t\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \n\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\n\t\t\t// which causes fake mousedown event\n\t\t\t// so we block mousedown/up for 600ms\n\t\t\tif( e.type.indexOf('touch') > -1 ) {\n\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\n\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function() {\n\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\n\t\t\t\t}, 600);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t_shout('pointerUp');\n\n\t\tif(_preventDefaultEventBehaviour(e, false)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar releasePoint;\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\t\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n\t\t\t\tif(navigator.pointerEnabled) {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t} else {\n\t\t\t\t\tvar MSPOINTER_TYPES = {\n\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \n\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\n\t\t\t\t\t};\n\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n\t\t\t\t\tif(!releasePoint.type) {\n\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar touchList = _getTouchPoints(e),\n\t\t\tgestureType,\n\t\t\tnumPoints = touchList.length;\n\n\t\tif(e.type === 'mouseup') {\n\t\t\tnumPoints = 0;\n\t\t}\n\n\t\t// Do nothing if there were 3 touch points or more\n\t\tif(numPoints === 2) {\n\t\t\t_currentPoints = null;\n\t\t\treturn true;\n\t\t}\n\n\t\t// if second pointer released\n\t\tif(numPoints === 1) {\n\t\t\t_equalizePoints(_startPoint, touchList[0]);\n\t\t}\t\t\t\t\n\n\n\t\t// pointer hasn't moved, send \"tap release\" point\n\t\tif(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n\t\t\tif(!releasePoint) {\n\t\t\t\tif(e.type === 'mouseup') {\n\t\t\t\t\treleasePoint = {x: e.pageX, y: e.pageY, type:'mouse'};\n\t\t\t\t} else if(e.changedTouches && e.changedTouches[0]) {\n\t\t\t\t\treleasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type:'touch'};\n\t\t\t\t}\t\t\n\t\t\t}\n\n\t\t\t_shout('touchRelease', e, releasePoint);\n\t\t}\n\n\t\t// Difference in time between releasing of two last touch points (zoom gesture)\n\t\tvar releaseTimeDiff = -1;\n\n\t\t// Gesture completed, no pointers left\n\t\tif(numPoints === 0) {\n\t\t\t_isDragging = false;\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\n\t\t\t_stopDragUpdateLoop();\n\n\t\t\tif(_isZooming) {\n\t\t\t\t// Two points released at the same time\n\t\t\t\treleaseTimeDiff = 0;\n\t\t\t} else if(_lastReleaseTime !== -1) {\n\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n\t\t\t}\n\t\t}\n\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\t\t\n\t\tif(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n\t\t\tgestureType = 'zoom';\n\t\t} else {\n\t\t\tgestureType = 'swipe';\n\t\t}\n\n\t\tif(_isZooming && numPoints < 2) {\n\t\t\t_isZooming = false;\n\n\t\t\t// Only second point released\n\t\t\tif(numPoints === 1) {\n\t\t\t\tgestureType = 'zoomPointerUp';\n\t\t\t}\n\t\t\t_shout('zoomGestureEnded');\n\t\t}\n\n\t\t_currentPoints = null;\n\t\tif(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n\t\t\t// nothing to animate\n\t\t\treturn;\n\t\t}\n\t\n\t\t_stopAllAnimations();\n\n\t\t\n\t\tif(!_releaseAnimData) {\n\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\n\t\t}\n\t\t\n\t\t_releaseAnimData.calculateSwipeSpeed('x');\n\n\n\t\tif(_verticalDragInitiated) {\n\n\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\tif(opacityRatio < _options.verticalDragRange) {\n\t\t\t\tself.close();\n\t\t\t} else {\n\t\t\t\tvar initalPanY = _panOffset.y,\n\t\t\t\t\tinitialBgOpacity = _bgOpacity;\n\n\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now) {\n\t\t\t\t\t\n\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n\t\t\t\t\t_applyBgOpacity(  (1 - initialBgOpacity) * now + initialBgOpacity );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t});\n\n\t\t\t\t_shout('onVerticalDrag', 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\n\t\t// main scroll \n\t\tif(  (_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n\t\t\tif(itemChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgestureType = 'zoomPointerUp';\n\t\t}\n\n\t\t// prevent zoom/pan animation when main scroll animation runs\n\t\tif(_mainScrollAnimating) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds)  \n\t\tif(gestureType !== 'swipe') {\n\t\t\t_completeZoomGesture();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n\t\tif(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n\t\t\t_completePanGesture(_releaseAnimData);\n\t\t}\n\t},\n\n\n\t// Returns object with data about gesture\n\t// It's created only once and then reused\n\t_initDragReleaseAnimationData  = function() {\n\t\t// temp local vars\n\t\tvar lastFlickDuration,\n\t\t\ttempReleasePos;\n\n\t\t// s = this\n\t\tvar s = {\n\t\t\tlastFlickOffset: {},\n\t\t\tlastFlickDist: {},\n\t\t\tlastFlickSpeed: {},\n\t\t\tslowDownRatio:  {},\n\t\t\tslowDownRatioReverse:  {},\n\t\t\tspeedDecelerationRatio:  {},\n\t\t\tspeedDecelerationRatioAbs:  {},\n\t\t\tdistanceOffset:  {},\n\t\t\tbackAnimDestination: {},\n\t\t\tbackAnimStarted: {},\n\t\t\tcalculateSwipeSpeed: function(axis) {\n\t\t\t\t\n\n\t\t\t\tif( _posPoints.length > 1) {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length-2][axis];\n\t\t\t\t} else {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n\t\t\t\t\ttempReleasePos = _startPoint[axis];\n\t\t\t\t}\n\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n\t\t\t\tif(s.lastFlickDist[axis] > 20) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n\t\t\t\t} else {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\tif( Math.abs(s.lastFlickSpeed[axis]) < 0.1 ) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ts.slowDownRatio[axis] = 0.95;\n\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\ts.speedDecelerationRatio[axis] = 1;\n\t\t\t},\n\n\t\t\tcalculateOverBoundsAnimOffset: function(axis, speed) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\n\t\t\t\t\tif(_panOffset[axis] > _currPanBounds.min[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(s.backAnimDestination[axis] !== undefined) {\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\t\t\tif(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\n\n\t\t\t\t\t\t\t_animateProp('bounceZoomPan'+axis,_panOffset[axis], \n\t\t\t\t\t\t\t\ts.backAnimDestination[axis], \n\t\t\t\t\t\t\t\tspeed || 300, \n\t\t\t\t\t\t\t\tframework.easing.sine.out, \n\t\t\t\t\t\t\t\tfunction(pos) {\n\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\n\t\t\tcalculateAnimOffset: function(axis) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] + \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] - \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpanAnimLoop: function() {\n\t\t\t\tif ( _animations.zoomPan ) {\n\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n\t\t\t\t\ts.now = _getCurrentTime();\n\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\n\t\t\t\t\ts.lastNow = s.now;\n\t\t\t\t\t\n\t\t\t\t\ts.calculateAnimOffset('x');\n\t\t\t\t\ts.calculateAnimOffset('y');\n\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\n\n\n\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n\t\t\t\t\t\t// round pan position\n\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\n\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\n\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\n\t\t\t\t\t\t_stopAnimation('zoomPan');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\treturn s;\n\t},\n\n\t_completePanGesture = function(animData) {\n\t\t// calculate swipe speed for Y axis (paanning)\n\t\tanimData.calculateSwipeSpeed('y');\n\n\t\t_currPanBounds = self.currItem.bounds;\n\t\t\n\t\tanimData.backAnimDestination = {};\n\t\tanimData.backAnimStarted = {};\n\n\t\t// Avoid acceleration animation if speed is too low\n\t\tif(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05 ) {\n\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n\t\t\tanimData.calculateOverBoundsAnimOffset('x');\n\t\t\tanimData.calculateOverBoundsAnimOffset('y');\n\t\t\treturn true;\n\t\t}\n\n\t\t// Animation loop that controls the acceleration after pan gesture ends\n\t\t_registerStartAnimation('zoomPan');\n\t\tanimData.lastNow = _getCurrentTime();\n\t\tanimData.panAnimLoop();\n\t},\n\n\n\t_finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData) {\n\t\tvar itemChanged;\n\t\tif(!_mainScrollAnimating) {\n\t\t\t_currZoomedItemIndex = _currentItemIndex;\n\t\t}\n\n\n\t\t\n\t\tvar itemsDiff;\n\n\t\tif(gestureType === 'swipe') {\n\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\n\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \n\t\t\t// and last flick gesture was in right direction\n\t\t\tif(totalShiftDist > MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20) ) {\n\t\t\t\t// go to prev item\n\t\t\t\titemsDiff = -1;\n\t\t\t} else if(totalShiftDist < -MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20) ) {\n\t\t\t\t// go to next item\n\t\t\t\titemsDiff = 1;\n\t\t\t}\n\t\t}\n\n\t\tvar nextCircle;\n\n\t\tif(itemsDiff) {\n\t\t\t\n\t\t\t_currentItemIndex += itemsDiff;\n\n\t\t\tif(_currentItemIndex < 0) {\n\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems()-1 : 0;\n\t\t\t\tnextCircle = true;\n\t\t\t} else if(_currentItemIndex >= _getNumItems()) {\n\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems()-1;\n\t\t\t\tnextCircle = true;\n\t\t\t}\n\n\t\t\tif(!nextCircle || _options.loop) {\n\t\t\t\t_indexDiff += itemsDiff;\n\t\t\t\t_currPositionIndex -= itemsDiff;\n\t\t\t\titemChanged = true;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t}\n\n\t\tvar animateToX = _slideSize.x * _currPositionIndex;\n\t\tvar animateToDist = Math.abs( animateToX - _mainScrollPos.x );\n\t\tvar finishAnimDuration;\n\n\n\t\tif(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\n\t\t\tfinishAnimDuration = 333; \n\t\t} else {\n\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ? \n\t\t\t\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) : \n\t\t\t\t\t\t\t\t\t333;\n\n\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\n\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\n\t\t}\n\n\t\tif(_currZoomedItemIndex === _currentItemIndex) {\n\t\t\titemChanged = false;\n\t\t}\n\t\t\n\t\t_mainScrollAnimating = true;\n\t\t\n\t\t_shout('mainScrollAnimStart');\n\n\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out, \n\t\t\t_moveMainScroll,\n\t\t\tfunction() {\n\t\t\t\t_stopAllAnimations();\n\t\t\t\t_mainScrollAnimating = false;\n\t\t\t\t_currZoomedItemIndex = -1;\n\t\t\t\t\n\t\t\t\tif(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n\t\t\t\t\tself.updateCurrItem();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_shout('mainScrollAnimComplete');\n\t\t\t}\n\t\t);\n\n\t\tif(itemChanged) {\n\t\t\tself.updateCurrItem(true);\n\t\t}\n\n\t\treturn itemChanged;\n\t},\n\n\t_calculateZoomLevel = function(touchesDistance) {\n\t\treturn  1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n\t},\n\n\t// Resets zoom if it's out of bounds\n\t_completeZoomGesture = function() {\n\t\tvar destZoomLevel = _currZoomLevel,\n\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\tif ( _currZoomLevel < minZoomLevel ) {\n\t\t\tdestZoomLevel = minZoomLevel;\n\t\t} else if ( _currZoomLevel > maxZoomLevel ) {\n\t\t\tdestZoomLevel = maxZoomLevel;\n\t\t}\n\n\t\tvar destOpacity = 1,\n\t\t\tonUpdate,\n\t\t\tinitialOpacity = _bgOpacity;\n\n\t\tif(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n\t\t\t//_closedByScroll = true;\n\t\t\tself.close();\n\t\t\treturn true;\n\t\t}\n\n\t\tif(_opacityChanged) {\n\t\t\tonUpdate = function(now) {\n\t\t\t\t_applyBgOpacity(  (destOpacity - initialOpacity) * now + initialOpacity );\n\t\t\t};\n\t\t}\n\n\t\tself.zoomTo(destZoomLevel, 0, 200,  framework.easing.cubic.out, onUpdate);\n\t\treturn true;\n\t};\n\n\n_registerModule('Gestures', {\n\tpublicMethods: {\n\n\t\tinitGestures: function() {\n\n\t\t\t// helper function that builds touch/pointer/mouse events\n\t\t\tvar addEventNames = function(pref, down, move, up, cancel) {\n\t\t\t\t_dragStartEvent = pref + down;\n\t\t\t\t_dragMoveEvent = pref + move;\n\t\t\t\t_dragEndEvent = pref + up;\n\t\t\t\tif(cancel) {\n\t\t\t\t\t_dragCancelEvent = pref + cancel;\n\t\t\t\t} else {\n\t\t\t\t\t_dragCancelEvent = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_pointerEventEnabled = _features.pointerEvent;\n\t\t\tif(_pointerEventEnabled && _features.touch) {\n\t\t\t\t// we don't need touch events, if browser supports pointer events\n\t\t\t\t_features.touch = false;\n\t\t\t}\n\n\t\t\tif(_pointerEventEnabled) {\n\t\t\t\tif(navigator.pointerEnabled) {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t} else {\n\t\t\t\t\t// IE10 pointer events are case-sensitive\n\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n\t\t\t\t}\n\t\t\t} else if(_features.touch) {\n\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\n\t\t\t\t_likelyTouchDevice = true;\n\t\t\t} else {\n\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\t\n\t\t\t}\n\n\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent  + ' ' +  _dragCancelEvent;\n\t\t\t_downEvents = _dragStartEvent;\n\n\t\t\tif(_pointerEventEnabled && !_likelyTouchDevice) {\n\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n\t\t\t}\n\t\t\t// make variable public\n\t\t\tself.likelyTouchDevice = _likelyTouchDevice; \n\t\t\t\n\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\n\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\n\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n\t\t\tif(_dragCancelEvent) {\n\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n\t\t\tif(_features.touch) {\n\t\t\t\t_downEvents += ' mousedown';\n\t\t\t\t_upMoveEvents += ' mousemove mouseup';\n\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\tif(!_likelyTouchDevice) {\n\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\n\t\t\t\t_options.allowPanToNext = false;\n\t\t\t}\n\t\t}\n\n\t}\n});\n\n\n/*>>gestures*/\n\n/*>>show-hide-transition*/\n/**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n * \n */\n\n\nvar _showOrHideTimeout,\n\t_showOrHide = function(item, img, out, completeFn) {\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\n\t\t_initialZoomRunning = true;\n\t\t_initialContentSet = true;\n\t\t\n\t\t// dimensions of small thumbnail {x:,y:,w:}.\n\t\t// Height is optional, as calculated based on large image.\n\t\tvar thumbBounds; \n\t\tif(item.initialLayout) {\n\t\t\tthumbBounds = item.initialLayout;\n\t\t\titem.initialLayout = null;\n\t\t} else {\n\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t}\n\n\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n\t\tvar onComplete = function() {\n\t\t\t_stopAnimation('initialZoom');\n\t\t\tif(!out) {\n\t\t\t\t_applyBgOpacity(1);\n\t\t\t\tif(img) {\n\t\t\t\t\timg.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tframework.addClass(template, 'pswp--animated-in');\n\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n\t\t\t} else {\n\t\t\t\tself.template.removeAttribute('style');\n\t\t\t\tself.bg.removeAttribute('style');\n\t\t\t}\n\n\t\t\tif(completeFn) {\n\t\t\t\tcompleteFn();\n\t\t\t}\n\t\t\t_initialZoomRunning = false;\n\t\t};\n\n\t\t// if bounds aren't provided, just open gallery without animation\n\t\tif(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\n\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t_applyCurrentZoomPan();\n\n\t\t\ttemplate.style.opacity = out ? 0 : 1;\n\t\t\t_applyBgOpacity(1);\n\n\t\t\tif(duration) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tonComplete();\n\t\t\t\t}, duration);\n\t\t\t} else {\n\t\t\t\tonComplete();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar startAnimation = function() {\n\t\t\tvar closeWithRaf = _closedByScroll,\n\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\t\t\t\n\t\t\t// apply hw-acceleration to image\n\t\t\tif(item.miniImg) {\n\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\n\t\t\t}\n\n\t\t\tif(!out) {\n\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\n\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t\t_registerStartAnimation('initialZoom');\n\t\t\t\n\t\t\tif(out && !closeWithRaf) {\n\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\n\t\t\t}\n\n\t\t\tif(fadeEverything) {\n\t\t\t\tif(out) {\n\t\t\t\t\tframework[ (closeWithRaf ? 'remove' : 'add') + 'Class' ](template, 'pswp--animate_opacity');\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\n\t\t\t\t\t}, 30);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_showOrHideTimeout = setTimeout(function() {\n\n\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\t\t\t\t\n\n\t\t\t\tif(!out) {\n\n\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\n\t\t\t\t\t// CSS transition work faster here, \n\t\t\t\t\t// as developer may also want to animate other things, \n\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\n\t\t\t\t\t\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t_applyBgOpacity(1);\n\n\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\ttemplate.style.opacity = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_applyBgOpacity(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t} else {\n\n\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\n\t\t\t\t\t\tinitialPanOffset = {\n\t\t\t\t\t\t\tx: _panOffset.x,\n\t\t\t\t\t\t\ty: _panOffset.y\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\n\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\n\t\t\t\t\t\tonUpdate = function(now) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(now === 1) {\n\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y  - _currentWindowScrollY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_applyBgOpacity( initalBgOpacity - now * initalBgOpacity );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(closeWithRaf) {\n\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonUpdate(1);\n\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\n\t\t};\n\t\tstartAnimation();\n\n\t\t\n\t};\n\n/*>>show-hide-transition*/\n\n/*>>items-controller*/\n/**\n*\n* Controller manages gallery items, their dimensions, and their content.\n* \n*/\n\nvar _items,\n\t_tempPanAreaSize = {},\n\t_imagesToAppendPool = [],\n\t_initialContentSet,\n\t_initialZoomRunning,\n\t_controllerDefaultOptions = {\n\t\tindex: 0,\n\t\terrorMsg: '<div class=\"pswp__error-msg\"><a href=\"%url%\" target=\"_blank\">The image</a> could not be loaded.</div>',\n\t\tforceProgressiveLoading: false, // TODO\n\t\tpreload: [1,1],\n\t\tgetNumItemsFn: function() {\n\t\t\treturn _items.length;\n\t\t}\n\t};\n\n\nvar _getItemAt,\n\t_getNumItems,\n\t_initialIsLoop,\n\t_getZeroBounds = function() {\n\t\treturn {\n\t\t\tcenter:{x:0,y:0}, \n\t\t\tmax:{x:0,y:0}, \n\t\t\tmin:{x:0,y:0}\n\t\t};\n\t},\n\t_calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH ) {\n\t\tvar bounds = item.bounds;\n\n\t\t// position of element when it's centered\n\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\n\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n\t\t// maximum pan position\n\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) : \n\t\t\t\t\t\t\tbounds.center.x;\n\t\t\n\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top : \n\t\t\t\t\t\t\tbounds.center.y;\n\t\t\n\t\t// minimum pan position\n\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\n\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n\t},\n\t_calculateItemSize = function(item, viewportSize, zoomLevel) {\n\n\t\tif (item.src && !item.loadError) {\n\t\t\tvar isInitial = !zoomLevel;\n\t\t\t\n\t\t\tif(isInitial) {\n\t\t\t\tif(!item.vGap) {\n\t\t\t\t\titem.vGap = {top:0,bottom:0};\n\t\t\t\t}\n\t\t\t\t// allows overriding vertical margin for individual items\n\t\t\t\t_shout('parseVerticalMargin', item);\n\t\t\t}\n\n\n\t\t\t_tempPanAreaSize.x = viewportSize.x;\n\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n\t\t\tif (isInitial) {\n\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\n\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\n\n\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n\t\t\t\tvar scaleMode = _options.scaleMode;\n\n\t\t\t\tif (scaleMode === 'orig') {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t} else if (scaleMode === 'fit') {\n\t\t\t\t\tzoomLevel = item.fitRatio;\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel > 1) {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t}\n\n\t\t\t\titem.initialZoomLevel = zoomLevel;\n\t\t\t\t\n\t\t\t\tif(!item.bounds) {\n\t\t\t\t\t// reuse bounds object\n\t\t\t\t\titem.bounds = _getZeroBounds(); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!zoomLevel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\n\t\t\t\titem.initialPosition = item.bounds.center;\n\t\t\t}\n\n\t\t\treturn item.bounds;\n\t\t} else {\n\t\t\titem.w = item.h = 0;\n\t\t\titem.initialZoomLevel = item.fitRatio = 1;\n\t\t\titem.bounds = _getZeroBounds();\n\t\t\titem.initialPosition = item.bounds.center;\n\n\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\n\t\t\treturn item.bounds;\n\t\t}\n\t\t\n\t},\n\n\t\n\n\n\t_appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\n\t\t\n\n\t\tif(item.loadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(img) {\n\n\t\t\titem.imageAppended = true;\n\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution) );\n\t\t\t\n\t\t\tbaseDiv.appendChild(img);\n\n\t\t\tif(keepPlaceholder) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(item && item.loaded && item.placeholder) {\n\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t},\n\t\n\n\n\t_preloadImage = function(item) {\n\t\titem.loading = true;\n\t\titem.loaded = false;\n\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\n\t\tvar onComplete = function() {\n\t\t\titem.loading = false;\n\t\t\titem.loaded = true;\n\n\t\t\tif(item.loadComplete) {\n\t\t\t\titem.loadComplete(item);\n\t\t\t} else {\n\t\t\t\titem.img = null; // no need to store image object\n\t\t\t}\n\t\t\timg.onload = img.onerror = null;\n\t\t\timg = null;\n\t\t};\n\t\timg.onload = onComplete;\n\t\timg.onerror = function() {\n\t\t\titem.loadError = true;\n\t\t\tonComplete();\n\t\t};\t\t\n\n\t\timg.src = item.src;// + '?a=' + Math.random();\n\n\t\treturn img;\n\t},\n\t_checkForError = function(item, cleanUp) {\n\t\tif(item.src && item.loadError && item.container) {\n\n\t\t\tif(cleanUp) {\n\t\t\t\titem.container.innerHTML = '';\n\t\t\t}\n\n\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%',  item.src );\n\t\t\treturn true;\n\t\t\t\n\t\t}\n\t},\n\t_setImageSize = function(item, img, maxRes) {\n\t\tif(!item.src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!img) {\n\t\t\timg = item.container.lastChild;\n\t\t}\n\n\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\t\t\n\t\tif(item.placeholder && !item.loaded) {\n\t\t\titem.placeholder.style.width = w + 'px';\n\t\t\titem.placeholder.style.height = h + 'px';\n\t\t}\n\n\t\timg.style.width = w + 'px';\n\t\timg.style.height = h + 'px';\n\t},\n\t_appendImagesPool = function() {\n\n\t\tif(_imagesToAppendPool.length) {\n\t\t\tvar poolItem;\n\n\t\t\tfor(var i = 0; i < _imagesToAppendPool.length; i++) {\n\t\t\t\tpoolItem = _imagesToAppendPool[i];\n\t\t\t\tif( poolItem.holder.index === poolItem.index ) {\n\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_imagesToAppendPool = [];\n\t\t}\n\t};\n\t\n\n\n_registerModule('Controller', {\n\n\tpublicMethods: {\n\n\t\tlazyLoadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\t\t\tvar item = _getItemAt(index);\n\n\t\t\tif(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tif (!item.src) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_preloadImage(item);\n\t\t},\n\t\tinitController: function() {\n\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\n\t\t\tself.items = _items = items;\n\t\t\t_getItemAt = self.getItemAt;\n\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n\n\n\t\t\t_initialIsLoop = _options.loop;\n\t\t\tif(_getNumItems() < 3) {\n\t\t\t\t_options.loop = false; // disable loop if less then 3 items\n\t\t\t}\n\n\t\t\t_listen('beforeChange', function(diff) {\n\n\t\t\t\tvar p = _options.preload,\n\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\n\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems() ),\n\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems() ),\n\t\t\t\t\ti;\n\n\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex+i);\n\t\t\t\t}\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex-i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('initialLayout', function() {\n\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t\t});\n\n\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\n\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\n\n\n\n\t\t\t_listen('destroy', function() {\n\t\t\t\tvar item;\n\t\t\t\tfor(var i = 0; i < _items.length; i++) {\n\t\t\t\t\titem = _items[i];\n\t\t\t\t\t// remove reference to DOM elements, for GC\n\t\t\t\t\tif(item.container) {\n\t\t\t\t\t\titem.container = null; \n\t\t\t\t\t}\n\t\t\t\t\tif(item.placeholder) {\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.img) {\n\t\t\t\t\t\titem.img = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.preloader) {\n\t\t\t\t\t\titem.preloader = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.loadError) {\n\t\t\t\t\t\titem.loaded = item.loadError = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_imagesToAppendPool = null;\n\t\t\t});\n\t\t},\n\n\n\t\tgetItemAt: function(index) {\n\t\t\tif (index >= 0) {\n\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tallowProgressiveImg: function() {\n\t\t\t// 1. Progressive image loading isn't working on webkit/blink \n\t\t\t//    when hw-acceleration (e.g. translateZ) is applied to IMG element.\n\t\t\t//    That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n\t\t\t//    \n\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n\t\t\t//    That's why it's disabled on touch devices (mainly because of swipe transition)\n\t\t\t//    \n\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n\t\t\t// Don't allow progressive loading on non-large touch devices\n\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200; \n\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n\t\t},\n\n\t\tsetContent: function(holder, index) {\n\n\t\t\tif(_options.loop) {\n\t\t\t\tindex = _getLoopedId(index);\n\t\t\t}\n\n\t\t\tvar prevItem = self.getItemAt(holder.index);\n\t\t\tif(prevItem) {\n\t\t\t\tprevItem.container = null;\n\t\t\t}\n\t\n\t\t\tvar item = self.getItemAt(index),\n\t\t\t\timg;\n\t\t\t\n\t\t\tif(!item) {\n\t\t\t\tholder.el.innerHTML = '';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// allow to override data\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tholder.index = index;\n\t\t\tholder.item = item;\n\n\t\t\t// base container DIV is created only once for each of 3 holders\n\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap'); \n\n\t\t\t\n\n\t\t\tif(!item.src && item.html) {\n\t\t\t\tif(item.html.tagName) {\n\t\t\t\t\tbaseDiv.appendChild(item.html);\n\t\t\t\t} else {\n\t\t\t\t\tbaseDiv.innerHTML = item.html;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_checkForError(item);\n\n\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\n\t\t\tif(item.src && !item.loadError && !item.loaded) {\n\n\t\t\t\titem.loadComplete = function(item) {\n\n\t\t\t\t\t// gallery closed before image finished loading\n\t\t\t\t\tif(!_isOpen) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if holder hasn't changed while image was loading\n\t\t\t\t\tif(holder && holder.index === index ) {\n\t\t\t\t\t\tif( _checkForError(item, true) ) {\n\t\t\t\t\t\t\titem.loadComplete = item.img = null;\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\n\n\t\t\t\t\t\t\tif(holder.index === _currentItemIndex) {\n\t\t\t\t\t\t\t\t// recalculate dimensions\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !item.imageAppended ) {\n\t\t\t\t\t\t\tif(_features.transform && (_mainScrollAnimating || _initialZoomRunning) ) {\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\t\t\titem:item,\n\t\t\t\t\t\t\t\t\tbaseDiv:baseDiv,\n\t\t\t\t\t\t\t\t\timg:item.img,\n\t\t\t\t\t\t\t\t\tindex:index,\n\t\t\t\t\t\t\t\t\tholder:holder,\n\t\t\t\t\t\t\t\t\tclearPlaceholder:true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// remove preloader & mini-img\n\t\t\t\t\t\t\tif(!_initialZoomRunning && item.placeholder) {\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\titem.loadComplete = null;\n\t\t\t\t\titem.img = null; // no need to store image element after it's added\n\n\t\t\t\t\t_shout('imageLoadComplete', index, item);\n\t\t\t\t};\n\n\t\t\t\tif(framework.features.transform) {\n\t\t\t\t\t\n\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder'; \n\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n\t\t\t\t\tif(item.msrc) {\n\t\t\t\t\t\tplaceholder.src = item.msrc;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t_setImageSize(item, placeholder);\n\n\t\t\t\t\tbaseDiv.appendChild(placeholder);\n\t\t\t\t\titem.placeholder = placeholder;\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\tif(!item.loading) {\n\t\t\t\t\t_preloadImage(item);\n\t\t\t\t}\n\n\n\t\t\t\tif( self.allowProgressiveImg() ) {\n\t\t\t\t\t// just append image\n\t\t\t\t\tif(!_initialContentSet && _features.transform) {\n\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\titem:item, \n\t\t\t\t\t\t\tbaseDiv:baseDiv, \n\t\t\t\t\t\t\timg:item.img, \n\t\t\t\t\t\t\tindex:index, \n\t\t\t\t\t\t\tholder:holder\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if(item.src && !item.loadError) {\n\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\n\t\t\t\timg = framework.createEl('pswp__img', 'img');\n\t\t\t\timg.style.opacity = 1;\n\t\t\t\timg.src = item.src;\n\t\t\t\t_setImageSize(item, img);\n\t\t\t\t_appendImage(index, item, baseDiv, img, true);\n\t\t\t}\n\t\t\t\n\n\t\t\tif(!_initialContentSet && index === _currentItemIndex) {\n\t\t\t\t_currZoomElementStyle = baseDiv.style;\n\t\t\t\t_showOrHide(item, (img ||item.img) );\n\t\t\t} else {\n\t\t\t\t_applyZoomPanToItem(item);\n\t\t\t}\n\n\t\t\tholder.el.innerHTML = '';\n\t\t\tholder.el.appendChild(baseDiv);\n\t\t},\n\n\t\tcleanSlide: function( item ) {\n\t\t\tif(item.img ) {\n\t\t\t\titem.img.onload = item.img.onerror = null;\n\t\t\t}\n\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\n\t\t}\n\n\t}\n});\n\n/*>>items-controller*/\n\n/*>>tap*/\n/**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n * \n */\n\nvar tapTimer,\n\ttapReleasePoint = {},\n\t_dispatchTapEvent = function(origEvent, releasePoint, pointerType) {\t\t\n\t\tvar e = document.createEvent( 'CustomEvent' ),\n\t\t\teDetail = {\n\t\t\t\torigEvent:origEvent, \n\t\t\t\ttarget:origEvent.target, \n\t\t\t\treleasePoint: releasePoint, \n\t\t\t\tpointerType:pointerType || 'touch'\n\t\t\t};\n\n\t\te.initCustomEvent( 'pswpTap', true, true, eDetail );\n\t\torigEvent.target.dispatchEvent(e);\n\t};\n\n_registerModule('Tap', {\n\tpublicMethods: {\n\t\tinitTap: function() {\n\t\t\t_listen('firstTouchStart', self.onTapStart);\n\t\t\t_listen('touchRelease', self.onTapRelease);\n\t\t\t_listen('destroy', function() {\n\t\t\t\ttapReleasePoint = {};\n\t\t\t\ttapTimer = null;\n\t\t\t});\n\t\t},\n\t\tonTapStart: function(touchList) {\n\t\t\tif(touchList.length > 1) {\n\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\ttapTimer = null;\n\t\t\t}\n\t\t},\n\t\tonTapRelease: function(e, releasePoint) {\n\t\t\tif(!releasePoint) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_moved && !_isMultitouch && !_numAnimations) {\n\t\t\t\tvar p0 = releasePoint;\n\t\t\t\tif(tapTimer) {\n\t\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\t\ttapTimer = null;\n\n\t\t\t\t\t// Check if taped on the same place\n\t\t\t\t\tif ( _isNearbyPoints(p0, tapReleasePoint) ) {\n\t\t\t\t\t\t_shout('doubleTap', p0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(releasePoint.type === 'mouse') {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\n\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\n\t\t\t\tif(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap') ) {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_equalizePoints(tapReleasePoint, p0);\n\n\t\t\t\ttapTimer = setTimeout(function() {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\ttapTimer = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\t}\n});\n\n/*>>tap*/\n\n/*>>desktop-zoom*/\n/**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n *   (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n * \n */\n\nvar _wheelDelta;\n\t\n_registerModule('DesktopZoom', {\n\n\tpublicMethods: {\n\n\t\tinitDesktopZoom: function() {\n\n\t\t\tif(_oldIE) {\n\t\t\t\t// no zoom for old IE (<=8)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_likelyTouchDevice) {\n\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\n\t\t\t\t// and only then apply desktop-zoom features\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\tself.setupDesktopZoom();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.setupDesktopZoom(true);\n\t\t\t}\n\n\t\t},\n\n\t\tsetupDesktopZoom: function(onInit) {\n\n\t\t\t_wheelDelta = {};\n\n\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\n\t\t\t\n\t\t\t_listen('bindEvents', function() {\n\t\t\t\tframework.bind(template, events,  self.handleMouseWheel);\n\t\t\t});\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_wheelDelta) {\n\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.mouseZoomedIn = false;\n\n\t\t\tvar hasDraggingClass,\n\t\t\t\tupdateZoomable = function() {\n\t\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\n\t\t\t\t\t\tself.mouseZoomedIn = false;\n\t\t\t\t\t}\n\t\t\t\t\tif(_currZoomLevel < 1) {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t}\n\t\t\t\t\tremoveDraggingClass();\n\t\t\t\t},\n\t\t\t\tremoveDraggingClass = function() {\n\t\t\t\t\tif(hasDraggingClass) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\n\t\t\t\t\t\thasDraggingClass = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t_listen('resize' , updateZoomable);\n\t\t\t_listen('afterChange' , updateZoomable);\n\t\t\t_listen('pointerDown', function() {\n\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\thasDraggingClass = true;\n\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('pointerUp', removeDraggingClass);\n\n\t\t\tif(!onInit) {\n\t\t\t\tupdateZoomable();\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\thandleMouseWheel: function(e) {\n\n\t\t\tif(_currZoomLevel <= self.currItem.fitRatio) {\n\t\t\t\tif( _options.modal ) {\n\n\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else if(_transformKey && Math.abs(e.deltaY) > 2) {\n\t\t\t\t\t\t// close PhotoSwipe\n\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\n\t\t\t\t\t\t_closedByScroll = true;\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// allow just one event to fire\n\t\t\te.stopPropagation();\n\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t\t\t_wheelDelta.x = 0;\n\n\t\t\tif('deltaX' in e) {\n\t\t\t\tif(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n\t\t\t\t\t// 18 - average line height\n\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\n\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.x = e.deltaX;\n\t\t\t\t\t_wheelDelta.y = e.deltaY;\n\t\t\t\t}\n\t\t\t} else if('wheelDelta' in e) {\n\t\t\t\tif(e.wheelDeltaX) {\n\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\n\t\t\t\t}\n\t\t\t\tif(e.wheelDeltaY) {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\n\t\t\t\t}\n\t\t\t} else if('detail' in e) {\n\t\t\t\t_wheelDelta.y = e.detail;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculatePanBounds(_currZoomLevel, true);\n\n\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\n\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\n\n\t\t\t// only prevent scrolling in nonmodal mode when not at edges\n\t\t\tif (_options.modal ||\n\t\t\t\t(\n\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n\t\t\t\t) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// TODO: use rAF instead of mousewheel?\n\t\t\tself.panTo(newPanX, newPanY);\n\t\t},\n\n\t\ttoggleDesktopZoom: function(centerPoint) {\n\t\t\tcenterPoint = centerPoint || {x:_viewportSize.x/2 + _offset.x, y:_viewportSize.y/2 + _offset.y };\n\n\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\n\t\t\t\n\t\t\tself.mouseZoomedIn = !zoomOut;\n\n\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n\t\t\tframework[ (!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n\t\t}\n\n\t}\n});\n\n\n/*>>desktop-zoom*/\n\n/*>>history*/\n/**\n *\n * history.js:\n *\n * - Back button to close gallery.\n * \n * - Unique URL for each slide: example.com/&pid=1&gid=3\n *   (where PID is picture index, and GID and gallery index)\n *   \n * - Switch URL when slides change.\n * \n */\n\n\nvar _historyDefaultOptions = {\n\thistory: true,\n\tgalleryUID: 1\n};\n\nvar _historyUpdateTimeout,\n\t_hashChangeTimeout,\n\t_hashAnimCheckTimeout,\n\t_hashChangedByScript,\n\t_hashChangedByHistory,\n\t_hashReseted,\n\t_initialHash,\n\t_historyChanged,\n\t_closedFromURL,\n\t_urlChangedOnce,\n\t_windowLoc,\n\n\t_supportsPushState,\n\n\t_getHash = function() {\n\t\treturn _windowLoc.hash.substring(1);\n\t},\n\t_cleanHistoryTimeouts = function() {\n\n\t\tif(_historyUpdateTimeout) {\n\t\t\tclearTimeout(_historyUpdateTimeout);\n\t\t}\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\t},\n\n\t// pid - Picture index\n\t// gid - Gallery index\n\t_parseItemIndexFromURL = function() {\n\t\tvar hash = _getHash(),\n\t\t\tparams = {};\n\n\t\tif(hash.length < 5) { // pid=1\n\t\t\treturn params;\n\t\t}\n\n\t\tvar i, vars = hash.split('&');\n\t\tfor (i = 0; i < vars.length; i++) {\n\t\t\tif(!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar pair = vars[i].split('=');\t\n\t\t\tif(pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\t\tif(_options.galleryPIDs) {\n\t\t\t// detect custom pid in hash and search for it among the items collection\n\t\t\tvar searchfor = params.pid;\n\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\n\t\t\tfor(i = 0; i < _items.length; i++) {\n\t\t\t\tif(_items[i].pid === searchfor) {\n\t\t\t\t\tparams.pid = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparams.pid = parseInt(params.pid,10)-1;\n\t\t}\n\t\tif( params.pid < 0 ) {\n\t\t\tparams.pid = 0;\n\t\t}\n\t\treturn params;\n\t},\n\t_updateHash = function() {\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\n\n\t\tif(_numAnimations || _isDragging) {\n\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n\t\t\t// that's why we update hash only when no animations running\n\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(_hashChangedByScript) {\n\t\t\tclearTimeout(_hashChangeTimeout);\n\t\t} else {\n\t\t\t_hashChangedByScript = true;\n\t\t}\n\n\n\t\tvar pid = (_currentItemIndex + 1);\n\t\tvar item = _getItemAt( _currentItemIndex );\n\t\tif(item.hasOwnProperty('pid')) {\n\t\t\t// carry forward any custom pid assigned to the item\n\t\t\tpid = item.pid;\n\t\t}\n\t\tvar newHash = _initialHash + '&'  +  'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n\n\t\tif(!_historyChanged) {\n\t\t\tif(_windowLoc.hash.indexOf(newHash) === -1) {\n\t\t\t\t_urlChangedOnce = true;\n\t\t\t}\n\t\t\t// first time - add new hisory record, then just replace\n\t\t}\n\n\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' +  newHash;\n\n\t\tif( _supportsPushState ) {\n\n\t\t\tif('#' + newHash !== window.location.hash) {\n\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif(_historyChanged) {\n\t\t\t\t_windowLoc.replace( newURL );\n\t\t\t} else {\n\t\t\t\t_windowLoc.hash = newHash;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\n\t\t_historyChanged = true;\n\t\t_hashChangeTimeout = setTimeout(function() {\n\t\t\t_hashChangedByScript = false;\n\t\t}, 60);\n\t};\n\n\n\n\t\n\n_registerModule('History', {\n\n\t\n\n\tpublicMethods: {\n\t\tinitHistory: function() {\n\n\t\t\tframework.extend(_options, _historyDefaultOptions, true);\n\n\t\t\tif( !_options.history ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t_windowLoc = window.location;\n\t\t\t_urlChangedOnce = false;\n\t\t\t_closedFromURL = false;\n\t\t\t_historyChanged = false;\n\t\t\t_initialHash = _getHash();\n\t\t\t_supportsPushState = ('pushState' in history);\n\n\n\t\t\tif(_initialHash.indexOf('gid=') > -1) {\n\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\n\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\n\t\t\t}\n\t\t\t\n\n\t\t\t_listen('afterChange', self.updateURL);\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\n\t\t\t});\n\n\n\t\t\tvar returnToOriginal = function() {\n\t\t\t\t_hashReseted = true;\n\t\t\t\tif(!_closedFromURL) {\n\n\t\t\t\t\tif(_urlChangedOnce) {\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif(_initialHash) {\n\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_supportsPushState) {\n\n\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\n\t\t\t\t\t\t\t\thistory.pushState('', document.title,  _windowLoc.pathname + _windowLoc.search );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_windowLoc.hash = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_cleanHistoryTimeouts();\n\t\t\t};\n\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_closedByScroll) {\n\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n\t\t\t\t\t// this is done to keep the scroll position\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('destroy', function() {\n\t\t\t\tif(!_hashReseted) {\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('firstUpdate', function() {\n\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\n\t\t\t});\n\n\t\t\t\n\n\t\t\t\n\t\t\tvar index = _initialHash.indexOf('pid=');\n\t\t\tif(index > -1) {\n\t\t\t\t_initialHash = _initialHash.substring(0, index);\n\t\t\t\tif(_initialHash.slice(-1) === '&') {\n\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(_isOpen) { // hasn't destroyed yet\n\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\n\t\t\t\t}\n\t\t\t}, 40);\n\t\t\t\n\t\t},\n\t\tonHashChange: function() {\n\n\t\t\tif(_getHash() === _initialHash) {\n\n\t\t\t\t_closedFromURL = true;\n\t\t\t\tself.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!_hashChangedByScript) {\n\n\t\t\t\t_hashChangedByHistory = true;\n\t\t\t\tself.goTo( _parseItemIndexFromURL().pid );\n\t\t\t\t_hashChangedByHistory = false;\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tupdateURL: function() {\n\n\t\t\t// Delay the update of URL, to avoid lag during transition, \n\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n\t\t\t\n\t\t\t_cleanHistoryTimeouts();\n\t\t\t\n\n\t\t\tif(_hashChangedByHistory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_historyChanged) {\n\t\t\t\t_updateHash(); // first time\n\t\t\t} else {\n\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\n\t\t\t}\n\t\t}\n\t\n\t}\n});\n\n\n/*>>history*/\n\tframework.extend(self, publicMethods); };\n\treturn PhotoSwipe;\n});\n},{}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.PhotoSwipe = exports.default = undefined;\n\nvar _photoswipe = require('photoswipe');\n\nvar _photoswipe2 = _interopRequireDefault(_photoswipe);\n\nvar _photoswipeUiDefault = require('./libs/photoswipe-ui-default');\n\nvar _photoswipeUiDefault2 = _interopRequireDefault(_photoswipeUiDefault);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction PhotoSwipeMounter($) {\n    var $defaultGallery = $('<div class=\"pswp\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"><div class=\"pswp__bg\"></div><div class=\"pswp__scroll-wrap\"><div class=\"pswp__container\"><div class=\"pswp__item\"></div><div class=\"pswp__item\"></div><div class=\"pswp__item\"></div></div><div class=\"pswp__ui pswp__ui--hidden\"><div class=\"pswp__top-bar\"><div class=\"pswp__counter\"></div><button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button> <button class=\"pswp__button pswp__button--share\" title=\"Share\"></button> <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button> <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button><div class=\"pswp__preloader\"><div class=\"pswp__preloader__icn\"><div class=\"pswp__preloader__cut\"><div class=\"pswp__preloader__donut\"></div></div></div></div></div><div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"><div class=\"pswp__share-tooltip\"></div></div><button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"></button> <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"></button><div class=\"pswp__caption\"><div class=\"pswp__caption__center\"></div></div></div></div></div>').appendTo('body'),\n        uid = 1;\n\n    function getImgs($gallery) {\n        var slideSelector = getOptions($gallery).slideSelector;\n\n        return $gallery.find(slideSelector).map(function (index) {\n            var $img = $(this).data('index', index),\n                tagName = this.tagName.toUpperCase();\n\n            if (tagName === 'A') {\n                if (this.hash) {\n                    $img = $(this.hash);\n                } else {\n                    $img = $img.find('img').eq(0);\n                    $img.data('original-src', this.href);\n                }\n            } else if (tagName !== 'IMG') {\n                $img = $img.find('img');\n            }\n\n            return $img[0];\n        });\n    }\n\n    function getThumbBoundsFn($imgs) {\n        return function _getThumbBoundsFn(index) {\n            var $img = $imgs.eq(index),\n                imgOffset = $img.offset(),\n                imgWidth = $img[0].width;\n\n            return { x: imgOffset.left, y: imgOffset.top, w: imgWidth };\n        };\n    }\n\n    function getWH(wh, $img) {\n        var d = $.Deferred(),\n            wh_value = $img.data('original-src-' + wh),\n            original_src = decodeURI($img.data('original-src') || $img.attr('src')),\n            matches = original_src.match(/(\\d+)[*×x](\\d+)/);\n\n        if (wh_value) {\n            d.resolve(wh_value);\n        } else if (matches !== null) {\n            d.resolve(matches[wh === 'width' ? 1 : 2]);\n        } else {\n            $('<img>').on('load', function () {\n                d.resolve(this[wh]);\n            }).attr('src', $img.attr('src'));\n        }\n\n        return d.promise();\n    }\n\n    function getHeight($img) {\n        return getWH('height', $img);\n    }\n\n    function getWidth($img) {\n        return getWH('width', $img);\n    }\n\n    function getImgSize($img) {\n        return $.when(getWidth($img), getHeight($img));\n    }\n\n    function getImgInfo() {\n        var $img = $(this),\n            original_src = $img.data('original-src') || $img.attr('src'),\n            d = $.Deferred();\n\n        if (this.tagName !== 'IMG') {\n            d.resolve({\n                html: this.innerHTML\n            });\n        } else {\n            getImgSize($img).done(function (w, h) {\n                var src = $img.attr('src'),\n                    title,\n                    caption_classname,\n                    $figcaption;\n\n                function get_caption($elem, selector) {\n                    var $parent = $elem.parent(),\n                        $caption_element;\n\n                    if (!$parent.length) {\n                        return undefined;\n                    }\n\n                    $caption_element = $parent.find(selector);\n                    if ($caption_element.length) {\n                        return $caption_element.html();\n                    }\n\n                    return get_caption($parent, selector);\n                }\n\n                // try to find the slide title from :\n                // (in order)\n                //\n                // 1. `data-caption-class` (a class-name that indicates the element containing the caption)\n                // 2. `figcaption` element (the `figcaption` that resides inside a `figure` which contains the slide `img` element)\n                // 3. `alt` attribute (the `alt` attribute of the slide `img` element)\n\n                if (caption_classname = $img.data('caption-class')) {\n                    title = get_caption($img, '.' + caption_classname);\n                } else if (($figcaption = $img.closest('figure').find('figcaption')) && $figcaption.length) {\n                    title = $figcaption.html();\n                } else {\n                    title = $img.attr('alt');\n                }\n\n                d.resolve({\n                    w: w,\n                    h: h,\n                    src: original_src,\n                    msrc: src,\n                    title: title\n                });\n            });\n        }\n\n        return d.promise();\n    }\n\n    function getImgInfoArray($imgs) {\n        var imgInfoArray = $imgs.map(getImgInfo).get(),\n            d = $.Deferred();\n\n        $.when.apply($, imgInfoArray).done(function () {\n            var imgInfoArray = Array.prototype.slice.call(arguments);\n            d.resolve(imgInfoArray);\n        });\n\n        return d.promise();\n    }\n\n    function getOptions($gallery) {\n        return $gallery.data('photoswipeOptions');\n    }\n\n    function addUID($gallery) {\n        if (!$gallery.data('pswp-uid')) {\n            $gallery.data('pswp-uid', uid++);\n        }\n    }\n\n    function openPhotoSwipe(index, $gallery, $imgs, imgInfoArray) {\n        var options = $.extend(getOptions($gallery).globalOptions, { index: index, getThumbBoundsFn: getThumbBoundsFn($imgs), galleryUID: $gallery.data('pswp-uid') }),\n            photoSwipe = new _photoswipe2.default($defaultGallery[0], _photoswipeUiDefault2.default, imgInfoArray, options);\n\n        $.each(getOptions($gallery).events, function (eventName, eventHandler) {\n            photoSwipe.listen(eventName, eventHandler);\n        });\n\n        photoSwipe.init();\n    }\n\n    // parse picture index and gallery index from URL (#&pid=1&gid=2)\n    function photoswipeParseHash() {\n        var hash = window.location.hash.substring(1),\n            params = {};\n\n        if (hash.length < 5) {\n            return params;\n        }\n\n        var vars = hash.split('&');\n        for (var i = 0; i < vars.length; i++) {\n            if (!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');\n            if (pair.length < 2) {\n                continue;\n            }\n            params[pair[0]] = parseInt(pair[1], 10);\n        }\n\n        return params;\n    }\n\n    function openFromURL($galleries) {\n        // Parse URL and open gallery if it contains #&pid=3&gid=1\n        var hashData = photoswipeParseHash();\n        if (hashData.pid && hashData.gid) {\n            (function () {\n                var $gallery = $galleries[hashData.gid - 1],\n                    pid = hashData.pid - 1,\n                    $imgs = getImgs($gallery),\n                    imgInfoArrayPromise = getImgInfoArray($imgs);\n\n                imgInfoArrayPromise.done(function (imgInfoArray) {\n                    openPhotoSwipe(pid, $gallery, $imgs, imgInfoArray);\n                });\n            })();\n        }\n    }\n\n    function addClickHandler($gallery, $imgs, imgInfoArray) {\n        $gallery.on('click.photoswipe', getOptions($gallery).slideSelector, function (e) {\n            e.preventDefault();\n            openPhotoSwipe($(this).data('index'), $gallery, $imgs, imgInfoArray);\n        });\n    }\n\n    function removeClickHandler($gallery) {\n        $gallery.off('click.photoswipe');\n    }\n\n    function update($gallery) {\n        var $imgs = getImgs($gallery),\n            imgInfoArrayPromise = getImgInfoArray($imgs);\n\n        imgInfoArrayPromise.done(function (imgInfoArray) {\n            removeClickHandler($gallery);\n            addClickHandler($gallery, $imgs, imgInfoArray);\n        });\n    }\n\n    $.fn.photoSwipe = function () {\n        var slideSelector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'img';\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var events = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n        var defaultOptions = {\n            bgOpacity: 0.973,\n            showHideOpacity: true\n        },\n            globalOptions = $.extend(defaultOptions, options);\n\n        // Initialize each gallery\n        var $galleries = [],\n            isUpdate = slideSelector === 'update';\n\n        this.each(function () {\n            if (isUpdate) {\n                update($(this));\n                return;\n            }\n\n            var $gallery = $(this).data('photoswipeOptions', { slideSelector: slideSelector, globalOptions: globalOptions, events: events }),\n                // save options\n            $imgs = getImgs($gallery),\n                imgInfoArrayPromise = getImgInfoArray($imgs);\n\n            addUID($gallery);\n            $galleries.push($gallery);\n\n            imgInfoArrayPromise.done(function (imgInfoArray) {\n                addClickHandler($gallery, $imgs, imgInfoArray);\n            });\n        });\n\n        if (!isUpdate) {\n            openFromURL($galleries);\n        }\n\n        return this;\n    };\n\n    // Attach original PhotoSwipe to $.fn.photoSwipe\n    $.fn.photoSwipe.PhotoSwipe = _photoswipe2.default;\n}\n\n\n PhotoSwipeMounter(jQuery);\n \n\nexports.default = PhotoSwipeMounter;\nexports.PhotoSwipe = _photoswipe2.default;\n\n},{\"./libs/photoswipe-ui-default\":3,\"photoswipe\":1}],3:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! PhotoSwipe Default UI - 4.1.1 - 2015-12-24\n* http://photoswipe.com\n* Copyright (c) 2015 Dmitry Semenov; */\n/**\n*\n* UI on top of main sliding area (caption, arrows, close button, etc.).\n* Built just using public methods/properties of PhotoSwipe.\n* \n*/\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipeUI_Default = factory();\n\t}\n})(undefined, function () {\n\n\t'use strict';\n\n\tvar PhotoSwipeUI_Default = function PhotoSwipeUI_Default(pswp, framework) {\n\n\t\tvar ui = this;\n\t\tvar _overlayUIUpdated = false,\n\t\t    _controlsVisible = true,\n\t\t    _fullscrenAPI,\n\t\t    _controls,\n\t\t    _captionContainer,\n\t\t    _fakeCaptionContainer,\n\t\t    _indexIndicator,\n\t\t    _shareButton,\n\t\t    _shareModal,\n\t\t    _shareModalHidden = true,\n\t\t    _initalCloseOnScrollValue,\n\t\t    _isIdle,\n\t\t    _listen,\n\t\t    _loadingIndicator,\n\t\t    _loadingIndicatorHidden,\n\t\t    _loadingIndicatorTimeout,\n\t\t    _galleryHasOneSlide,\n\t\t    _options,\n\t\t    _defaultUIOptions = {\n\t\t\tbarsSize: { top: 44, bottom: 'auto' },\n\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'],\n\t\t\ttimeToIdle: 4000,\n\t\t\ttimeToIdleOutside: 1000,\n\t\t\tloadingIndicatorDelay: 1000, // 2s\n\n\t\t\taddCaptionHTMLFn: function addCaptionHTMLFn(item, captionEl /*, isFake */) {\n\t\t\t\tif (!item.title) {\n\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tcloseEl: true,\n\t\t\tcaptionEl: true,\n\t\t\tfullscreenEl: true,\n\t\t\tzoomEl: true,\n\t\t\tshareEl: true,\n\t\t\tcounterEl: true,\n\t\t\tarrowEl: true,\n\t\t\tpreloaderEl: true,\n\n\t\t\ttapToClose: false,\n\t\t\ttapToToggleControls: true,\n\n\t\t\tclickToCloseNonZoomable: true,\n\n\t\t\tshareButtons: [{ id: 'facebook', label: 'Share on Facebook', url: 'https://www.facebook.com/sharer/sharer.php?u={{url}}' }, { id: 'twitter', label: 'Tweet', url: 'https://twitter.com/intent/tweet?text={{text}}&url={{url}}' }, { id: 'pinterest', label: 'Pin it', url: 'http://www.pinterest.com/pin/create/button/' + '?url={{url}}&media={{image_url}}&description={{text}}' }, { id: 'download', label: 'Download image', url: '{{raw_image_url}}', download: true }],\n\t\t\tgetImageURLForShare: function getImageURLForShare() /* shareButtonData */{\n\t\t\t\treturn pswp.currItem.src || '';\n\t\t\t},\n\t\t\tgetPageURLForShare: function getPageURLForShare() /* shareButtonData */{\n\t\t\t\treturn window.location.href;\n\t\t\t},\n\t\t\tgetTextForShare: function getTextForShare() /* shareButtonData */{\n\t\t\t\treturn pswp.currItem.title || '';\n\t\t\t},\n\n\t\t\tindexIndicatorSep: ' / ',\n\t\t\tfitControlsWidth: 1200\n\n\t\t},\n\t\t    _blockControlsTap,\n\t\t    _blockControlsTapTimeout;\n\n\t\tvar _onControlsTap = function _onControlsTap(e) {\n\t\t\tif (_blockControlsTap) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\te = e || window.event;\n\n\t\t\tif (_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n\t\t\t\t// reset idle timer\n\t\t\t\t_onIdleMouseMove();\n\t\t\t}\n\n\t\t\tvar target = e.target || e.srcElement,\n\t\t\t    uiElement,\n\t\t\t    clickedClass = target.getAttribute('class') || '',\n\t\t\t    found;\n\n\t\t\tfor (var i = 0; i < _uiElements.length; i++) {\n\t\t\t\tuiElement = _uiElements[i];\n\t\t\t\tif (uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name) > -1) {\n\t\t\t\t\tuiElement.onTap();\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (found) {\n\t\t\t\tif (e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\t_blockControlsTap = true;\n\n\t\t\t\t// Some versions of Android don't prevent ghost click event \n\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\n\t\t\t\t// \n\t\t\t\t// This happens on v4.3, 4.2, 4.1, \n\t\t\t\t// older versions strangely work correctly, \n\t\t\t\t// but just in case we add delay on all of them)\t\n\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\n\t\t\t\t_blockControlsTapTimeout = setTimeout(function () {\n\t\t\t\t\t_blockControlsTap = false;\n\t\t\t\t}, tapDelay);\n\t\t\t}\n\t\t},\n\t\t    _fitControlsInViewport = function _fitControlsInViewport() {\n\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\n\t\t},\n\t\t    _togglePswpClass = function _togglePswpClass(el, cName, add) {\n\t\t\tframework[(add ? 'add' : 'remove') + 'Class'](el, 'pswp__' + cName);\n\t\t},\n\n\n\t\t// add class when there is just one item in the gallery\n\t\t// (by default it hides left/right arrows and 1ofX counter)\n\t\t_countNumItems = function _countNumItems() {\n\t\t\tvar hasOneSlide = _options.getNumItemsFn() === 1;\n\n\t\t\tif (hasOneSlide !== _galleryHasOneSlide) {\n\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n\t\t\t\t_galleryHasOneSlide = hasOneSlide;\n\t\t\t}\n\t\t},\n\t\t    _toggleShareModalClass = function _toggleShareModalClass() {\n\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n\t\t},\n\t\t    _toggleShareModal = function _toggleShareModal() {\n\n\t\t\t_shareModalHidden = !_shareModalHidden;\n\n\t\t\tif (!_shareModalHidden) {\n\t\t\t\t_toggleShareModalClass();\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (!_shareModalHidden) {\n\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\t\t}\n\t\t\t\t}, 30);\n\t\t\t} else {\n\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (_shareModalHidden) {\n\t\t\t\t\t\t_toggleShareModalClass();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t}\n\n\t\t\tif (!_shareModalHidden) {\n\t\t\t\t_updateShareURLs();\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t    _openWindowPopup = function _openWindowPopup(e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tpswp.shout('shareLinkClick', e, target);\n\n\t\t\tif (!target.href) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (target.hasAttribute('download')) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,' + 'location=yes,width=550,height=420,top=100,left=' + (window.screen ? Math.round(screen.width / 2 - 275) : 100));\n\n\t\t\tif (!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\t    _updateShareURLs = function _updateShareURLs() {\n\t\t\tvar shareButtonOut = '',\n\t\t\t    shareButtonData,\n\t\t\t    shareURL,\n\t\t\t    image_url,\n\t\t\t    page_url,\n\t\t\t    share_text;\n\n\t\t\tfor (var i = 0; i < _options.shareButtons.length; i++) {\n\t\t\t\tshareButtonData = _options.shareButtons[i];\n\n\t\t\t\timage_url = _options.getImageURLForShare(shareButtonData);\n\t\t\t\tpage_url = _options.getPageURLForShare(shareButtonData);\n\t\t\t\tshare_text = _options.getTextForShare(shareButtonData);\n\n\t\t\t\tshareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url)).replace('{{image_url}}', encodeURIComponent(image_url)).replace('{{raw_image_url}}', image_url).replace('{{text}}', encodeURIComponent(share_text));\n\n\t\t\t\tshareButtonOut += '<a href=\"' + shareURL + '\" target=\"_blank\" ' + 'class=\"pswp__share--' + shareButtonData.id + '\"' + (shareButtonData.download ? 'download' : '') + '>' + shareButtonData.label + '</a>';\n\n\t\t\t\tif (_options.parseShareButtonOut) {\n\t\t\t\t\tshareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_shareModal.children[0].innerHTML = shareButtonOut;\n\t\t\t_shareModal.children[0].onclick = _openWindowPopup;\n\t\t},\n\t\t    _hasCloseClass = function _hasCloseClass(target) {\n\t\t\tfor (var i = 0; i < _options.closeElClasses.length; i++) {\n\t\t\t\tif (framework.hasClass(target, 'pswp__' + _options.closeElClasses[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t    _idleInterval,\n\t\t    _idleTimer,\n\t\t    _idleIncrement = 0,\n\t\t    _onIdleMouseMove = function _onIdleMouseMove() {\n\t\t\tclearTimeout(_idleTimer);\n\t\t\t_idleIncrement = 0;\n\t\t\tif (_isIdle) {\n\t\t\t\tui.setIdle(false);\n\t\t\t}\n\t\t},\n\t\t    _onMouseLeaveWindow = function _onMouseLeaveWindow(e) {\n\t\t\te = e ? e : window.event;\n\t\t\tvar from = e.relatedTarget || e.toElement;\n\t\t\tif (!from || from.nodeName === 'HTML') {\n\t\t\t\tclearTimeout(_idleTimer);\n\t\t\t\t_idleTimer = setTimeout(function () {\n\t\t\t\t\tui.setIdle(true);\n\t\t\t\t}, _options.timeToIdleOutside);\n\t\t\t}\n\t\t},\n\t\t    _setupFullscreenAPI = function _setupFullscreenAPI() {\n\t\t\tif (_options.fullscreenEl && !framework.features.isOldAndroid) {\n\t\t\t\tif (!_fullscrenAPI) {\n\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\n\t\t\t\t}\n\t\t\t\tif (_fullscrenAPI) {\n\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tui.updateFullscreen();\n\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t} else {\n\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t    _setupLoadingIndicator = function _setupLoadingIndicator() {\n\t\t\t// Setup loading indicator\n\t\t\tif (_options.preloaderEl) {\n\n\t\t\t\t_toggleLoadingIndicator(true);\n\n\t\t\t\t_listen('beforeChange', function () {\n\n\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\n\n\t\t\t\t\t// display loading indicator with delay\n\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function () {\n\n\t\t\t\t\t\tif (pswp.currItem && pswp.currItem.loading) {\n\n\t\t\t\t\t\t\tif (!pswp.allowProgressiveImg() || pswp.currItem.img && !pswp.currItem.img.naturalWidth) {\n\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \n\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false);\n\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.loadingIndicatorDelay);\n\t\t\t\t});\n\t\t\t\t_listen('imageLoadComplete', function (index, item) {\n\t\t\t\t\tif (pswp.currItem === item) {\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t    _toggleLoadingIndicator = function _toggleLoadingIndicator(hide) {\n\t\t\tif (_loadingIndicatorHidden !== hide) {\n\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n\t\t\t\t_loadingIndicatorHidden = hide;\n\t\t\t}\n\t\t},\n\t\t    _applyNavBarGaps = function _applyNavBarGaps(item) {\n\t\t\tvar gap = item.vGap;\n\n\t\t\tif (_fitControlsInViewport()) {\n\n\t\t\t\tvar bars = _options.barsSize;\n\t\t\t\tif (_options.captionEl && bars.bottom === 'auto') {\n\t\t\t\t\tif (!_fakeCaptionContainer) {\n\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n\t\t\t\t\t\t_fakeCaptionContainer.appendChild(framework.createEl('pswp__caption__center'));\n\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\n\t\t\t\t\t}\n\t\t\t\t\tif (_options.addCaptionHTMLFn(item, _fakeCaptionContainer, true)) {\n\n\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\n\t\t\t\t\t\tgap.bottom = parseInt(captionSize, 10) || 44;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n\t\t\t\t}\n\n\t\t\t\t// height of top bar is static, no need to calculate it\n\t\t\t\tgap.top = bars.top;\n\t\t\t} else {\n\t\t\t\tgap.top = gap.bottom = 0;\n\t\t\t}\n\t\t},\n\t\t    _setupIdle = function _setupIdle() {\n\t\t\t// Hide controls when mouse is used\n\t\t\tif (_options.timeToIdle) {\n\t\t\t\t_listen('mouseUsed', function () {\n\n\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n\t\t\t\t\t_idleInterval = setInterval(function () {\n\t\t\t\t\t\t_idleIncrement++;\n\t\t\t\t\t\tif (_idleIncrement === 2) {\n\t\t\t\t\t\t\tui.setIdle(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.timeToIdle / 2);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t    _setupHidingControlsDuringGestures = function _setupHidingControlsDuringGestures() {\n\n\t\t\t// Hide controls on vertical drag\n\t\t\t_listen('onVerticalDrag', function (now) {\n\t\t\t\tif (_controlsVisible && now < 0.95) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else if (!_controlsVisible && now >= 0.95) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Hide controls when pinching to close\n\t\t\tvar pinchControlsHidden;\n\t\t\t_listen('onPinchClose', function (now) {\n\t\t\t\tif (_controlsVisible && now < 0.9) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t\tpinchControlsHidden = true;\n\t\t\t\t} else if (pinchControlsHidden && !_controlsVisible && now > 0.9) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('zoomGestureEnded', function () {\n\t\t\t\tpinchControlsHidden = false;\n\t\t\t\tif (pinchControlsHidden && !_controlsVisible) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvar _uiElements = [{\n\t\t\tname: 'caption',\n\t\t\toption: 'captionEl',\n\t\t\tonInit: function onInit(el) {\n\t\t\t\t_captionContainer = el;\n\t\t\t}\n\t\t}, {\n\t\t\tname: 'share-modal',\n\t\t\toption: 'shareEl',\n\t\t\tonInit: function onInit(el) {\n\t\t\t\t_shareModal = el;\n\t\t\t},\n\t\t\tonTap: function onTap() {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t}, {\n\t\t\tname: 'button--share',\n\t\t\toption: 'shareEl',\n\t\t\tonInit: function onInit(el) {\n\t\t\t\t_shareButton = el;\n\t\t\t},\n\t\t\tonTap: function onTap() {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t}, {\n\t\t\tname: 'button--zoom',\n\t\t\toption: 'zoomEl',\n\t\t\tonTap: pswp.toggleDesktopZoom\n\t\t}, {\n\t\t\tname: 'counter',\n\t\t\toption: 'counterEl',\n\t\t\tonInit: function onInit(el) {\n\t\t\t\t_indexIndicator = el;\n\t\t\t}\n\t\t}, {\n\t\t\tname: 'button--close',\n\t\t\toption: 'closeEl',\n\t\t\tonTap: pswp.close\n\t\t}, {\n\t\t\tname: 'button--arrow--left',\n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.prev\n\t\t}, {\n\t\t\tname: 'button--arrow--right',\n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.next\n\t\t}, {\n\t\t\tname: 'button--fs',\n\t\t\toption: 'fullscreenEl',\n\t\t\tonTap: function onTap() {\n\t\t\t\tif (_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t} else {\n\t\t\t\t\t_fullscrenAPI.enter();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tname: 'preloader',\n\t\t\toption: 'preloaderEl',\n\t\t\tonInit: function onInit(el) {\n\t\t\t\t_loadingIndicator = el;\n\t\t\t}\n\t\t}];\n\n\t\tvar _setupUIElements = function _setupUIElements() {\n\t\t\tvar item, classAttr, uiElement;\n\n\t\t\tvar loopThroughChildElements = function loopThroughChildElements(sChildren) {\n\t\t\t\tif (!sChildren) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar l = sChildren.length;\n\t\t\t\tfor (var i = 0; i < l; i++) {\n\t\t\t\t\titem = sChildren[i];\n\t\t\t\t\tclassAttr = item.className;\n\n\t\t\t\t\tfor (var a = 0; a < _uiElements.length; a++) {\n\t\t\t\t\t\tuiElement = _uiElements[a];\n\n\t\t\t\t\t\tif (classAttr.indexOf('pswp__' + uiElement.name) > -1) {\n\n\t\t\t\t\t\t\tif (_options[uiElement.option]) {\n\t\t\t\t\t\t\t\t// if element is not disabled from options\n\n\t\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t\tif (uiElement.onInit) {\n\t\t\t\t\t\t\t\t\tuiElement.onInit(item);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t//item.style.display = 'block';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t\t//item.style.display = 'none';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tloopThroughChildElements(_controls.children);\n\n\t\t\tvar topBar = framework.getChildByClass(_controls, 'pswp__top-bar');\n\t\t\tif (topBar) {\n\t\t\t\tloopThroughChildElements(topBar.children);\n\t\t\t}\n\t\t};\n\n\t\tui.init = function () {\n\n\t\t\t// extend options\n\t\t\tframework.extend(pswp.options, _defaultUIOptions, true);\n\n\t\t\t// create local link for fast access\n\t\t\t_options = pswp.options;\n\n\t\t\t// find pswp__ui element\n\t\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n\t\t\t// create local link\n\t\t\t_listen = pswp.listen;\n\n\t\t\t_setupHidingControlsDuringGestures();\n\n\t\t\t// update controls when slides change\n\t\t\t_listen('beforeChange', ui.update);\n\n\t\t\t// toggle zoom on double-tap\n\t\t\t_listen('doubleTap', function (point) {\n\t\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\n\t\t\t\tif (pswp.getZoomLevel() !== initialZoomLevel) {\n\t\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\n\t\t\t\t} else {\n\t\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Allow text selection in caption\n\t\t\t_listen('preventDragEvent', function (e, isDown, preventObj) {\n\t\t\t\tvar t = e.target || e.srcElement;\n\t\t\t\tif (t && t.getAttribute('class') && e.type.indexOf('mouse') > -1 && (t.getAttribute('class').indexOf('__caption') > 0 || /(SMALL|STRONG|EM)/i.test(t.tagName))) {\n\t\t\t\t\tpreventObj.prevent = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// bind events for UI\n\t\t\t_listen('bindEvents', function () {\n\t\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n\t\t\t\tif (!pswp.likelyTouchDevice) {\n\t\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// unbind events for UI\n\t\t\t_listen('unbindEvents', function () {\n\t\t\t\tif (!_shareModalHidden) {\n\t\t\t\t\t_toggleShareModal();\n\t\t\t\t}\n\n\t\t\t\tif (_idleInterval) {\n\t\t\t\t\tclearInterval(_idleInterval);\n\t\t\t\t}\n\t\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n\t\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\t\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n\t\t\t\tif (_fullscrenAPI) {\n\t\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tif (_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t\t_options.hideAnimationDuration = 0;\n\t\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t\t}\n\t\t\t\t\t_fullscrenAPI = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// clean up things when gallery is destroyed\n\t\t\t_listen('destroy', function () {\n\t\t\t\tif (_options.captionEl) {\n\t\t\t\t\tif (_fakeCaptionContainer) {\n\t\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\n\t\t\t\t\t}\n\t\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\n\t\t\t\t}\n\n\t\t\t\tif (_shareModal) {\n\t\t\t\t\t_shareModal.children[0].onclick = null;\n\t\t\t\t}\n\t\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\n\t\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\n\t\t\t\tui.setIdle(false);\n\t\t\t});\n\n\t\t\tif (!_options.showAnimationDuration) {\n\t\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\n\t\t\t}\n\t\t\t_listen('initialZoomIn', function () {\n\t\t\t\tif (_options.showAnimationDuration) {\n\t\t\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('initialZoomOut', function () {\n\t\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\n\t\t\t});\n\n\t\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\n\n\t\t\t_setupUIElements();\n\n\t\t\tif (_options.shareEl && _shareButton && _shareModal) {\n\t\t\t\t_shareModalHidden = true;\n\t\t\t}\n\n\t\t\t_countNumItems();\n\n\t\t\t_setupIdle();\n\n\t\t\t_setupFullscreenAPI();\n\n\t\t\t_setupLoadingIndicator();\n\t\t};\n\n\t\tui.setIdle = function (isIdle) {\n\t\t\t_isIdle = isIdle;\n\t\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\n\t\t};\n\n\t\tui.update = function () {\n\t\t\t// Don't update UI if it's hidden\n\t\t\tif (_controlsVisible && pswp.currItem) {\n\n\t\t\t\tui.updateIndexIndicator();\n\n\t\t\t\tif (_options.captionEl) {\n\t\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n\t\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n\t\t\t\t}\n\n\t\t\t\t_overlayUIUpdated = true;\n\t\t\t} else {\n\t\t\t\t_overlayUIUpdated = false;\n\t\t\t}\n\n\t\t\tif (!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n\t\t\t_countNumItems();\n\t\t};\n\n\t\tui.updateFullscreen = function (e) {\n\n\t\t\tif (e) {\n\t\t\t\t// some browsers change window scroll position during the fullscreen\n\t\t\t\t// so PhotoSwipe updates it just in case\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tpswp.setScrollOffset(0, framework.getScrollY());\n\t\t\t\t}, 50);\n\t\t\t}\n\n\t\t\t// toogle pswp--fs class on root element\n\t\t\tframework[(_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class'](pswp.template, 'pswp--fs');\n\t\t};\n\n\t\tui.updateIndexIndicator = function () {\n\t\t\tif (_options.counterEl) {\n\t\t\t\t_indexIndicator.innerHTML = pswp.getCurrentIndex() + 1 + _options.indexIndicatorSep + _options.getNumItemsFn();\n\t\t\t}\n\t\t};\n\n\t\tui.onGlobalTap = function (e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tif (_blockControlsTap) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.detail && e.detail.pointerType === 'mouse') {\n\n\t\t\t\t// close gallery if clicked outside of the image\n\t\t\t\tif (_hasCloseClass(target)) {\n\t\t\t\t\tpswp.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (framework.hasClass(target, 'pswp__img')) {\n\t\t\t\t\tif (pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n\t\t\t\t\t\tif (_options.clickToCloseNonZoomable) {\n\t\t\t\t\t\t\tpswp.close();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\n\t\t\t\tif (_options.tapToToggleControls) {\n\t\t\t\t\tif (_controlsVisible) {\n\t\t\t\t\t\tui.hideControls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tui.showControls();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// tap to close gallery\n\t\t\t\tif (_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target))) {\n\t\t\t\t\tpswp.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tui.onMouseOver = function (e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\t// add class when mouse is over an element that should close the gallery\n\t\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n\t\t};\n\n\t\tui.hideControls = function () {\n\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\n\t\t\t_controlsVisible = false;\n\t\t};\n\n\t\tui.showControls = function () {\n\t\t\t_controlsVisible = true;\n\t\t\tif (!_overlayUIUpdated) {\n\t\t\t\tui.update();\n\t\t\t}\n\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\n\t\t};\n\n\t\tui.supportsFullscreen = function () {\n\t\t\tvar d = document;\n\t\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n\t\t};\n\n\t\tui.getFullscreenAPI = function () {\n\t\t\tvar dE = document.documentElement,\n\t\t\t    api,\n\t\t\t    tF = 'fullscreenchange';\n\n\t\t\tif (dE.requestFullscreen) {\n\t\t\t\tapi = {\n\t\t\t\t\tenterK: 'requestFullscreen',\n\t\t\t\t\texitK: 'exitFullscreen',\n\t\t\t\t\telementK: 'fullscreenElement',\n\t\t\t\t\teventK: tF\n\t\t\t\t};\n\t\t\t} else if (dE.mozRequestFullScreen) {\n\t\t\t\tapi = {\n\t\t\t\t\tenterK: 'mozRequestFullScreen',\n\t\t\t\t\texitK: 'mozCancelFullScreen',\n\t\t\t\t\telementK: 'mozFullScreenElement',\n\t\t\t\t\teventK: 'moz' + tF\n\t\t\t\t};\n\t\t\t} else if (dE.webkitRequestFullscreen) {\n\t\t\t\tapi = {\n\t\t\t\t\tenterK: 'webkitRequestFullscreen',\n\t\t\t\t\texitK: 'webkitExitFullscreen',\n\t\t\t\t\telementK: 'webkitFullscreenElement',\n\t\t\t\t\teventK: 'webkit' + tF\n\t\t\t\t};\n\t\t\t} else if (dE.msRequestFullscreen) {\n\t\t\t\tapi = {\n\t\t\t\t\tenterK: 'msRequestFullscreen',\n\t\t\t\t\texitK: 'msExitFullscreen',\n\t\t\t\t\telementK: 'msFullscreenElement',\n\t\t\t\t\teventK: 'MSFullscreenChange'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (api) {\n\t\t\t\tapi.enter = function () {\n\t\t\t\t\t// disable close-on-scroll in fullscreen\n\t\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll;\n\t\t\t\t\t_options.closeOnScroll = false;\n\n\t\t\t\t\tif (this.enterK === 'webkitRequestFullscreen') {\n\t\t\t\t\t\tpswp.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn pswp.template[this.enterK]();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tapi.exit = function () {\n\t\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\n\n\t\t\t\t\treturn document[this.exitK]();\n\t\t\t\t};\n\t\t\t\tapi.isFullscreen = function () {\n\t\t\t\t\treturn document[this.elementK];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn api;\n\t\t};\n\t};\n\treturn PhotoSwipeUI_Default;\n});\n\n},{}]},{},[2]);\n","\n/**\n * Load required plugins.\n */\nwindow.imagesLoaded = require('imagesloaded/imagesloaded.pkgd');\nwindow.Shuffle = require('shufflejs/dist/shuffle.min.js');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Shuffle');\n\n  page.initShuffle = function() {\n    if ( undefined === window['Shuffle'] || 0 === $('[data-provide=\"shuffle\"]').length ) {\n      return;\n    }\n\n    var Shuffle = window.Shuffle;\n\n    $('[data-provide=\"shuffle\"]').each(function(){\n\n      var list    = $(this).find('[data-shuffle=\"list\"]');\n      var filter  = $(this).find('[data-shuffle=\"filter\"]');\n      var search  = $(this).find('[data-shuffle=\"search\"]');\n      var options = {\n        itemSelector: '[data-shuffle=\"item\"]',\n        sizer:        '[data-shuffle=\"sizer\"]',\n        delimeter:    ',',\n        speed:        500,\n      };\n\n      var shuffleInstance = new Shuffle(list, options);\n\n      if ( filter.length ) {\n\n        $(filter).find('[data-shuffle=\"button\"]').each( function() {\n          $(this).on('click', function() {\n            var btn = $(this);\n            var isActive = btn.hasClass('active');\n            var btnGroup = btn.data('group');\n\n            if (isActive) {\n              return;\n            }\n\n            $(this).closest('[data-shuffle=\"filter\"]').find('[data-shuffle=\"button\"].active').removeClass('active');\n\n            var filterGroup;\n            if (isActive) {\n              btn.removeClass('active');\n              filterGroup = Shuffle.ALL_ITEMS;\n            } else {\n              btn.addClass('active');\n              filterGroup = btnGroup;\n            }\n\n            shuffleInstance.filter(filterGroup);\n          });\n        });\n\n      } //End if\n\n\n      if ( search.length ) {\n        search.on('input mouseup change', function() {\n          var searchText = $(this).val().toLowerCase();\n          shuffleInstance.filter(function(element, shuffle) {\n            var itemText = element.textContent.toLowerCase().trim();\n            return itemText.indexOf(searchText) !== -1;\n          });\n        });\n      }\n\n\n      $( this ).imagesLoaded( function() {\n        shuffleInstance.layout()\n      });\n\n\n    });\n\n\n  }\n\n}(jQuery);\n\n\n\n","/*!\n * imagesLoaded PACKAGED v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( 'ev-emitter/ev-emitter',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i]\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n  // universal module definition\n\n  /*global define: false, module: false, require: false */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.imagesLoaded = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// --------------------------  factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n  // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n  if ( !( this instanceof ImagesLoaded ) ) {\n    return new ImagesLoaded( elem, options, onAlways );\n  }\n  // use elem as selector string\n  var queryElem = elem;\n  if ( typeof elem == 'string' ) {\n    queryElem = document.querySelectorAll( elem );\n  }\n  // bail if bad element\n  if ( !queryElem ) {\n    console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n    return;\n  }\n\n  this.elements = makeArray( queryElem );\n  this.options = extend( {}, this.options );\n  // shift arguments if no options set\n  if ( typeof options == 'function' ) {\n    onAlways = options;\n  } else {\n    extend( this.options, options );\n  }\n\n  if ( onAlways ) {\n    this.on( 'always', onAlways );\n  }\n\n  this.getImages();\n\n  if ( $ ) {\n    // add jQuery Deferred object\n    this.jqDeferred = new $.Deferred();\n  }\n\n  // HACK check async to allow time to bind listeners\n  setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n  this.images = [];\n\n  // filter & find items if we have an item selector\n  this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n  // filter siblings\n  if ( elem.nodeName == 'IMG' ) {\n    this.addImage( elem );\n  }\n  // get background image on element\n  if ( this.options.background === true ) {\n    this.addElementBackgroundImages( elem );\n  }\n\n  // find children\n  // no non-element nodes, #143\n  var nodeType = elem.nodeType;\n  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n    return;\n  }\n  var childImgs = elem.querySelectorAll('img');\n  // concat childElems to filterFound array\n  for ( var i=0; i < childImgs.length; i++ ) {\n    var img = childImgs[i];\n    this.addImage( img );\n  }\n\n  // get child background images\n  if ( typeof this.options.background == 'string' ) {\n    var children = elem.querySelectorAll( this.options.background );\n    for ( i=0; i < children.length; i++ ) {\n      var child = children[i];\n      this.addElementBackgroundImages( child );\n    }\n  }\n};\n\nvar elementNodeTypes = {\n  1: true,\n  9: true,\n  11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n    return;\n  }\n  // get url inside url(\"...\")\n  var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n  var matches = reURL.exec( style.backgroundImage );\n  while ( matches !== null ) {\n    var url = matches && matches[2];\n    if ( url ) {\n      this.addBackground( url, elem );\n    }\n    matches = reURL.exec( style.backgroundImage );\n  }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n  var loadingImage = new LoadingImage( img );\n  this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n  var background = new Background( url, elem );\n  this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n  var _this = this;\n  this.progressedCount = 0;\n  this.hasAnyBroken = false;\n  // complete if no images\n  if ( !this.images.length ) {\n    this.complete();\n    return;\n  }\n\n  function onProgress( image, elem, message ) {\n    // HACK - Chrome triggers event before object properties have changed. #83\n    setTimeout( function() {\n      _this.progress( image, elem, message );\n    });\n  }\n\n  this.images.forEach( function( loadingImage ) {\n    loadingImage.once( 'progress', onProgress );\n    loadingImage.check();\n  });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n  this.progressedCount++;\n  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n  // progress event\n  this.emitEvent( 'progress', [ this, image, elem ] );\n  if ( this.jqDeferred && this.jqDeferred.notify ) {\n    this.jqDeferred.notify( this, image );\n  }\n  // check if completed\n  if ( this.progressedCount == this.images.length ) {\n    this.complete();\n  }\n\n  if ( this.options.debug && console ) {\n    console.log( 'progress: ' + message, image, elem );\n  }\n};\n\nImagesLoaded.prototype.complete = function() {\n  var eventName = this.hasAnyBroken ? 'fail' : 'done';\n  this.isComplete = true;\n  this.emitEvent( eventName, [ this ] );\n  this.emitEvent( 'always', [ this ] );\n  if ( this.jqDeferred ) {\n    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n    this.jqDeferred[ jqMethod ]( this );\n  }\n};\n\n// --------------------------  -------------------------- //\n\nfunction LoadingImage( img ) {\n  this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n  // If complete is true and browser supports natural sizes,\n  // try to check for image status manually.\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    // report based on naturalWidth\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    return;\n  }\n\n  // If none of the checks above matched, simulate loading on detached element.\n  this.proxyImage = new Image();\n  this.proxyImage.addEventListener( 'load', this );\n  this.proxyImage.addEventListener( 'error', this );\n  // bind to image as well for Firefox. #191\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n  // check for non-zero, non-undefined naturalWidth\n  // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n  return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nLoadingImage.prototype.onload = function() {\n  this.confirm( true, 'onload' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n  this.confirm( false, 'onerror' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n  this.proxyImage.removeEventListener( 'load', this );\n  this.proxyImage.removeEventListener( 'error', this );\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n  this.url = url;\n  this.element = element;\n  this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.img.src = this.url;\n  // check if image is already complete\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    this.unbindEvents();\n  }\n};\n\nBackground.prototype.unbindEvents = function() {\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n  jQuery = jQuery || window.jQuery;\n  if ( !jQuery ) {\n    return;\n  }\n  // set local variable\n  $ = jQuery;\n  // $().imagesLoaded()\n  $.fn.imagesLoaded = function( options, callback ) {\n    var instance = new ImagesLoaded( this, options, callback );\n    return instance.jqDeferred.promise( $(this) );\n  };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// --------------------------  -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=t||self).Shuffle=e()}(this,function(){\"use strict\";function t(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function i(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}function n(t){return(n=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function o(t,e){return!e||\"object\"!=typeof e&&\"function\"!=typeof e?function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t):e}function r(){}r.prototype={on:function(t,e,i){var n=this.e||(this.e={});return(n[t]||(n[t]=[])).push({fn:e,ctx:i}),this},once:function(t,e,i){var n=this;function s(){n.off(t,s),e.apply(i,arguments)}return s._=e,this.on(t,s,i)},emit:function(t){for(var e=[].slice.call(arguments,1),i=((this.e||(this.e={}))[t]||[]).slice(),n=0,s=i.length;n<s;n++)i[n].fn.apply(i[n].ctx,e);return this},off:function(t,e){var i=this.e||(this.e={}),n=i[t],s=[];if(n&&e)for(var o=0,r=n.length;o<r;o++)n[o].fn!==e&&n[o].fn._!==e&&s.push(n[o]);return s.length?i[t]=s:delete i[t],this}};var l=r,a=r;l.TinyEmitter=a;var u=\"undefined\"!=typeof Element?Element.prototype:{},h=u.matches||u.matchesSelector||u.webkitMatchesSelector||u.mozMatchesSelector||u.msMatchesSelector||u.oMatchesSelector,f=function(t,e){if(!t||1!==t.nodeType)return!1;if(h)return h.call(t,e);for(var i=t.parentNode.querySelectorAll(e),n=0;n<i.length;n++)if(i[n]==t)return!0;return!1};var c=function(t,e){var i,n,s,o,r=0;return function(){i=this,n=arguments;var t=new Date-r;return o||(t>=e?l():o=setTimeout(l,e-t)),s};function l(){o=0,r=+new Date,s=t.apply(i,n),i=null,n=null}};function d(){}function m(t){return parseFloat(t)||0}var p=function(){function e(i,n){t(this,e),this.x=m(i),this.y=m(n)}return i(e,null,[{key:\"equals\",value:function(t,e){return t.x===e.x&&t.y===e.y}}]),e}(),v=function(){function e(i,n,s,o,r){t(this,e),this.id=r,this.left=i,this.top=n,this.width=s,this.height=o}return i(e,null,[{key:\"intersects\",value:function(t,e){return t.left<e.left+e.width&&e.left<t.left+t.width&&t.top<e.top+e.height&&e.top<t.top+t.height}}]),e}(),y={BASE:\"shuffle\",SHUFFLE_ITEM:\"shuffle-item\",VISIBLE:\"shuffle-item--visible\",HIDDEN:\"shuffle-item--hidden\"},g=0,_=function(){function e(i){t(this,e),g+=1,this.id=g,this.element=i,this.isVisible=!0,this.isHidden=!1}return i(e,[{key:\"show\",value:function(){this.isVisible=!0,this.element.classList.remove(y.HIDDEN),this.element.classList.add(y.VISIBLE),this.element.removeAttribute(\"aria-hidden\")}},{key:\"hide\",value:function(){this.isVisible=!1,this.element.classList.remove(y.VISIBLE),this.element.classList.add(y.HIDDEN),this.element.setAttribute(\"aria-hidden\",!0)}},{key:\"init\",value:function(){this.addClasses([y.SHUFFLE_ITEM,y.VISIBLE]),this.applyCss(e.Css.INITIAL),this.scale=e.Scale.VISIBLE,this.point=new p}},{key:\"addClasses\",value:function(t){var e=this;t.forEach(function(t){e.element.classList.add(t)})}},{key:\"removeClasses\",value:function(t){var e=this;t.forEach(function(t){e.element.classList.remove(t)})}},{key:\"applyCss\",value:function(t){var e=this;Object.keys(t).forEach(function(i){e.element.style[i]=t[i]})}},{key:\"dispose\",value:function(){this.removeClasses([y.HIDDEN,y.VISIBLE,y.SHUFFLE_ITEM]),this.element.removeAttribute(\"style\"),this.element=null}}]),e}();_.Css={INITIAL:{position:\"absolute\",top:0,left:0,visibility:\"visible\",willChange:\"transform\"},VISIBLE:{before:{opacity:1,visibility:\"visible\"},after:{transitionDelay:\"\"}},HIDDEN:{before:{opacity:0},after:{visibility:\"hidden\",transitionDelay:\"\"}}},_.Scale={VISIBLE:1,HIDDEN:.001};var E=null,I=function(){if(null!==E)return E;var t=document.body||document.documentElement,e=document.createElement(\"div\");return e.style.cssText=\"width:10px;padding:2px;box-sizing:border-box;\",t.appendChild(e),E=\"10px\"===window.getComputedStyle(e,null).width,t.removeChild(e),E};function b(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.getComputedStyle(t,null),n=m(i[e]);return I()||\"width\"!==e?I()||\"height\"!==e||(n+=m(i.paddingTop)+m(i.paddingBottom)+m(i.borderTopWidth)+m(i.borderBottomWidth)):n+=m(i.paddingLeft)+m(i.paddingRight)+m(i.borderLeftWidth)+m(i.borderRightWidth),n}var S={reverse:!1,by:null,compare:null,randomize:!1,key:\"element\"};function T(t,e){var i=Object.assign({},S,e),n=Array.from(t),s=!1;return t.length?i.randomize?function(t){for(var e=t.length;e;){e-=1;var i=Math.floor(Math.random()*(e+1)),n=t[i];t[i]=t[e],t[e]=n}return t}(t):(\"function\"==typeof i.by?t.sort(function(t,e){if(s)return 0;var n=i.by(t[i.key]),o=i.by(e[i.key]);return void 0===n&&void 0===o?(s=!0,0):n<o||\"sortFirst\"===n||\"sortLast\"===o?-1:n>o||\"sortLast\"===n||\"sortFirst\"===o?1:0}):\"function\"==typeof i.compare&&t.sort(i.compare),s?n:(i.reverse&&t.reverse(),t)):[]}var k={},w=\"transitionend\",C=0;function L(t){return!!k[t]&&(k[t].element.removeEventListener(w,k[t].listener),k[t]=null,!0)}function D(t,e){var i=w+(C+=1),n=function(t){t.currentTarget===t.target&&(L(i),e(t))};return t.addEventListener(w,n),k[i]={element:t,listener:n},i}function z(t){return Math.max.apply(Math,t)}function M(t,e,i,n){var s=t/e;return Math.abs(Math.round(s)-s)<n&&(s=Math.round(s)),Math.min(Math.ceil(s),i)}function A(t,e,i){if(1===e)return t;for(var n=[],s=0;s<=i-e;s++)n.push(z(t.slice(s,s+e)));return n}function F(t,e){for(var i,n=(i=t,Math.min.apply(Math,i)),s=0,o=t.length;s<o;s++)if(t[s]>=n-e&&t[s]<=n+e)return s;return 0}function x(t,e){var i={};t.forEach(function(t){i[t.top]?i[t.top].push(t):i[t.top]=[t]});var n=[],s=[],o=[];return Object.keys(i).forEach(function(t){var r=i[t];s.push(r);var l,a=r[r.length-1],u=a.left+a.width,h=Math.round((e-u)/2),f=r,c=!1;if(h>0){var d=[];(c=r.every(function(t){var e=new v(t.left+h,t.top,t.width,t.height,t.id),i=!n.some(function(t){return v.intersects(e,t)});return d.push(e),i}))&&(f=d)}if(!c&&r.some(function(t){return n.some(function(e){var i=v.intersects(t,e);return i&&(l=e),i})})){var m=o.findIndex(function(t){return t.includes(l)});o.splice(m,1,s[m])}n=n.concat(f),o.push(f)}),[].concat.apply([],o).sort(function(t,e){return t.id-e.id}).map(function(t){return new p(t.left,t.top)})}function O(t){return Array.from(new Set(t))}var N=0,H=function(e){function r(e){var i,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t(this,r),(i=o(this,n(r).call(this))).options=Object.assign({},r.options,s),i.options.delimeter&&(i.options.delimiter=i.options.delimeter),i.lastSort={},i.group=r.ALL_ITEMS,i.lastFilter=r.ALL_ITEMS,i.isEnabled=!0,i.isDestroyed=!1,i.isInitialized=!1,i._transitions=[],i.isTransitioning=!1,i._queue=[];var l=i._getElementOption(e);if(!l)throw new TypeError(\"Shuffle needs to be initialized with an element.\");return i.element=l,i.id=\"shuffle_\"+N,N+=1,i._init(),i.isInitialized=!0,i}return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(r,l),i(r,[{key:\"_init\",value:function(){if(this.items=this._getItems(),this.options.sizer=this._getElementOption(this.options.sizer),this.element.classList.add(r.Classes.BASE),this._initItems(this.items),this._onResize=this._getResizeFunction(),window.addEventListener(\"resize\",this._onResize),\"complete\"!==document.readyState){var t=this.layout.bind(this);window.addEventListener(\"load\",function e(){window.removeEventListener(\"load\",e),t()})}var e=window.getComputedStyle(this.element,null),i=r.getSize(this.element).width;this._validateStyles(e),this._setColumns(i),this.filter(this.options.group,this.options.initialSort),this.element.offsetWidth,this.setItemTransitions(this.items),this.element.style.transition=\"height \".concat(this.options.speed,\"ms \").concat(this.options.easing)}},{key:\"_getResizeFunction\",value:function(){var t=this._handleResize.bind(this);return this.options.throttle?this.options.throttle(t,this.options.throttleTime):t}},{key:\"_getElementOption\",value:function(t){return\"string\"==typeof t?this.element.querySelector(t):t&&t.nodeType&&1===t.nodeType?t:t&&t.jquery?t[0]:null}},{key:\"_validateStyles\",value:function(t){\"static\"===t.position&&(this.element.style.position=\"relative\"),\"hidden\"!==t.overflow&&(this.element.style.overflow=\"hidden\")}},{key:\"_filter\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lastFilter,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.items,i=this._getFilteredSets(t,e);return this._toggleFilterClasses(i),this.lastFilter=t,\"string\"==typeof t&&(this.group=t),i}},{key:\"_getFilteredSets\",value:function(t,e){var i=this,n=[],s=[];return t===r.ALL_ITEMS?n=e:e.forEach(function(e){i._doesPassFilter(t,e.element)?n.push(e):s.push(e)}),{visible:n,hidden:s}}},{key:\"_doesPassFilter\",value:function(t,e){if(\"function\"==typeof t)return t.call(e,e,this);var i=e.getAttribute(\"data-\"+r.FILTER_ATTRIBUTE_KEY),n=this.options.delimiter?i.split(this.options.delimiter):JSON.parse(i);function s(t){return n.includes(t)}return Array.isArray(t)?this.options.filterMode===r.FilterMode.ANY?t.some(s):t.every(s):n.includes(t)}},{key:\"_toggleFilterClasses\",value:function(t){var e=t.visible,i=t.hidden;e.forEach(function(t){t.show()}),i.forEach(function(t){t.hide()})}},{key:\"_initItems\",value:function(t){t.forEach(function(t){t.init()})}},{key:\"_disposeItems\",value:function(t){t.forEach(function(t){t.dispose()})}},{key:\"_updateItemCount\",value:function(){this.visibleItems=this._getFilteredItems().length}},{key:\"setItemTransitions\",value:function(t){var e=this.options,i=e.speed,n=e.easing,s=this.options.useTransforms?[\"transform\"]:[\"top\",\"left\"],o=Object.keys(_.Css.HIDDEN.before).map(function(t){return t.replace(/([A-Z])/g,function(t,e){return\"-\".concat(e.toLowerCase())})}),r=s.concat(o).join();t.forEach(function(t){t.element.style.transitionDuration=i+\"ms\",t.element.style.transitionTimingFunction=n,t.element.style.transitionProperty=r})}},{key:\"_getItems\",value:function(){var t=this;return Array.from(this.element.children).filter(function(e){return f(e,t.options.itemSelector)}).map(function(t){return new _(t)})}},{key:\"_mergeNewItems\",value:function(t){var e=Array.from(this.element.children);return T(this.items.concat(t),{by:function(t){return e.indexOf(t)}})}},{key:\"_getFilteredItems\",value:function(){return this.items.filter(function(t){return t.isVisible})}},{key:\"_getConcealedItems\",value:function(){return this.items.filter(function(t){return!t.isVisible})}},{key:\"_getColumnSize\",value:function(t,e){var i;return 0===(i=\"function\"==typeof this.options.columnWidth?this.options.columnWidth(t):this.options.sizer?r.getSize(this.options.sizer).width:this.options.columnWidth?this.options.columnWidth:this.items.length>0?r.getSize(this.items[0].element,!0).width:t)&&(i=t),i+e}},{key:\"_getGutterSize\",value:function(t){return\"function\"==typeof this.options.gutterWidth?this.options.gutterWidth(t):this.options.sizer?b(this.options.sizer,\"marginLeft\"):this.options.gutterWidth}},{key:\"_setColumns\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r.getSize(this.element).width,e=this._getGutterSize(t),i=this._getColumnSize(t,e),n=(t+e)/i;Math.abs(Math.round(n)-n)<this.options.columnThreshold&&(n=Math.round(n)),this.cols=Math.max(Math.floor(n||0),1),this.containerWidth=t,this.colWidth=i}},{key:\"_setContainerSize\",value:function(){this.element.style.height=this._getContainerSize()+\"px\"}},{key:\"_getContainerSize\",value:function(){return z(this.positions)}},{key:\"_getStaggerAmount\",value:function(t){return Math.min(t*this.options.staggerAmount,this.options.staggerAmountMax)}},{key:\"_dispatch\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.isDestroyed||(e.shuffle=this,this.emit(t,e))}},{key:\"_resetCols\",value:function(){var t=this.cols;for(this.positions=[];t;)t-=1,this.positions.push(0)}},{key:\"_layout\",value:function(t){var e=this,i=this._getNextPositions(t),n=0;t.forEach(function(t,s){function o(){t.applyCss(_.Css.VISIBLE.after)}if(p.equals(t.point,i[s])&&!t.isHidden)return t.applyCss(_.Css.VISIBLE.before),void o();t.point=i[s],t.scale=_.Scale.VISIBLE,t.isHidden=!1;var r=e.getStylesForTransition(t,_.Css.VISIBLE.before);r.transitionDelay=e._getStaggerAmount(n)+\"ms\",e._queue.push({item:t,styles:r,callback:o}),n+=1})}},{key:\"_getNextPositions\",value:function(t){var e=this;if(this.options.isCentered){var i=t.map(function(t,i){var n=r.getSize(t.element,!0),s=e._getItemPosition(n);return new v(s.x,s.y,n.width,n.height,i)});return this.getTransformedPositions(i,this.containerWidth)}return t.map(function(t){return e._getItemPosition(r.getSize(t.element,!0))})}},{key:\"_getItemPosition\",value:function(t){return function(t){for(var e=t.itemSize,i=t.positions,n=t.gridSize,s=t.total,o=t.threshold,r=t.buffer,l=M(e.width,n,s,o),a=A(i,l,s),u=F(a,r),h=new p(n*u,a[u]),f=a[u]+e.height,c=0;c<l;c++)i[u+c]=f;return h}({itemSize:t,positions:this.positions,gridSize:this.colWidth,total:this.cols,threshold:this.options.columnThreshold,buffer:this.options.buffer})}},{key:\"getTransformedPositions\",value:function(t,e){return x(t,e)}},{key:\"_shrink\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._getConcealedItems(),i=0;e.forEach(function(e){function n(){e.applyCss(_.Css.HIDDEN.after)}if(e.isHidden)return e.applyCss(_.Css.HIDDEN.before),void n();e.scale=_.Scale.HIDDEN,e.isHidden=!0;var s=t.getStylesForTransition(e,_.Css.HIDDEN.before);s.transitionDelay=t._getStaggerAmount(i)+\"ms\",t._queue.push({item:e,styles:s,callback:n}),i+=1})}},{key:\"_handleResize\",value:function(){this.isEnabled&&!this.isDestroyed&&this.update()}},{key:\"getStylesForTransition\",value:function(t,e){var i=Object.assign({},e);if(this.options.useTransforms){var n=this.options.roundTransforms?Math.round(t.point.x):t.point.x,s=this.options.roundTransforms?Math.round(t.point.y):t.point.y;i.transform=\"translate(\".concat(n,\"px, \").concat(s,\"px) scale(\").concat(t.scale,\")\")}else i.left=t.point.x+\"px\",i.top=t.point.y+\"px\";return i}},{key:\"_whenTransitionDone\",value:function(t,e,i){var n=D(t,function(t){e(),i(null,t)});this._transitions.push(n)}},{key:\"_getTransitionFunction\",value:function(t){var e=this;return function(i){t.item.applyCss(t.styles),e._whenTransitionDone(t.item.element,t.callback,i)}}},{key:\"_processQueue\",value:function(){this.isTransitioning&&this._cancelMovement();var t=this.options.speed>0,e=this._queue.length>0;e&&t&&this.isInitialized?this._startTransitions(this._queue):e?(this._styleImmediately(this._queue),this._dispatch(r.EventType.LAYOUT)):this._dispatch(r.EventType.LAYOUT),this._queue.length=0}},{key:\"_startTransitions\",value:function(t){var e=this;this.isTransitioning=!0,function(t,e,i){i||(\"function\"==typeof e?(i=e,e=null):i=d);var n=t&&t.length;if(!n)return i(null,[]);var s=!1,o=new Array(n);function r(t){return function(e,r){if(!s){if(e)return i(e,o),void(s=!0);o[t]=r,--n||i(null,o)}}}t.forEach(e?function(t,i){t.call(e,r(i))}:function(t,e){t(r(e))})}(t.map(function(t){return e._getTransitionFunction(t)}),this._movementFinished.bind(this))}},{key:\"_cancelMovement\",value:function(){this._transitions.forEach(L),this._transitions.length=0,this.isTransitioning=!1}},{key:\"_styleImmediately\",value:function(t){if(t.length){var e=t.map(function(t){return t.item.element});r._skipTransitions(e,function(){t.forEach(function(t){t.item.applyCss(t.styles),t.callback()})})}}},{key:\"_movementFinished\",value:function(){this._transitions.length=0,this.isTransitioning=!1,this._dispatch(r.EventType.LAYOUT)}},{key:\"filter\",value:function(t,e){this.isEnabled&&((!t||t&&0===t.length)&&(t=r.ALL_ITEMS),this._filter(t),this._shrink(),this._updateItemCount(),this.sort(e))}},{key:\"sort\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lastSort;if(this.isEnabled){this._resetCols();var e=T(this._getFilteredItems(),t);this._layout(e),this._processQueue(),this._setContainerSize(),this.lastSort=t}}},{key:\"update\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isEnabled&&(t||this._setColumns(),this.sort())}},{key:\"layout\",value:function(){this.update(!0)}},{key:\"add\",value:function(t){var e=this,i=O(t).map(function(t){return new _(t)});this._initItems(i),this._resetCols();var n=T(this._mergeNewItems(i),this.lastSort),s=this._filter(this.lastFilter,n),o=function(t){return i.includes(t)},r=function(t){t.scale=_.Scale.HIDDEN,t.isHidden=!0,t.applyCss(_.Css.HIDDEN.before),t.applyCss(_.Css.HIDDEN.after)},l=this._getNextPositions(s.visible);s.visible.forEach(function(t,i){o(t)&&(t.point=l[i],r(t),t.applyCss(e.getStylesForTransition(t,{})))}),s.hidden.forEach(function(t){o(t)&&r(t)}),this.element.offsetWidth,this.setItemTransitions(i),this.items=this._mergeNewItems(i),this.filter(this.lastFilter)}},{key:\"disable\",value:function(){this.isEnabled=!1}},{key:\"enable\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.isEnabled=!0,t&&this.update()}},{key:\"remove\",value:function(t){var e=this;if(t.length){var i=O(t),n=i.map(function(t){return e.getItemByElement(t)}).filter(function(t){return!!t});this._toggleFilterClasses({visible:[],hidden:n}),this._shrink(n),this.sort(),this.items=this.items.filter(function(t){return!n.includes(t)}),this._updateItemCount(),this.once(r.EventType.LAYOUT,function(){e._disposeItems(n),i.forEach(function(t){t.parentNode.removeChild(t)}),e._dispatch(r.EventType.REMOVED,{collection:i})})}}},{key:\"getItemByElement\",value:function(t){return this.items.find(function(e){return e.element===t})}},{key:\"resetItems\",value:function(){var t=this;this._disposeItems(this.items),this.isInitialized=!1,this.items=this._getItems(),this._initItems(this.items),this.once(r.EventType.LAYOUT,function(){t.setItemTransitions(t.items),t.isInitialized=!0}),this.filter(this.lastFilter)}},{key:\"destroy\",value:function(){this._cancelMovement(),window.removeEventListener(\"resize\",this._onResize),this.element.classList.remove(\"shuffle\"),this.element.removeAttribute(\"style\"),this._disposeItems(this.items),this.items.length=0,this._transitions.length=0,this.options.sizer=null,this.element=null,this.isDestroyed=!0,this.isEnabled=!1}}],[{key:\"getSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=window.getComputedStyle(t,null),n=b(t,\"width\",i),s=b(t,\"height\",i);e&&(n+=b(t,\"marginLeft\",i)+b(t,\"marginRight\",i),s+=b(t,\"marginTop\",i)+b(t,\"marginBottom\",i));return{width:n,height:s}}},{key:\"_skipTransitions\",value:function(t,e){var i=t.map(function(t){var e=t.style,i=e.transitionDuration,n=e.transitionDelay;return e.transitionDuration=\"0ms\",e.transitionDelay=\"0ms\",{duration:i,delay:n}});e(),t[0].offsetWidth,t.forEach(function(t,e){t.style.transitionDuration=i[e].duration,t.style.transitionDelay=i[e].delay})}}]),r}();return H.ShuffleItem=_,H.ALL_ITEMS=\"all\",H.FILTER_ATTRIBUTE_KEY=\"groups\",H.EventType={LAYOUT:\"shuffle:layout\",REMOVED:\"shuffle:removed\"},H.Classes=y,H.FilterMode={ANY:\"any\",ALL:\"all\"},H.options={group:H.ALL_ITEMS,speed:250,easing:\"cubic-bezier(0.4, 0.0, 0.2, 1)\",itemSelector:\"*\",sizer:null,gutterWidth:0,columnWidth:0,delimiter:null,buffer:0,columnThreshold:.01,initialSort:null,throttle:c,throttleTime:300,staggerAmount:15,staggerAmountMax:150,useTransforms:!0,filterMode:H.FilterMode.ANY,isCentered:!1,roundTransforms:!0},H.Point=p,H.Rect=v,H.__sorter=T,H.__getColumnSpan=M,H.__getAvailablePositions=A,H.__getShortColumn=F,H.__getCenteredPositions=x,H});\n//# sourceMappingURL=shuffle.min.js.map\n","\n/**\n * Load required plugin.\n */\nrequire('slick-carousel');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Slick');\n\n  page.initSlick = function() {\n\n    $('[data-provide~=\"slider\"]').each(function() {\n      var tag = $(this),\n          options = {\n            speed: 1000,\n            arrows: false,\n            centerPadding: '0',\n          };\n\n      options = $.extend( options, page.getDataOptions(tag));\n\n      if (options.slidesToShow !== undefined || options.centerMode !== undefined) {\n        var scrollOn768 = 1;\n        if (options.slidesToScroll !== undefined) {\n          if (options.slidesToScroll > 1) {\n            scrollOn768 = 2;\n          }\n        }\n\n        options.responsive = [{\n          breakpoint: 768,\n          settings: {\n            slidesToShow: 2,\n            slidesToScroll: scrollOn768,\n          }\n        },\n        {\n          breakpoint: 576,\n          settings: {\n            slidesToShow: 1,\n            slidesToScroll: 1,\n            centerPadding: '0px',\n          }\n        }];\n      }\n\n      tag.slick(options);\n    });\n\n  }\n\n}(jQuery);\n\n\n\n","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.1\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n                nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                focusOnChange: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                scrolling: false,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                swiping: false,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 0) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.empty().append(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots)\n                .off('click.slick', _.changeSlide)\n                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n            if (_.options.accessibility === true) {\n                _.$dots.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$slider.off('focus.slick blur.slick');\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.cleanUpSlideEvents();\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.cleanUpSlideEvents = function() {\n\n        var _ = this;\n\n        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 0) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n        _.$slider.removeClass('slick-dotted');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.$slidesCache = _.$slides;\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n\n        var _ = this;\n\n        _.$slider\n            .off('focus.slick blur.slick')\n            .on('focus.slick blur.slick', '*', function(event) {\n\n            event.stopImmediatePropagation();\n            var $sf = $(this);\n\n            setTimeout(function() {\n\n                if( _.options.pauseOnFocus ) {\n                    _.focussed = $sf.is(':focus');\n                    _.autoPlay();\n                }\n\n            }, 0);\n\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            if (_.slideCount <= _.options.slidesToShow) {\n                 ++pagerQty;\n            } else {\n                while (breakPoint < _.slideCount) {\n                    ++pagerQty;\n                    breakPoint = counter + _.options.slidesToScroll;\n                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n                }\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else if(!_.options.asNavFor) {\n            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n        }else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide,\n            coef;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                coef = -1\n\n                if (_.options.vertical === true && _.options.centerMode === true) {\n                    if (_.options.slidesToShow === 2) {\n                        coef = -1.5;\n                    } else if (_.options.slidesToShow === 1) {\n                        coef = -2\n                    }\n                }\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n        } else if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            if (_.options.rtl === true) {\n                if (targetSlide[0]) {\n                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                } else {\n                    targetLeft =  0;\n                }\n            } else {\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n            }\n\n            if (_.options.centerMode === true) {\n                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n\n                if (_.options.rtl === true) {\n                    if (targetSlide[0]) {\n                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                    } else {\n                        targetLeft =  0;\n                    }\n                } else {\n                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                }\n\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n            _.checkResponsive(true);\n            _.focusHandler();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n        if ( _.options.autoplay ) {\n\n            _.paused = false;\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.initADA = function() {\n        var _ = this,\n                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n                    return (val >= 0) && (val < _.slideCount);\n                });\n\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        if (_.$dots !== null) {\n            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n                var slideControlIndex = tabControlIndexes.indexOf(i);\n\n                $(this).attr({\n                    'role': 'tabpanel',\n                    'id': 'slick-slide' + _.instanceUid + i,\n                    'tabindex': -1\n                });\n\n                if (slideControlIndex !== -1) {\n                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n                   if ($('#' + ariaButtonControl).length) {\n                     $(this).attr({\n                         'aria-describedby': ariaButtonControl\n                     });\n                   }\n                }\n            });\n\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                var mappedSlideIndex = tabControlIndexes[i];\n\n                $(this).attr({\n                    'role': 'presentation'\n                });\n\n                $(this).find('button').first().attr({\n                    'role': 'tab',\n                    'id': 'slick-slide-control' + _.instanceUid + i,\n                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n                    'aria-label': (i + 1) + ' of ' + numDotGroups,\n                    'aria-selected': null,\n                    'tabindex': '-1'\n                });\n\n            }).eq(_.currentSlide).find('button').attr({\n                'aria-selected': 'true',\n                'tabindex': '0'\n            }).end();\n        }\n\n        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n          if (_.options.focusOnChange) {\n            _.$slides.eq(i).attr({'tabindex': '0'});\n          } else {\n            _.$slides.eq(i).removeAttr('tabindex');\n          }\n        }\n\n        _.activateADA();\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'previous'\n               }, _.changeSlide);\n            _.$nextArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'next'\n               }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow.on('keydown.slick', _.keyHandler);\n                _.$nextArrow.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$dots.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initSlideEvents = function() {\n\n        var _ = this;\n\n        if ( _.options.pauseOnHover ) {\n\n            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n        _.initSlideEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(_.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'next' :  'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'previous' : 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageSrcSet = $(this).attr('data-srcset'),\n                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n\n                            if (imageSrcSet) {\n                                image\n                                    .attr('srcset', imageSrcSet );\n\n                                if (imageSizes) {\n                                    image\n                                        .attr('sizes', imageSizes );\n                                }\n                            }\n\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy data-srcset data-sizes')\n                                        .removeClass('slick-loading');\n                                });\n                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                        });\n\n                };\n\n                imageToLoad.onerror = function() {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n        if (_.options.lazyLoad === 'anticipated') {\n            var prevSlide = rangeStart - 1,\n                nextSlide = rangeEnd,\n                $slides = _.$slider.find('.slick-slide');\n\n            for (var i = 0; i < _.options.slidesToScroll; i++) {\n                if (prevSlide < 0) prevSlide = _.slideCount - 1;\n                loadRange = loadRange.add($slides.eq(prevSlide));\n                loadRange = loadRange.add($slides.eq(nextSlide));\n                prevSlide--;\n                nextSlide++;\n            }\n        }\n\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.autoPlay();\n        _.options.autoplay = true;\n        _.paused = false;\n        _.focussed = false;\n        _.interrupted = false;\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        if( !_.unslicked ) {\n\n            _.$slider.trigger('afterChange', [_, index]);\n\n            _.animating = false;\n\n            if (_.slideCount > _.options.slidesToShow) {\n                _.setPosition();\n            }\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\n\n                if (_.options.focusOnChange) {\n                    var $currentSlide = $(_.$slides.get(_.currentSlide));\n                    $currentSlide.attr('tabindex', 0).focus();\n                }\n            }\n\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n\n        event.preventDefault();\n\n    };\n\n    Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n        tryCount = tryCount || 1;\n\n        var _ = this,\n            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n            image,\n            imageSource,\n            imageSrcSet,\n            imageSizes,\n            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageSrcSet = image.attr('data-srcset');\n            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                if (imageSrcSet) {\n                    image\n                        .attr('srcset', imageSrcSet );\n\n                    if (imageSizes) {\n                        image\n                            .attr('sizes', imageSizes );\n                    }\n                }\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy data-srcset data-sizes')\n                    .removeClass('slick-loading');\n\n                if ( _.options.adaptiveHeight === true ) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n                _.progressiveLazyLoad();\n\n            };\n\n            imageToLoad.onerror = function() {\n\n                if ( tryCount < 3 ) {\n\n                    /**\n                     * try to load the image 3 times,\n                     * leave a slight delay so we don't get\n                     * servers blocking the request.\n                     */\n                    setTimeout( function() {\n                        _.progressiveLazyLoad( tryCount + 1 );\n                    }, 500 );\n\n                } else {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                    _.progressiveLazyLoad();\n\n                }\n\n            };\n\n            imageToLoad.src = imageSource;\n\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, lastVisibleIndex;\n\n        lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n        // in non-infinite sliders, we don't want to go past the\n        // last visible index.\n        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n            _.currentSlide = lastVisibleIndex;\n        }\n\n        // if less slides than to show, go to start.\n        if ( _.slideCount <= _.options.slidesToShow ) {\n            _.currentSlide = 0;\n\n        }\n\n        currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n        _.cleanUpSlideEvents();\n        _.initSlideEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        _.setPosition();\n        _.focusHandler();\n\n        _.paused = !_.options.autoplay;\n        _.autoPlay();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption =\n    Slick.prototype.slickSetOption = function() {\n\n        /**\n         * accepts arguments in format of:\n         *\n         *  - for changing a single option's value:\n         *     .slick(\"setOption\", option, value, refresh )\n         *\n         *  - for changing a set of responsive options:\n         *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n         *\n         *  - for updating multiple values at once (not responsive)\n         *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n         */\n\n        var _ = this, l, item, option, value, refresh = false, type;\n\n        if( $.type( arguments[0] ) === 'object' ) {\n\n            option =  arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\n\n        } else if ( $.type( arguments[0] ) === 'string' ) {\n\n            option =  arguments[0];\n            value = arguments[1];\n            refresh = arguments[2];\n\n            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n                type = 'responsive';\n\n            } else if ( typeof arguments[1] !== 'undefined' ) {\n\n                type = 'single';\n\n            }\n\n        }\n\n        if ( type === 'single' ) {\n\n            _.options[option] = value;\n\n\n        } else if ( type === 'multiple' ) {\n\n            $.each( option , function( opt, val ) {\n\n                _.options[opt] = val;\n\n            });\n\n\n        } else if ( type === 'responsive' ) {\n\n            for ( item in value ) {\n\n                if( $.type( _.options.responsive ) !== 'array' ) {\n\n                    _.options.responsive = [ value[item] ];\n\n                } else {\n\n                    l = _.options.responsive.length-1;\n\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n                            _.options.responsive.splice(l,1);\n\n                        }\n\n                        l--;\n\n                    }\n\n                    _.options.responsive.push( value[item] );\n\n                }\n\n            }\n\n        }\n\n        if ( refresh ) {\n\n            _.unload();\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n                    _.$slides\n                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n            _.lazyLoad();\n        }\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.interrupt = function( toggle ) {\n\n        var _ = this;\n\n        if( !toggle ) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.slideHandler(index, false, true);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this, navTarget;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if ( _.options.autoplay ) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        if ( _.options.asNavFor ) {\n\n            navTarget = _.getNavTarget();\n            navTarget = navTarget.slick('getSlick');\n\n            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n                navTarget.setSlideClasses(_.currentSlide);\n            }\n\n        }\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'down';\n            } else {\n                return 'up';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount,\n            direction;\n\n        _.dragging = false;\n        _.swiping = false;\n\n        if (_.scrolling) {\n            _.scrolling = false;\n            return false;\n        }\n\n        _.interrupted = false;\n        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n        if ( _.touchObject.curX === undefined ) {\n            return false;\n        }\n\n        if ( _.touchObject.edgeHit === true ) {\n            _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n        }\n\n        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n            direction = _.swipeDirection();\n\n            switch ( direction ) {\n\n                case 'left':\n                case 'down':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n                            _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n                            _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n\n            }\n\n            if( direction != 'vertical' ) {\n\n                _.slideHandler( slideCount );\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction ]);\n\n            }\n\n        } else {\n\n            if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n                _.slideHandler( _.currentSlide );\n                _.touchObject = {};\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        verticalSwipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n            _.scrolling = true;\n            return false;\n        }\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = verticalSwipeLength;\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            _.swiping = true;\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        _.interrupted = true;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                    .removeClass('slick-active')\n                    .end();\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if ( _.options.autoplay ) {\n\n            if ( document[_.hidden] ) {\n\n                _.interrupted = true;\n\n            } else {\n\n                _.interrupted = false;\n\n            }\n\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i,\n            ret;\n        for (i = 0; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n","\n/**\n * Load required plugin.\n */\nwindow.Typed = require('typed.js');\n\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Typed');\n\n  page.initTyped = function() {\n    $('[data-typing]').each(function(){\n      var strings = $(this).data('typing').split(',');\n      var options = {\n        strings: strings,\n        typeSpeed: 50,\n        backSpeed: 30,\n        backDelay: 800,\n        loop: true\n      };\n\n      options = $.extend( options, page.getDataOptions($(this)) );\n      var typed = new Typed( $(this)[0], options );\n    });\n  }\n\n}(jQuery);\n\n\n\n","/*!\n * \n *   typed.js - A JavaScript Typing Animation Library\n *   Author: Matt Boldt <me@mattboldt.com>\n *   Version: v2.0.11\n *   Url: https://github.com/mattboldt/typed.js\n *   License(s): MIT\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Typed\"] = factory();\n\telse\n\t\troot[\"Typed\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar _initializerJs = __webpack_require__(1);\n\t\n\tvar _htmlParserJs = __webpack_require__(3);\n\t\n\t/**\n\t * Welcome to Typed.js!\n\t * @param {string} elementId HTML element ID _OR_ HTML element\n\t * @param {object} options options object\n\t * @returns {object} a new Typed object\n\t */\n\t\n\tvar Typed = (function () {\n\t  function Typed(elementId, options) {\n\t    _classCallCheck(this, Typed);\n\t\n\t    // Initialize it up\n\t    _initializerJs.initializer.load(this, options, elementId);\n\t    // All systems go!\n\t    this.begin();\n\t  }\n\t\n\t  /**\n\t   * Toggle start() and stop() of the Typed instance\n\t   * @public\n\t   */\n\t\n\t  _createClass(Typed, [{\n\t    key: 'toggle',\n\t    value: function toggle() {\n\t      this.pause.status ? this.start() : this.stop();\n\t    }\n\t\n\t    /**\n\t     * Stop typing / backspacing and enable cursor blinking\n\t     * @public\n\t     */\n\t  }, {\n\t    key: 'stop',\n\t    value: function stop() {\n\t      if (this.typingComplete) return;\n\t      if (this.pause.status) return;\n\t      this.toggleBlinking(true);\n\t      this.pause.status = true;\n\t      this.options.onStop(this.arrayPos, this);\n\t    }\n\t\n\t    /**\n\t     * Start typing / backspacing after being stopped\n\t     * @public\n\t     */\n\t  }, {\n\t    key: 'start',\n\t    value: function start() {\n\t      if (this.typingComplete) return;\n\t      if (!this.pause.status) return;\n\t      this.pause.status = false;\n\t      if (this.pause.typewrite) {\n\t        this.typewrite(this.pause.curString, this.pause.curStrPos);\n\t      } else {\n\t        this.backspace(this.pause.curString, this.pause.curStrPos);\n\t      }\n\t      this.options.onStart(this.arrayPos, this);\n\t    }\n\t\n\t    /**\n\t     * Destroy this instance of Typed\n\t     * @public\n\t     */\n\t  }, {\n\t    key: 'destroy',\n\t    value: function destroy() {\n\t      this.reset(false);\n\t      this.options.onDestroy(this);\n\t    }\n\t\n\t    /**\n\t     * Reset Typed and optionally restarts\n\t     * @param {boolean} restart\n\t     * @public\n\t     */\n\t  }, {\n\t    key: 'reset',\n\t    value: function reset() {\n\t      var restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\t\n\t      clearInterval(this.timeout);\n\t      this.replaceText('');\n\t      if (this.cursor && this.cursor.parentNode) {\n\t        this.cursor.parentNode.removeChild(this.cursor);\n\t        this.cursor = null;\n\t      }\n\t      this.strPos = 0;\n\t      this.arrayPos = 0;\n\t      this.curLoop = 0;\n\t      if (restart) {\n\t        this.insertCursor();\n\t        this.options.onReset(this);\n\t        this.begin();\n\t      }\n\t    }\n\t\n\t    /**\n\t     * Begins the typing animation\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'begin',\n\t    value: function begin() {\n\t      var _this = this;\n\t\n\t      this.options.onBegin(this);\n\t      this.typingComplete = false;\n\t      this.shuffleStringsIfNeeded(this);\n\t      this.insertCursor();\n\t      if (this.bindInputFocusEvents) this.bindFocusEvents();\n\t      this.timeout = setTimeout(function () {\n\t        // Check if there is some text in the element, if yes start by backspacing the default message\n\t        if (!_this.currentElContent || _this.currentElContent.length === 0) {\n\t          _this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos);\n\t        } else {\n\t          // Start typing\n\t          _this.backspace(_this.currentElContent, _this.currentElContent.length);\n\t        }\n\t      }, this.startDelay);\n\t    }\n\t\n\t    /**\n\t     * Called for each character typed\n\t     * @param {string} curString the current string in the strings array\n\t     * @param {number} curStrPos the current position in the curString\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'typewrite',\n\t    value: function typewrite(curString, curStrPos) {\n\t      var _this2 = this;\n\t\n\t      if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) {\n\t        this.el.classList.remove(this.fadeOutClass);\n\t        if (this.cursor) this.cursor.classList.remove(this.fadeOutClass);\n\t      }\n\t\n\t      var humanize = this.humanizer(this.typeSpeed);\n\t      var numChars = 1;\n\t\n\t      if (this.pause.status === true) {\n\t        this.setPauseStatus(curString, curStrPos, true);\n\t        return;\n\t      }\n\t\n\t      // contain typing function in a timeout humanize'd delay\n\t      this.timeout = setTimeout(function () {\n\t        // skip over any HTML chars\n\t        curStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2);\n\t\n\t        var pauseTime = 0;\n\t        var substr = curString.substr(curStrPos);\n\t        // check for an escape character before a pause value\n\t        // format: \\^\\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^\n\t        // single ^ are removed from string\n\t        if (substr.charAt(0) === '^') {\n\t          if (/^\\^\\d+/.test(substr)) {\n\t            var skip = 1; // skip at least 1\n\t            substr = /\\d+/.exec(substr)[0];\n\t            skip += substr.length;\n\t            pauseTime = parseInt(substr);\n\t            _this2.temporaryPause = true;\n\t            _this2.options.onTypingPaused(_this2.arrayPos, _this2);\n\t            // strip out the escape character and pause value so they're not printed\n\t            curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);\n\t            _this2.toggleBlinking(true);\n\t          }\n\t        }\n\t\n\t        // check for skip characters formatted as\n\t        // \"this is a `string to print NOW` ...\"\n\t        if (substr.charAt(0) === '`') {\n\t          while (curString.substr(curStrPos + numChars).charAt(0) !== '`') {\n\t            numChars++;\n\t            if (curStrPos + numChars > curString.length) break;\n\t          }\n\t          // strip out the escape characters and append all the string in between\n\t          var stringBeforeSkip = curString.substring(0, curStrPos);\n\t          var stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars);\n\t          var stringAfterSkip = curString.substring(curStrPos + numChars + 1);\n\t          curString = stringBeforeSkip + stringSkipped + stringAfterSkip;\n\t          numChars--;\n\t        }\n\t\n\t        // timeout for any pause after a character\n\t        _this2.timeout = setTimeout(function () {\n\t          // Accounts for blinking while paused\n\t          _this2.toggleBlinking(false);\n\t\n\t          // We're done with this sentence!\n\t          if (curStrPos >= curString.length) {\n\t            _this2.doneTyping(curString, curStrPos);\n\t          } else {\n\t            _this2.keepTyping(curString, curStrPos, numChars);\n\t          }\n\t          // end of character pause\n\t          if (_this2.temporaryPause) {\n\t            _this2.temporaryPause = false;\n\t            _this2.options.onTypingResumed(_this2.arrayPos, _this2);\n\t          }\n\t        }, pauseTime);\n\t\n\t        // humanized value for typing\n\t      }, humanize);\n\t    }\n\t\n\t    /**\n\t     * Continue to the next string & begin typing\n\t     * @param {string} curString the current string in the strings array\n\t     * @param {number} curStrPos the current position in the curString\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'keepTyping',\n\t    value: function keepTyping(curString, curStrPos, numChars) {\n\t      // call before functions if applicable\n\t      if (curStrPos === 0) {\n\t        this.toggleBlinking(false);\n\t        this.options.preStringTyped(this.arrayPos, this);\n\t      }\n\t      // start typing each new char into existing string\n\t      // curString: arg, this.el.html: original text inside element\n\t      curStrPos += numChars;\n\t      var nextString = curString.substr(0, curStrPos);\n\t      this.replaceText(nextString);\n\t      // loop the function\n\t      this.typewrite(curString, curStrPos);\n\t    }\n\t\n\t    /**\n\t     * We're done typing the current string\n\t     * @param {string} curString the current string in the strings array\n\t     * @param {number} curStrPos the current position in the curString\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'doneTyping',\n\t    value: function doneTyping(curString, curStrPos) {\n\t      var _this3 = this;\n\t\n\t      // fires callback function\n\t      this.options.onStringTyped(this.arrayPos, this);\n\t      this.toggleBlinking(true);\n\t      // is this the final string\n\t      if (this.arrayPos === this.strings.length - 1) {\n\t        // callback that occurs on the last typed string\n\t        this.complete();\n\t        // quit if we wont loop back\n\t        if (this.loop === false || this.curLoop === this.loopCount) {\n\t          return;\n\t        }\n\t      }\n\t      this.timeout = setTimeout(function () {\n\t        _this3.backspace(curString, curStrPos);\n\t      }, this.backDelay);\n\t    }\n\t\n\t    /**\n\t     * Backspaces 1 character at a time\n\t     * @param {string} curString the current string in the strings array\n\t     * @param {number} curStrPos the current position in the curString\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'backspace',\n\t    value: function backspace(curString, curStrPos) {\n\t      var _this4 = this;\n\t\n\t      if (this.pause.status === true) {\n\t        this.setPauseStatus(curString, curStrPos, true);\n\t        return;\n\t      }\n\t      if (this.fadeOut) return this.initFadeOut();\n\t\n\t      this.toggleBlinking(false);\n\t      var humanize = this.humanizer(this.backSpeed);\n\t\n\t      this.timeout = setTimeout(function () {\n\t        curStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4);\n\t        // replace text with base text + typed characters\n\t        var curStringAtPosition = curString.substr(0, curStrPos);\n\t        _this4.replaceText(curStringAtPosition);\n\t\n\t        // if smartBack is enabled\n\t        if (_this4.smartBackspace) {\n\t          // the remaining part of the current string is equal of the same part of the new string\n\t          var nextString = _this4.strings[_this4.arrayPos + 1];\n\t          if (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) {\n\t            _this4.stopNum = curStrPos;\n\t          } else {\n\t            _this4.stopNum = 0;\n\t          }\n\t        }\n\t\n\t        // if the number (id of character in current string) is\n\t        // less than the stop number, keep going\n\t        if (curStrPos > _this4.stopNum) {\n\t          // subtract characters one by one\n\t          curStrPos--;\n\t          // loop the function\n\t          _this4.backspace(curString, curStrPos);\n\t        } else if (curStrPos <= _this4.stopNum) {\n\t          // if the stop number has been reached, increase\n\t          // array position to next string\n\t          _this4.arrayPos++;\n\t          // When looping, begin at the beginning after backspace complete\n\t          if (_this4.arrayPos === _this4.strings.length) {\n\t            _this4.arrayPos = 0;\n\t            _this4.options.onLastStringBackspaced();\n\t            _this4.shuffleStringsIfNeeded();\n\t            _this4.begin();\n\t          } else {\n\t            _this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos);\n\t          }\n\t        }\n\t        // humanized value for typing\n\t      }, humanize);\n\t    }\n\t\n\t    /**\n\t     * Full animation is complete\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'complete',\n\t    value: function complete() {\n\t      this.options.onComplete(this);\n\t      if (this.loop) {\n\t        this.curLoop++;\n\t      } else {\n\t        this.typingComplete = true;\n\t      }\n\t    }\n\t\n\t    /**\n\t     * Has the typing been stopped\n\t     * @param {string} curString the current string in the strings array\n\t     * @param {number} curStrPos the current position in the curString\n\t     * @param {boolean} isTyping\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'setPauseStatus',\n\t    value: function setPauseStatus(curString, curStrPos, isTyping) {\n\t      this.pause.typewrite = isTyping;\n\t      this.pause.curString = curString;\n\t      this.pause.curStrPos = curStrPos;\n\t    }\n\t\n\t    /**\n\t     * Toggle the blinking cursor\n\t     * @param {boolean} isBlinking\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'toggleBlinking',\n\t    value: function toggleBlinking(isBlinking) {\n\t      if (!this.cursor) return;\n\t      // if in paused state, don't toggle blinking a 2nd time\n\t      if (this.pause.status) return;\n\t      if (this.cursorBlinking === isBlinking) return;\n\t      this.cursorBlinking = isBlinking;\n\t      if (isBlinking) {\n\t        this.cursor.classList.add('typed-cursor--blink');\n\t      } else {\n\t        this.cursor.classList.remove('typed-cursor--blink');\n\t      }\n\t    }\n\t\n\t    /**\n\t     * Speed in MS to type\n\t     * @param {number} speed\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'humanizer',\n\t    value: function humanizer(speed) {\n\t      return Math.round(Math.random() * speed / 2) + speed;\n\t    }\n\t\n\t    /**\n\t     * Shuffle the sequence of the strings array\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'shuffleStringsIfNeeded',\n\t    value: function shuffleStringsIfNeeded() {\n\t      if (!this.shuffle) return;\n\t      this.sequence = this.sequence.sort(function () {\n\t        return Math.random() - 0.5;\n\t      });\n\t    }\n\t\n\t    /**\n\t     * Adds a CSS class to fade out current string\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'initFadeOut',\n\t    value: function initFadeOut() {\n\t      var _this5 = this;\n\t\n\t      this.el.className += ' ' + this.fadeOutClass;\n\t      if (this.cursor) this.cursor.className += ' ' + this.fadeOutClass;\n\t      return setTimeout(function () {\n\t        _this5.arrayPos++;\n\t        _this5.replaceText('');\n\t\n\t        // Resets current string if end of loop reached\n\t        if (_this5.strings.length > _this5.arrayPos) {\n\t          _this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0);\n\t        } else {\n\t          _this5.typewrite(_this5.strings[0], 0);\n\t          _this5.arrayPos = 0;\n\t        }\n\t      }, this.fadeOutDelay);\n\t    }\n\t\n\t    /**\n\t     * Replaces current text in the HTML element\n\t     * depending on element type\n\t     * @param {string} str\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'replaceText',\n\t    value: function replaceText(str) {\n\t      if (this.attr) {\n\t        this.el.setAttribute(this.attr, str);\n\t      } else {\n\t        if (this.isInput) {\n\t          this.el.value = str;\n\t        } else if (this.contentType === 'html') {\n\t          this.el.innerHTML = str;\n\t        } else {\n\t          this.el.textContent = str;\n\t        }\n\t      }\n\t    }\n\t\n\t    /**\n\t     * If using input elements, bind focus in order to\n\t     * start and stop the animation\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'bindFocusEvents',\n\t    value: function bindFocusEvents() {\n\t      var _this6 = this;\n\t\n\t      if (!this.isInput) return;\n\t      this.el.addEventListener('focus', function (e) {\n\t        _this6.stop();\n\t      });\n\t      this.el.addEventListener('blur', function (e) {\n\t        if (_this6.el.value && _this6.el.value.length !== 0) {\n\t          return;\n\t        }\n\t        _this6.start();\n\t      });\n\t    }\n\t\n\t    /**\n\t     * On init, insert the cursor element\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'insertCursor',\n\t    value: function insertCursor() {\n\t      if (!this.showCursor) return;\n\t      if (this.cursor) return;\n\t      this.cursor = document.createElement('span');\n\t      this.cursor.className = 'typed-cursor';\n\t      this.cursor.innerHTML = this.cursorChar;\n\t      this.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling);\n\t    }\n\t  }]);\n\t\n\t  return Typed;\n\t})();\n\t\n\texports['default'] = Typed;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar _defaultsJs = __webpack_require__(2);\n\t\n\tvar _defaultsJs2 = _interopRequireDefault(_defaultsJs);\n\t\n\t/**\n\t * Initialize the Typed object\n\t */\n\t\n\tvar Initializer = (function () {\n\t  function Initializer() {\n\t    _classCallCheck(this, Initializer);\n\t  }\n\t\n\t  _createClass(Initializer, [{\n\t    key: 'load',\n\t\n\t    /**\n\t     * Load up defaults & options on the Typed instance\n\t     * @param {Typed} self instance of Typed\n\t     * @param {object} options options object\n\t     * @param {string} elementId HTML element ID _OR_ instance of HTML element\n\t     * @private\n\t     */\n\t\n\t    value: function load(self, options, elementId) {\n\t      // chosen element to manipulate text\n\t      if (typeof elementId === 'string') {\n\t        self.el = document.querySelector(elementId);\n\t      } else {\n\t        self.el = elementId;\n\t      }\n\t\n\t      self.options = _extends({}, _defaultsJs2['default'], options);\n\t\n\t      // attribute to type into\n\t      self.isInput = self.el.tagName.toLowerCase() === 'input';\n\t      self.attr = self.options.attr;\n\t      self.bindInputFocusEvents = self.options.bindInputFocusEvents;\n\t\n\t      // show cursor\n\t      self.showCursor = self.isInput ? false : self.options.showCursor;\n\t\n\t      // custom cursor\n\t      self.cursorChar = self.options.cursorChar;\n\t\n\t      // Is the cursor blinking\n\t      self.cursorBlinking = true;\n\t\n\t      // text content of element\n\t      self.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent;\n\t\n\t      // html or plain text\n\t      self.contentType = self.options.contentType;\n\t\n\t      // typing speed\n\t      self.typeSpeed = self.options.typeSpeed;\n\t\n\t      // add a delay before typing starts\n\t      self.startDelay = self.options.startDelay;\n\t\n\t      // backspacing speed\n\t      self.backSpeed = self.options.backSpeed;\n\t\n\t      // only backspace what doesn't match the previous string\n\t      self.smartBackspace = self.options.smartBackspace;\n\t\n\t      // amount of time to wait before backspacing\n\t      self.backDelay = self.options.backDelay;\n\t\n\t      // Fade out instead of backspace\n\t      self.fadeOut = self.options.fadeOut;\n\t      self.fadeOutClass = self.options.fadeOutClass;\n\t      self.fadeOutDelay = self.options.fadeOutDelay;\n\t\n\t      // variable to check whether typing is currently paused\n\t      self.isPaused = false;\n\t\n\t      // input strings of text\n\t      self.strings = self.options.strings.map(function (s) {\n\t        return s.trim();\n\t      });\n\t\n\t      // div containing strings\n\t      if (typeof self.options.stringsElement === 'string') {\n\t        self.stringsElement = document.querySelector(self.options.stringsElement);\n\t      } else {\n\t        self.stringsElement = self.options.stringsElement;\n\t      }\n\t\n\t      if (self.stringsElement) {\n\t        self.strings = [];\n\t        self.stringsElement.style.display = 'none';\n\t        var strings = Array.prototype.slice.apply(self.stringsElement.children);\n\t        var stringsLength = strings.length;\n\t\n\t        if (stringsLength) {\n\t          for (var i = 0; i < stringsLength; i += 1) {\n\t            var stringEl = strings[i];\n\t            self.strings.push(stringEl.innerHTML.trim());\n\t          }\n\t        }\n\t      }\n\t\n\t      // character number position of current string\n\t      self.strPos = 0;\n\t\n\t      // current array position\n\t      self.arrayPos = 0;\n\t\n\t      // index of string to stop backspacing on\n\t      self.stopNum = 0;\n\t\n\t      // Looping logic\n\t      self.loop = self.options.loop;\n\t      self.loopCount = self.options.loopCount;\n\t      self.curLoop = 0;\n\t\n\t      // shuffle the strings\n\t      self.shuffle = self.options.shuffle;\n\t      // the order of strings\n\t      self.sequence = [];\n\t\n\t      self.pause = {\n\t        status: false,\n\t        typewrite: true,\n\t        curString: '',\n\t        curStrPos: 0\n\t      };\n\t\n\t      // When the typing is complete (when not looped)\n\t      self.typingComplete = false;\n\t\n\t      // Set the order in which the strings are typed\n\t      for (var i in self.strings) {\n\t        self.sequence[i] = i;\n\t      }\n\t\n\t      // If there is some text in the element\n\t      self.currentElContent = this.getCurrentElContent(self);\n\t\n\t      self.autoInsertCss = self.options.autoInsertCss;\n\t\n\t      this.appendAnimationCss(self);\n\t    }\n\t  }, {\n\t    key: 'getCurrentElContent',\n\t    value: function getCurrentElContent(self) {\n\t      var elContent = '';\n\t      if (self.attr) {\n\t        elContent = self.el.getAttribute(self.attr);\n\t      } else if (self.isInput) {\n\t        elContent = self.el.value;\n\t      } else if (self.contentType === 'html') {\n\t        elContent = self.el.innerHTML;\n\t      } else {\n\t        elContent = self.el.textContent;\n\t      }\n\t      return elContent;\n\t    }\n\t  }, {\n\t    key: 'appendAnimationCss',\n\t    value: function appendAnimationCss(self) {\n\t      var cssDataName = 'data-typed-js-css';\n\t      if (!self.autoInsertCss) {\n\t        return;\n\t      }\n\t      if (!self.showCursor && !self.fadeOut) {\n\t        return;\n\t      }\n\t      if (document.querySelector('[' + cssDataName + ']')) {\n\t        return;\n\t      }\n\t\n\t      var css = document.createElement('style');\n\t      css.type = 'text/css';\n\t      css.setAttribute(cssDataName, true);\n\t\n\t      var innerCss = '';\n\t      if (self.showCursor) {\n\t        innerCss += '\\n        .typed-cursor{\\n          opacity: 1;\\n        }\\n        .typed-cursor.typed-cursor--blink{\\n          animation: typedjsBlink 0.7s infinite;\\n          -webkit-animation: typedjsBlink 0.7s infinite;\\n                  animation: typedjsBlink 0.7s infinite;\\n        }\\n        @keyframes typedjsBlink{\\n          50% { opacity: 0.0; }\\n        }\\n        @-webkit-keyframes typedjsBlink{\\n          0% { opacity: 1; }\\n          50% { opacity: 0.0; }\\n          100% { opacity: 1; }\\n        }\\n      ';\n\t      }\n\t      if (self.fadeOut) {\n\t        innerCss += '\\n        .typed-fade-out{\\n          opacity: 0;\\n          transition: opacity .25s;\\n        }\\n        .typed-cursor.typed-cursor--blink.typed-fade-out{\\n          -webkit-animation: 0;\\n          animation: 0;\\n        }\\n      ';\n\t      }\n\t      if (css.length === 0) {\n\t        return;\n\t      }\n\t      css.innerHTML = innerCss;\n\t      document.body.appendChild(css);\n\t    }\n\t  }]);\n\t\n\t  return Initializer;\n\t})();\n\t\n\texports['default'] = Initializer;\n\tvar initializer = new Initializer();\n\texports.initializer = initializer;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Defaults & options\n\t * @returns {object} Typed defaults & options\n\t * @public\n\t */\n\t\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\tvar defaults = {\n\t  /**\n\t   * @property {array} strings strings to be typed\n\t   * @property {string} stringsElement ID of element containing string children\n\t   */\n\t  strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'],\n\t  stringsElement: null,\n\t\n\t  /**\n\t   * @property {number} typeSpeed type speed in milliseconds\n\t   */\n\t  typeSpeed: 0,\n\t\n\t  /**\n\t   * @property {number} startDelay time before typing starts in milliseconds\n\t   */\n\t  startDelay: 0,\n\t\n\t  /**\n\t   * @property {number} backSpeed backspacing speed in milliseconds\n\t   */\n\t  backSpeed: 0,\n\t\n\t  /**\n\t   * @property {boolean} smartBackspace only backspace what doesn't match the previous string\n\t   */\n\t  smartBackspace: true,\n\t\n\t  /**\n\t   * @property {boolean} shuffle shuffle the strings\n\t   */\n\t  shuffle: false,\n\t\n\t  /**\n\t   * @property {number} backDelay time before backspacing in milliseconds\n\t   */\n\t  backDelay: 700,\n\t\n\t  /**\n\t   * @property {boolean} fadeOut Fade out instead of backspace\n\t   * @property {string} fadeOutClass css class for fade animation\n\t   * @property {boolean} fadeOutDelay Fade out delay in milliseconds\n\t   */\n\t  fadeOut: false,\n\t  fadeOutClass: 'typed-fade-out',\n\t  fadeOutDelay: 500,\n\t\n\t  /**\n\t   * @property {boolean} loop loop strings\n\t   * @property {number} loopCount amount of loops\n\t   */\n\t  loop: false,\n\t  loopCount: Infinity,\n\t\n\t  /**\n\t   * @property {boolean} showCursor show cursor\n\t   * @property {string} cursorChar character for cursor\n\t   * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML <head>\n\t   */\n\t  showCursor: true,\n\t  cursorChar: '|',\n\t  autoInsertCss: true,\n\t\n\t  /**\n\t   * @property {string} attr attribute for typing\n\t   * Ex: input placeholder, value, or just HTML text\n\t   */\n\t  attr: null,\n\t\n\t  /**\n\t   * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input\n\t   */\n\t  bindInputFocusEvents: false,\n\t\n\t  /**\n\t   * @property {string} contentType 'html' or 'null' for plaintext\n\t   */\n\t  contentType: 'html',\n\t\n\t  /**\n\t   * Before it begins typing\n\t   * @param {Typed} self\n\t   */\n\t  onBegin: function onBegin(self) {},\n\t\n\t  /**\n\t   * All typing is complete\n\t   * @param {Typed} self\n\t   */\n\t  onComplete: function onComplete(self) {},\n\t\n\t  /**\n\t   * Before each string is typed\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  preStringTyped: function preStringTyped(arrayPos, self) {},\n\t\n\t  /**\n\t   * After each string is typed\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  onStringTyped: function onStringTyped(arrayPos, self) {},\n\t\n\t  /**\n\t   * During looping, after last string is typed\n\t   * @param {Typed} self\n\t   */\n\t  onLastStringBackspaced: function onLastStringBackspaced(self) {},\n\t\n\t  /**\n\t   * Typing has been stopped\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  onTypingPaused: function onTypingPaused(arrayPos, self) {},\n\t\n\t  /**\n\t   * Typing has been started after being stopped\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  onTypingResumed: function onTypingResumed(arrayPos, self) {},\n\t\n\t  /**\n\t   * After reset\n\t   * @param {Typed} self\n\t   */\n\t  onReset: function onReset(self) {},\n\t\n\t  /**\n\t   * After stop\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  onStop: function onStop(arrayPos, self) {},\n\t\n\t  /**\n\t   * After start\n\t   * @param {number} arrayPos\n\t   * @param {Typed} self\n\t   */\n\t  onStart: function onStart(arrayPos, self) {},\n\t\n\t  /**\n\t   * After destroy\n\t   * @param {Typed} self\n\t   */\n\t  onDestroy: function onDestroy(self) {}\n\t};\n\t\n\texports['default'] = defaults;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * TODO: These methods can probably be combined somehow\n\t * Parse HTML tags & HTML Characters\n\t */\n\t\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tvar HTMLParser = (function () {\n\t  function HTMLParser() {\n\t    _classCallCheck(this, HTMLParser);\n\t  }\n\t\n\t  _createClass(HTMLParser, [{\n\t    key: 'typeHtmlChars',\n\t\n\t    /**\n\t     * Type HTML tags & HTML Characters\n\t     * @param {string} curString Current string\n\t     * @param {number} curStrPos Position in current string\n\t     * @param {Typed} self instance of Typed\n\t     * @returns {number} a new string position\n\t     * @private\n\t     */\n\t\n\t    value: function typeHtmlChars(curString, curStrPos, self) {\n\t      if (self.contentType !== 'html') return curStrPos;\n\t      var curChar = curString.substr(curStrPos).charAt(0);\n\t      if (curChar === '<' || curChar === '&') {\n\t        var endTag = '';\n\t        if (curChar === '<') {\n\t          endTag = '>';\n\t        } else {\n\t          endTag = ';';\n\t        }\n\t        while (curString.substr(curStrPos + 1).charAt(0) !== endTag) {\n\t          curStrPos++;\n\t          if (curStrPos + 1 > curString.length) {\n\t            break;\n\t          }\n\t        }\n\t        curStrPos++;\n\t      }\n\t      return curStrPos;\n\t    }\n\t\n\t    /**\n\t     * Backspace HTML tags and HTML Characters\n\t     * @param {string} curString Current string\n\t     * @param {number} curStrPos Position in current string\n\t     * @param {Typed} self instance of Typed\n\t     * @returns {number} a new string position\n\t     * @private\n\t     */\n\t  }, {\n\t    key: 'backSpaceHtmlChars',\n\t    value: function backSpaceHtmlChars(curString, curStrPos, self) {\n\t      if (self.contentType !== 'html') return curStrPos;\n\t      var curChar = curString.substr(curStrPos).charAt(0);\n\t      if (curChar === '>' || curChar === ';') {\n\t        var endTag = '';\n\t        if (curChar === '>') {\n\t          endTag = '<';\n\t        } else {\n\t          endTag = '&';\n\t        }\n\t        while (curString.substr(curStrPos - 1).charAt(0) !== endTag) {\n\t          curStrPos--;\n\t          if (curStrPos < 0) {\n\t            break;\n\t          }\n\t        }\n\t        curStrPos--;\n\t      }\n\t      return curStrPos;\n\t    }\n\t  }]);\n\t\n\t  return HTMLParser;\n\t})();\n\t\n\texports['default'] = HTMLParser;\n\tvar htmlParser = new HTMLParser();\n\texports.htmlParser = htmlParser;\n\n/***/ })\n/******/ ])\n});\n;","\n/*\n|--------------------------------------------------------------------------\n| Partials\n|--------------------------------------------------------------------------\n|\n| Split the application code to several files. Almost all of the following\n| files are required for the application to work properly.\n|\n*/\nrequire('../partials/config.js');\nrequire('../partials/bind.js');\nrequire('../partials/drawer.js');\nrequire('../partials/font.js');\nrequire('../partials/form.js');\nrequire('../partials/mailer.js');\nrequire('../partials/map.js');\nrequire('../partials/modal.js');\nrequire('../partials/navbar.js');\nrequire('../partials/offcanvas.js');\nrequire('../partials/popup.js');\nrequire('../partials/recaptcha.js');\nrequire('../partials/scroll.js');\nrequire('../partials/section.js');\nrequire('../partials/sidebar.js');\nrequire('../partials/video.js');\nrequire('../partials/util.js');\n","\n/**\n * Config the application behaviour.\n */\n\n+function($){\n\n  page.config = function(options) {\n\n    // Return config value\n    if ( typeof options === 'string' ) {\n      return page.defaults[options];\n    }\n\n    // Save configs\n    $.extend(true, page.defaults, options);\n\n    // Make necessary changes\n    //\n    if ( ! page.defaults.smoothScroll ) {\n      SmoothScroll.destroy();\n    }\n\n    // Google map\n    //\n    if ( $('[data-provide~=\"map\"]').length && window[\"google.maps.Map\"] === undefined ) {\n      $.getScript(\"https://maps.googleapis.com/maps/api/js?key=\"+ page.defaults.googleApiKey +\"&callback=page.initMap\");\n    }\n\n    // Google Analytics\n    //\n    if ( page.defaults.googleAnalyticsId ) {\n      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n\n      ga('create', page.defaults.googleAnalyticsId, 'auto');\n      ga('send', 'pageview');\n    }\n\n\n    // Google reCAPTCHA\n    //\n    if ( $('[data-provide~=\"recaptcha\"]').length && window[\"grecaptcha\"] === undefined ) {\n      var url = \"https://www.google.com/recaptcha/api.js?onload=recaptchaLoadCallback\";\n      if ( page.defaults.reCaptchaLanguage != '' ) {\n        url += '&hl=' + page.defaults.reCaptchaLanguage;\n      }\n      $.getScript(url);\n    }\n\n    // DOM is loaded, let's init the page.\n    //\n    page.init();\n\n  }\n\n}(jQuery);\n\n\n\n","\n/**\n * Bind input changes to data attributes\n */\n\n+function($){\n\n  page.initBind = function() {\n\n    // Set the inner text\n    //\n    $('[data-bind-radio]').each(function(){\n      var e     = $(this),\n          radio = e.data('bind-radio'),\n          value = $('input[name=\"'+ radio +'\"]:checked').val();\n      e.text( e.dataAttr(value, e.text()) );\n\n      $('input[name=\"'+ radio +'\"]').on('change', function() {\n        var value = $('input[name=\"'+ radio +'\"]:checked').val();\n        $('[data-bind-radio=\"'+ radio +'\"]').each(function(){\n          var e = $(this);\n          e.text( e.dataAttr(value, e.text()) );\n        });\n      });\n    });\n\n\n    // Set href attribute\n    //\n    $('[data-bind-href]').each(function(){\n      var e     = $(this),\n          radio = e.data('bind-href'),\n          value = $('input[name=\"'+ radio +'\"]:checked').val();\n\n      e.attr( 'href', e.dataAttr(value) );\n\n      $('input[name=\"'+ radio +'\"]').on('change', function() {\n        var value = $('input[name=\"'+ radio +'\"]:checked').val();\n        $('[data-bind-href=\"'+ radio +'\"]').each(function(){\n          var e = $(this);\n          e.attr( 'href', e.dataAttr(value) );\n        });\n      });\n    });\n\n  }\n\n}(jQuery);\n\n","\n/**\n *\n */\n\n+function($){\n\n  page.initDrawer = function() {\n\n    $(document).on( 'click', '.drawer-toggler, .drawer-close, .backdrop-drawer', function() {\n      $('body').toggleClass( 'drawer-open' );\n    });\n\n  }\n\n}(jQuery);\n\n","\n/**\n *\n */\n\n+function($){\n\n  page.initFont = function() {\n\n    var fonts = [];\n\n    $('[data-font]').each(function(){\n      var tag  = $(this),\n          font = tag.data('font')\n          part = font.split(':');\n\n      fonts.push(font);\n      tag.css({'font-family': part[0], 'font-weight': part[1]});\n    });\n\n    if (fonts.length > 0) {\n      $(\"head\").append(\"<link href='https://fonts.googleapis.com/css?family=\" + fonts.join('|') + \"' rel='stylesheet'>\");\n    }\n\n  }\n\n}(jQuery);\n\n","\n/**\n * All the form related methods.\n */\n\n+function($){\n\n  page.initForm = function() {\n\n\n    /**\n     * Add/remove .focus to .input-group\n     */\n    $(document).on('focusin', '.input-group', function() {\n      $(this).addClass('focus');\n    });\n\n    $(document).on('focusout', '.input-group', function() {\n      $(this).removeClass('focus');\n    });\n\n\n    // Switch\n    //\n    $(document).on('click', '.switch', function() {\n      var input = $(this).children('.switch-input').not(':disabled');\n      input.prop('checked', ! input.prop('checked')).trigger(\"change\");\n    });\n\n\n    // Upload\n    //\n    $(document).on('click', '.file-browser', function() {\n      var browser = $(this);\n      var file = browser.closest('.file-group').find('[type=\"file\"]');\n      if ( browser.hasClass('form-control') ) {\n        setTimeout(function(){\n          file.trigger('click');\n        },300);\n      }\n      else {\n        file.trigger('click');\n      }\n    });\n\n    // Event to change file name after file selection\n    $(document).on('change', '.file-group [type=\"file\"]', function(){\n      var input = $(this);\n      var filename = input.val().split('\\\\').pop();\n      input.closest('.file-group').find('.file-value').val(filename).text(filename).focus();\n    });\n\n\n  }\n\n}(jQuery);\n","\n/**\n * Send a form details to the sendmail.php file.\n */\n\n+function($){\n\n  page.initMailer = function() {\n\n    var validEmail = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n    $('[data-form=\"mailer\"]').each(function() {\n\n      var form      = $(this),\n          email     = form.find('[name=\"email\"]'),\n          message   = form.find('[name=\"message\"]'),\n          onSuccess = form.dataAttr('on-success', null),\n          onError   = form.dataAttr('on-error', null);\n\n      form.on('submit', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        form.children('.alert-danger').remove();\n\n        form.find('[required]').each(function() {\n          if ( $(this).val().length < 1 ) {\n            $(this).addClass('is-invalid');\n          }\n          else {\n            $(this).removeClass('is-invalid');\n          }\n        });\n\n        form.find('[type=\"email\"]').each(function() {\n          if ( ! validEmail.test( $(this).val() ) ) {\n            $(this).addClass('is-invalid');\n          }\n          else {\n            $(this).removeClass('is-invalid');\n          }\n        });\n\n\n\n        if ( email.length ) {\n          if ( email.val().length < 1 || ! validEmail.test( email.val() ) ) {\n            email.addClass('is-invalid');\n            //return false;\n          }\n        }\n\n\n        if ( message.length ) {\n          if ( message.val().length < 1 ) {\n            message.addClass('is-invalid');\n            //return false;\n          }\n        }\n\n        if (form.find('.is-invalid').length) {\n          return false;\n        }\n\n        $.ajax({\n          type: \"POST\",\n          url: form.attr('action'),\n          data: form.serializeArray(),\n        })\n        .done( function( data ) {\n          var response = $.parseJSON( data );\n          if ( 'success' == response.status ) {\n            form.find('.alert-success').fadeIn(1000);\n            form.find(':input').val('');\n            if ( onSuccess !== null ) {\n              window[onSuccess]();\n            }\n          }\n          else {\n            form.prepend('<div class=\"alert alert-danger\">'+ response.message +'</div>');\n            console.log( response.reason );\n            if ( onError !== null ) {\n              window[onError](response.reason);\n            }\n          }\n        });\n\n        return false;\n      });\n\n\n      form.find('[required], [type=\"email\"]').each(function() {\n        $(this).on('focus', function() {\n          $(this).removeClass('is-invalid');\n        });\n      });\n\n\n      email.on('focus', function() {\n        $(this).removeClass('is-invalid');\n      });\n\n      message.on('focus', function() {\n        $(this).removeClass('is-invalid');\n      });\n\n    });\n\n  }\n\n}(jQuery);\n\n","\n/**\n * Display google map.\n */\n\n+function($){\n\n  page.initMap = function() {\n\n    $('[data-provide~=\"map\"]').each(function() {\n      var tag = $(this),\n          setting = {\n            lat: '',\n            lng: '',\n            zoom: 13,\n            markerLat: '',\n            markerLng: '',\n            markerIcon: '',\n            markers: '',\n            style: '',\n            removeControls: false,\n          };\n\n      setting = $.extend(setting, page.getDataOptions(tag));\n\n      var map = new google.maps.Map( tag[0], {\n        center: {\n          lat: Number(setting.lat),\n          lng: Number(setting.lng)\n        },\n        zoom: Number(setting.zoom),\n        disableDefaultUI: setting.removeControls,\n      });\n\n      // Multiple locations\n      //\n      if (setting.markers != '') {\n\n        var locations = JSON.parse(\"[\" + setting.markers.replace(/'/g, '\"') + \"]\"),\n            infowindow = new google.maps.InfoWindow(),\n            marker, i;\n\n        for (i = 0; i < locations.length; i++) {\n          var markerIcon = setting.markerIcon;\n\n          if ( locations[i].length > 3 && locations[i][3] != '' ) {\n            markerIcon = locations[i][3];\n          }\n\n          marker = new google.maps.Marker({\n            position: {\n              lat: Number(locations[i][0]),\n              lng: Number(locations[i][1])\n            },\n            map: map,\n            animation: google.maps.Animation.DROP,\n            icon: markerIcon\n          });\n\n          if ( locations[i].length > 2 && locations[i][2] != '' ) {\n            google.maps.event.addListener(marker, 'click', (function(marker, i) {\n              return function() {\n                infowindow.setContent(locations[i][2]);\n                infowindow.open(map, marker);\n              }\n            })(marker, i));\n          }\n\n        }\n\n      }\n\n      // Single location\n      //\n      else {\n\n        var marker = new google.maps.Marker({\n          position: {\n            lat: Number(setting.markerLat),\n            lng: Number(setting.markerLng)\n          },\n          map: map,\n          animation: google.maps.Animation.DROP,\n          icon: setting.markerIcon\n        });\n\n        if (tag.is('[data-info]')) {\n          var infowindow = new google.maps.InfoWindow({\n            content: tag.dataAttr('info', '')\n          });\n\n          marker.addListener('click', function() {\n            infowindow.open(map, marker);\n          });\n        }\n\n      }\n\n\n      switch (setting.style) {\n        case 'light':\n          map.set('styles', [{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#e9e9e9\"},{\"lightness\":17}]},{\"featureType\":\"landscape\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f5f5f5\"},{\"lightness\":20}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#ffffff\"},{\"lightness\":17}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#ffffff\"},{\"lightness\":29},{\"weight\":0.2}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#ffffff\"},{\"lightness\":18}]},{\"featureType\":\"road.local\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#ffffff\"},{\"lightness\":16}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f5f5f5\"},{\"lightness\":21}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dedede\"},{\"lightness\":21}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"visibility\":\"on\"},{\"color\":\"#ffffff\"},{\"lightness\":16}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"saturation\":36},{\"color\":\"#333333\"},{\"lightness\":40}]},{\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f2f2f2\"},{\"lightness\":19}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#fefefe\"},{\"lightness\":20}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#fefefe\"},{\"lightness\":17},{\"weight\":1.2}]}]);\n          break;\n\n        case 'dark':\n          map.set('styles', [{\"featureType\":\"all\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"saturation\":36},{\"color\":\"#000000\"},{\"lightness\":40}]},{\"featureType\":\"all\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"visibility\":\"on\"},{\"color\":\"#000000\"},{\"lightness\":16}]},{\"featureType\":\"all\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":20}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17},{\"weight\":1.2}]},{\"featureType\":\"landscape\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":20}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":21}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":29},{\"weight\":0.2}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":18}]},{\"featureType\":\"road.local\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":16}]},{\"featureType\":\"transit\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":19}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17}]}])\n          break;\n\n        default:\n          if ( Array.isArray(setting.style) ) {\n            map.set('styles', setting.style);\n          }\n      }\n\n    });\n\n  }\n\n}(jQuery);\n\n","\n/**\n * All the modal related methods.\n */\n\n+function($){\n\n  page.initModal = function() {\n    var body = page.body;\n\n    /**\n     * Autoshow\n     */\n    $('.modal[data-autoshow]').each(function(){\n      var modal = $(this),\n          delay = parseInt( modal.dataAttr('autoshow') );\n      setTimeout( function() { modal.modal('show') }, delay);\n    });\n\n\n     /**\n      * Exit\n      */\n    $('.modal[data-exitshow]').each(function(){\n      var modal  = $(this),\n          delay  = parseInt( modal.dataAttr('delay', 0) ),\n          target = modal.dataAttr('exitshow');\n\n      if ( $(target).length ) {\n        $(document).one('mouseleave', target, function() {\n          setTimeout( function() { modal.modal('show') }, delay);\n        });\n      }\n\n    });\n\n  }\n\n}(jQuery);\n","\n/**\n * All the navbar related methods.\n */\n\n+function($){\n\n  page.initNavbar = function() {\n\n    /**\n     * Toggle navbar\n     */\n    $(document).on('click', '.navbar-toggler', function() {\n      page.navbarToggle();\n    });\n\n\n    /**\n     * Tapping on the backdrop will close the navbar\n     */\n    $(document).on('click', '.backdrop-navbar', function() {\n      page.navbarClose();\n    });\n\n\n    /**\n     * Toggle menu open on small screen devices\n     */\n    $(document).on('click', '.navbar-open .nav-navbar > .nav-item > .nav-link', function() {\n      $(this).closest('.nav-item').siblings('.nav-item').find('> .nav:visible').slideUp(333, 'linear');\n      $(this).next('.nav').slideToggle(333, 'linear');\n    });\n\n  }\n\n\n  page.navbarToggle = function() {\n    var body   = page.body,\n        navbar = page.navbar;\n\n    body.toggleClass('navbar-open');\n    if (body.hasClass('navbar-open')) {\n      navbar.prepend('<div class=\"backdrop backdrop-navbar\"></div>');\n    }\n  }\n\n  page.navbarClose = function() {\n    page.body.removeClass('navbar-open');\n    $('.backdrop-navbar').remove();\n  }\n\n}(jQuery);\n","\n/**\n * All the popup related methods.\n */\n\n+function($){\n\n  page.initOffcanvas = function() {\n\n    /**\n     * Toggle\n     */\n    $(document).on('click', '[data-toggle=\"offcanvas\"]', function() {\n      var target     = $(this).data('target'),\n          offcanvas  = $(target);\n\n      if ( target !== undefined && offcanvas.length ) {\n        if (offcanvas.hasClass('show')) {\n          $('.backdrop-offcanvas').remove();\n          offcanvas.removeClass('show');\n        }\n        else {\n          offcanvas.before('<div class=\"backdrop backdrop-offcanvas\"></div>');\n          offcanvas.addClass('show');\n          setTimeout(function() { offcanvas.find('input:text:visible:first').focus(); }, 300);\n        }\n      }\n    });\n\n\n    /**\n     * Dismiss\n     */\n    $(document).on('click', '.offcanvas [data-dismiss], .backdrop-offcanvas', function() {\n      $('.offcanvas.show').removeClass('show');\n      $('.backdrop-offcanvas').remove();\n    });\n\n\n    /**\n     * Esc key\n     */\n    $(document).on('keyup', function(e) {\n      if ($('.offcanvas.show').length && e.keyCode == 27) { // esc keycode\n        $('.offcanvas.show').removeClass('show');\n        $('.backdrop-offcanvas').remove();\n      }\n    });\n  }\n\n}(jQuery);\n","\n/**\n * All the popup related methods.\n */\n\n+function($){\n\n  page.initPopup = function() {\n    var body = page.body;\n\n\n    /**\n     * Toggle\n     */\n    $(document).on('click', '[data-toggle=\"popup\"]', function() {\n      var target = $(this).data('target'),\n          popup  = $(target);\n\n      if ( target !== undefined && popup.length ) {\n        if (popup.hasClass('show')) {\n          popup.removeClass('show');\n        }\n        else {\n          popupShow(popup);\n        }\n      }\n    });\n\n\n    /**\n     * Dismiss\n     */\n    $(document).on('click', '.popup [data-dismiss]', function() {\n      $(this).closest('.popup').removeClass('show');\n    });\n\n\n    /**\n     * Autoshow\n     */\n    $('.popup[data-autoshow]').each(function(){\n      var popup = $(this),\n          delay = parseInt( popup.dataAttr('autoshow') );\n      setTimeout( function() { popupShow(popup) }, delay);\n    });\n\n\n    /**\n     * Exit\n     */\n    $('.popup[data-exitshow]').each(function(){\n      var popup  = $(this),\n          delay  = parseInt( popup.dataAttr('delay', 0) ),\n          target = popup.dataAttr('exitshow');\n\n      if ( $(target).length ) {\n        $(document).one('mouseleave', target, function() {\n          setTimeout( function() { popupShow(popup) }, delay);\n        });\n      }\n\n    });\n\n\n    /**\n     * Show\n     */\n    var popupShow = function(popup) {\n\n      var autohide = parseInt( popup.dataAttr('autohide', 0) ),\n          once_key = popup.dataAttr('once', '');\n\n      // Check if it was a once popup\n      if (once_key != '') {\n        if (localStorage.getItem(once_key) == 'displayed') {\n          return;\n        }\n\n        var once_btn = popup.find('[data-once-button=\"true\"]');\n        if (once_btn.length) {\n          once_btn.on('click', function() {\n            localStorage.setItem(once_key, 'displayed');\n          });\n        }\n        else {\n          localStorage.setItem(once_key, 'displayed');\n        }\n      }\n\n      popup.addClass('show');\n      setTimeout(function() { popup.find('input:text:visible:first').focus(); }, 300);\n\n      if (autohide > 0) {\n        setTimeout( function() { popup.removeClass('show') }, autohide);\n      }\n    }\n  }\n\n}(jQuery);\n","\n/**\n *\n */\n\n+function($){\n\n  page.initRecaptcha = function() {\n    $('[data-provide~=\"recaptcha\"]').each(function() {\n\n      var options = {\n        sitekey: page.defaults.reCaptchaSiteKey\n      }\n\n      options = $.extend(options, page.getDataOptions($(this)));\n\n      if (options.enable) {\n        options.callback = function() {\n          $(options.enable).removeAttr('disabled');\n        }\n\n        options['expired-callback'] = function() {\n          $(options.enable).attr('disabled', 'true');\n        }\n\n        $(this).closest('form').on('submit', function(e) {\n          if ( $(this).find( options.enable ).attr('disabled') === 'true' ) {\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        });\n      }\n\n      grecaptcha.render( $(this)[0], options);\n    });\n  }\n\n  window.recaptchaLoadCallback = function() {\n    page.initRecaptcha();\n  }\n\n\n}(jQuery);\n\n","\n/**\n * All methods related to the page scroll and link click.\n */\n\n+function($){\n\n  var body = page.body,\n      footer = page.footer,\n      hasHeader = page.header.length,\n      navbarHeight = page.navbar.outerHeight(),\n      headerHeight = page.header.innerHeight(),\n      scrollOffsetTop = 0,\n      prevOffsetTop = 0;\n\n  page.initScroll = function() {\n\n\n    if ( $('[data-navbar=\"fixed\"], [data-navbar=\"sticky\"], [data-navbar=\"smart\"]').length ) {\n      scrollOffsetTop = navbarHeight;\n    }\n\n    $(document).on( 'click', \"a[href='#']\", function() {\n      return false;\n    });\n\n\n    // Back to top\n    //\n    $(document).on('click', '.scroll-top', function() {\n      smoothlyScrollTo(0);\n      return false;\n    });\n\n\n    // Smooth scroll for anchors\n    //\n    $(document).on( 'click', \"a[href^='#']\", function() {\n      if ( $(this).attr('href').length < 2 ) {\n        return;\n      }\n\n      if ( $(this)[0].hasAttribute('data-toggle') ) {\n        return;\n      }\n\n      var target = $( $(this).attr('href') );\n      if ( target.length ) {\n        var targetTop = target.offset().top,\n            windowTop = $(window).scrollTop();\n\n        // We don't need offsetTop for scroll down with smart navbar\n        //\n        if ( targetTop > windowTop && $('.navbar[data-navbar=\"smart\"]').length ) {\n          smoothlyScrollTo( targetTop );\n        }\n        else {\n          smoothlyScrollTo( targetTop - scrollOffsetTop );\n        }\n\n        if (body.hasClass('navbar-open')) {\n          page.navbarClose();\n        }\n        return false;\n      }\n    });\n\n\n    // Smoothscroll to anchor in page load\n    //\n    var hash = location.hash.replace('#','');\n    if ( hash != '' ) {\n      var el = $(\"#\"+hash);\n      if (el.length > 0) {\n        smoothlyScrollTo( el.offset().top - scrollOffsetTop );\n      }\n    }\n\n\n    // Actions which are related to the page scroll position\n    windowScrollActions();\n\n    $(window).on('scroll', function() {\n      windowScrollActions()\n    });\n\n\n\n    // In page navigation\n    //\n    if ( $('.nav-page').length ) {\n\n      var tooltip_pos = 'left',\n          tooltip_offset = '0, 12';\n\n      if ( $('.nav-page.nav-page-left').length ) {\n        tooltip_pos = 'right';\n        tooltip_offset = '0, 12';\n      }\n\n      var spy_offset = parseInt( $('.nav-page').dataAttr('spy-offset', 200) );\n\n      // Enable tooltip\n      $('.nav-page .nav-link').tooltip({\n        container: 'body',\n        placement: tooltip_pos,\n        offset: tooltip_offset,\n        trigger: 'hover'\n      });\n\n\n      // Enable Scroll Spy\n      $('body').scrollspy({\n        target: '.nav-page',\n        offset: spy_offset\n      });\n\n    }\n\n\n    // Sticky sidebar width\n    //\n    $('.sidebar-sticky').each(function() {\n      var tag = $(this),\n          width = tag.closest('div').width();\n      tag.css('width', width);\n\n      if (body.width() / width < 1.8) {\n        tag.addClass('is-mobile-wide');\n      }\n    });\n\n  }\n\n\n  var windowScrollActions = function() {\n    var window_top = $(window).scrollTop();\n\n    // .body-scrolled\n    //\n    if (window_top > 1) {\n      body.addClass('body-scrolled');\n    }\n    else {\n      body.removeClass('body-scrolled');\n    }\n\n    // .navbar-scrolled\n    //\n\n    if (window_top > navbarHeight) {\n      body.addClass('navbar-scrolled');\n    }\n    else {\n      body.removeClass('navbar-scrolled');\n    }\n\n\n    // .header-scrolled\n    //\n    if (window_top > headerHeight - navbarHeight - 1) {\n      body.addClass('header-scrolled');\n    }\n    else {\n      body.removeClass('header-scrolled');\n    }\n\n    // Sticky elements\n    //\n    $('[data-sticky=\"true\"]').each(function() {\n      var tag = $(this),\n          top = tag.offset().top;\n\n      if ( ! tag.hasDataAttr('original-top') ) {\n        tag.attr('data-original-top', top);\n      }\n\n      var stick_start = tag.dataAttr('original-top'),\n          stick_end   = footer.offset().top - tag.outerHeight();\n\n      if (window_top > stick_start) {// && window_top <= stick_end) {\n        tag.addClass('stick');\n      }\n      else {\n        tag.removeClass('stick');\n      }\n    });\n\n    // Smart navbar\n    //\n    $('[data-navbar=\"smart\"]').each(function() {\n      var tag = $(this);\n\n      //toggleFixClass(tag);\n      if (window_top < prevOffsetTop) {\n        toggleStickClass(tag);\n      }\n      else {\n        tag.removeClass('stick');\n      }\n    });\n\n    // Sticky navbar\n    //\n    $('[data-navbar=\"sticky\"]').each(function() {\n      var tag = $(this);\n      toggleStickClass(tag);\n    });\n\n    // Fixed navbar\n    //\n    $('[data-navbar=\"fixed\"]').each(function() {\n      var tag = $(this);\n      if (body.hasClass('body-scrolled')) {\n        tag.addClass('stick');\n      }\n      else {\n        tag.removeClass('stick');\n      }\n    });\n\n    // Sticky sidebar\n    //\n    $('.sidebar-sticky').each(function() {\n      var tag = $(this);\n      toggleStickClass(tag);\n    });\n\n    // Fadeout effect\n    //\n    $('.header.fadeout').css('opacity', (1-window_top-200 / window.innerHeight) );\n\n\n    prevOffsetTop = window_top;\n  }\n\n\n  var smoothlyScrollTo = function(pos) {\n    $('html, body').animate({scrollTop: pos}, 600);\n  }\n\n\n  var toggleFixClass = function(tag) {\n    if (body.hasClass('navbar-scrolled')) {\n      tag.addClass('fix');\n    }\n    else {\n      tag.removeClass('fix');\n    }\n  }\n\n  var toggleStickClass = function(tag) {\n    var requiredClass = 'navbar-scrolled';\n    if ( hasHeader ) {\n      requiredClass = 'header-scrolled';\n    }\n\n    if (body.hasClass(requiredClass)) {\n      tag.addClass('stick');\n    }\n    else {\n      tag.removeClass('stick');\n    }\n  }\n\n}(jQuery);\n","\n/**\n *\n */\n\n+function($){\n\n  page.initSection = function() {\n\n  }\n\n}(jQuery);\n\n","\n/**\n *\n */\n\n+function($){\n\n  page.initSidebar = function() {\n    var body = page.body;\n\n    $(document).on( 'click', '.sidebar-toggler, .sidebar-close, .backdrop-sidebar', function() {\n      body.toggleClass( 'sidebar-open' );\n      if ( body.hasClass('sidebar-open') ) {\n        body.prepend('<div class=\"backdrop backdrop-sidebar\"></div>')\n      }\n      else {\n        $('.backdrop-sidebar').remove();\n      }\n    });\n\n    // Sidebar nav\n    //\n    var navItemShow = $('.nav-sidebar .nav-item.show');\n    navItemShow.find('> .nav-link .nav-angle').addClass('rotate');\n    navItemShow.find('> .nav').css('display', 'block');\n    navItemShow.removeClass('show');\n\n    var navSidebarIsAccordion = false;\n    if ( 'true' == $('.nav-sidebar').dataAttr('accordion', 'false') ) {\n      navSidebarIsAccordion = true;\n    }\n\n    $(document).on( 'click', '.nav-sidebar > .nav-item > .nav-link', function() {\n      var link = $(this);\n      link.next('.nav').slideToggle();\n      if ( navSidebarIsAccordion ) {\n        link.closest('.nav-item').siblings('.nav-item').children('.nav:visible').slideUp().prev('.nav-link').children('.nav-angle').removeClass('rotate');\n      }\n      link.children('.nav-angle').toggleClass('rotate');\n    });\n\n\n    // Perfect scrollbar\n    //\n    $('.sidebar-body').each(function(e) {\n      var ps = new PerfectScrollbar($(this)[0], {\n        wheelSpeed: 0.4,\n        minScrollbarLength: 20\n      });\n    })\n\n  }\n\n}(jQuery);\n\n","\n/**\n * All the video related methods.\n */\n\n+function($){\n\n  page.initVideo = function() {\n\n    // Video-wrapper\n    //\n    $(document).on('click', '.video-wrapper .btn', function(){\n      var wrapper = $(this).closest('.video-wrapper');\n      wrapper.addClass('reveal');\n\n      if ( wrapper.find('video').length )\n        wrapper.find('video').get(0).play();\n\n      if ( wrapper.find('iframe').length ) {\n        var iframe = wrapper.find('iframe');\n        var src = iframe.attr('src');\n\n        if ( src.indexOf('?') > 0 )\n          iframe.get(0).src += \"&autoplay=1\";\n        else\n          iframe.get(0).src += \"?autoplay=1\";\n      }\n    });\n\n\n    // Object-fit polyfill\n    //\n    objectFitPolyfill( $('.bg-video') );\n\n  }\n\n}(jQuery);\n","\n/**\n * Utility functions to be used in the whole application.\n */\n\n+function($){\n\n  // Convert data-attributes options to Javascript object\n  //\n  page.getDataOptions = function(el, castList) {\n    var options = {};\n\n    $.each( $(el).data(), function(key, value){\n\n      key = page.dataToOption(key);\n\n      // Escape data-provide\n      if ( key == 'provide' ) {\n        return;\n      }\n\n      if ( castList != undefined ) {\n        var type = castList[key];\n        switch (type) {\n          case 'bool':\n            value = Boolean(value);\n            break;\n\n          case 'num':\n            value = Number(value);\n            break;\n\n          case 'array':\n            value = value.split(',');\n            break;\n\n          default:\n\n        }\n      }\n\n      options[key] = value;\n    });\n\n    return options;\n  }\n\n\n  // Get target of an action from element.\n  //\n  // It can be 'data-target' or 'href' attribute.\n  // We support 'next' and 'prev' values to target next or previous element. In this case, we return jQuery element.\n  //\n  page.getTarget = function(e) {\n    var target;\n    if ( e.hasDataAttr('target') ) {\n      target = e.data('target');\n    }\n    else {\n      target = e.attr('href');\n    }\n\n    if ( target == 'next' ) {\n      target = $(e).next();\n    }\n    else if ( target == 'prev' ) {\n      target = $(e).prev();\n    }\n\n    if ( target == undefined ) {\n      return false;\n    }\n\n    return target;\n  };\n\n\n\n\n\n  // Get URL of an action from element.\n  //\n  // It can be 'data-url' or 'href' attribute.\n  //\n  page.getURL = function(e) {\n    var url;\n    if ( e.hasDataAttr('url') ) {\n      url = e.data('url');\n    }\n    else {\n      url = e.attr('href');\n    }\n\n    return url;\n  };\n\n\n\n  // Convert fooBarBaz to foo-bar-baz\n  //\n  page.optionToData = function(name) {\n    return name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n  }\n\n\n  // Convert foo-bar-baz to fooBarBaz\n  //\n  page.dataToOption = function(name) {\n    return name.replace(/-([a-z])/g, function(x){return x[1].toUpperCase();});\n  }\n\n}(jQuery);\n","$(function() {\n\n\n  /*\n  |--------------------------------------------------------------------------\n  | Configure your website\n  |--------------------------------------------------------------------------\n  |\n  | We provided several configuration variables for your ease of development.\n  | Read their complete description and modify them based on your need.\n  |\n  */\n\n  page.config({\n\n    /*\n    |--------------------------------------------------------------------------\n    | Google API Key\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify your Google API key if you need to use Google Maps\n    | in your application\n    |\n    | https://developers.google.com/maps/documentation/javascript/get-api-key\n    |\n    */\n\n    googleApiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Google Analytics Tracking\n    |--------------------------------------------------------------------------\n    |\n    | If you want to use Google Analytics, you can specify your Tracking ID in\n    | this option. Your key would be a value like: UA-12345678-9\n    |\n    */\n\n    googleAnalyticsId: 'UA-140171257-1',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Google reCAPTCHA\n    |--------------------------------------------------------------------------\n    |\n    | reCAPTCHA protects you against spam and other types of automated abuse.\n    | Please signup for an API key pair and insert your `Site key` value to the\n    | following variable.\n    |\n    | http://www.google.com/recaptcha/admin\n    |\n    */\n\n    reCaptchaSiteKey:  'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n\n    // See available languages: https://developers.google.com/recaptcha/docs/language\n    reCaptchaLanguage: '',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Disable AOS on mobile\n    |--------------------------------------------------------------------------\n    |\n    | If true, the Animate On Scroll animations don't run on mobile devices.\n    |\n    */\n\n    disableAOSonMobile: true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Smooth Scroll\n    |--------------------------------------------------------------------------\n    |\n    | If true, the browser's scrollbar moves smoothly on scroll and gives your\n    | visitor a better experience for scrolling.\n    |\n    */\n\n    smoothScroll: true,\n\n  });\n\n});\n","\n/*\n|--------------------------------------------------------------------------\n| Custom Javascript code\n|--------------------------------------------------------------------------\n|\n| Now that you configured your website, you can write additional Javascript\n| code inside the following function. You might want to add more plugins and\n| initialize them in this file.\n|\n*/\n\n$(function() {\n\n\n\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,a=1,s=arguments.length;a<s;a++)for(var n in i=arguments[a])Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n]);return t}).apply(this,arguments)},CountUp=function(){function t(t,i,a){var s=this;this.target=t,this.endVal=i,this.options=a,this.version=\"2.0.4\",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,smartEasingThreshold:999,smartEasingAmount:333,separator:\",\",decimal:\".\",prefix:\"\",suffix:\"\"},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error=\"\",this.startVal=0,this.paused=!0,this.count=function(t){s.startTime||(s.startTime=t);var i=t-s.startTime;s.remaining=s.duration-i,s.useEasing?s.countDown?s.frameVal=s.startVal-s.easingFn(i,0,s.startVal-s.endVal,s.duration):s.frameVal=s.easingFn(i,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(i/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(i/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.decimalMult)/s.decimalMult,s.printValue(s.frameVal),i<s.duration?s.rAF=requestAnimationFrame(s.count):null!==s.finalEndVal?s.update(s.finalEndVal):s.callback&&s.callback()},this.formatNumber=function(t){var i,a,n,e,r,o=t<0?\"-\":\"\";if(i=Math.abs(t).toFixed(s.options.decimalPlaces),n=(a=(i+=\"\").split(\".\"))[0],e=a.length>1?s.options.decimal+a[1]:\"\",s.options.useGrouping){r=\"\";for(var l=0,h=n.length;l<h;++l)0!==l&&l%3==0&&(r=s.options.separator+r),r=n[h-l-1]+r;n=r}return s.options.numerals&&s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(t){return s.options.numerals[+t]}),e=e.replace(/[0-9]/g,function(t){return s.options.numerals[+t]})),o+s.options.prefix+n+e+s.options.suffix},this.easeOutExpo=function(t,i,a,s){return a*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=__assign({},this.defaults,a),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(i),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.decimalMult=Math.pow(10,this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,\"\"===this.options.separator&&(this.options.useGrouping=!1),this.el=\"string\"==typeof t?document.getElementById(t):t,this.el?this.printValue(this.startVal):this.error=\"[CountUp] target is null or undefined\"}return t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold){this.finalEndVal=t;var a=this.countDown?1:-1;this.endVal=t+a*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal||this.resetDuration(),this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \"+t,null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","\n/**\n * Load required plugins.\n */\nrequire('waypoints/lib/jquery.waypoints');\nimport { CountUp } from 'countup.js';\n\n/**\n * Configure the plugin.\n */\n\n+function($){\n  page.registerVendor('Countup');\n\n  page.initCountup = function() {\n\n    $('[data-provide~=\"countup\"]:not(.counted)').each(function() {\n      var tag = $(this);\n      var extraOptions = {};\n      extraOptions = $.extend( extraOptions, page.getDataOptions(tag));\n\n      var options = {\n        startVal: tag.dataAttr('from', 0),\n        endVal:   tag.dataAttr('to', 0),\n        options:  extraOptions,\n      };\n      options = $.extend( options, page.getDataOptions(tag));\n\n      tag.waypoint({\n        handler: function($direction) {\n          tag.countup(options).addClass('counted');\n        },\n        offset: '100%'\n      });\n\n    });\n\n  }\n\n}(jQuery);\n\n\n\n(function ($) {\n  $.fn.countup = function (params) {\n    // make sure dependency is present\n    if (typeof CountUp !== 'function') {\n      console.error('countUp.js is a required dependency of countUp-jquery.js.');\n      return;\n    }\n    \n    var defaults = {\n      startVal: 0,\n      decimalPlaces: 0,\n      duration: 4,\n    };\n\n    if (typeof params === 'number') {\n      defaults.endVal = params;\n    }\n    else if (typeof params === 'object') {\n      $.extend(defaults, params);\n    }\n    else {\n      console.error('countUp-jquery requires its argument to be either an object or number');\n      return;\n    }\n\n    this.each(function (i, elem) {\n      var countUp = new CountUp(elem, defaults.endVal, defaults.options);\n      countUp.start();\n    });\n\n    return this;\n  };\n\n}(jQuery));"],"sourceRoot":""}