mirror of
https://github.com/a2nt/webpack-bootstrap-ui-kit.git
synced 2024-10-22 11:05:45 +02:00
1 line
802 KiB
Plaintext
1 line
802 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/.pnpm/npm.pkg.github.com/@a2nt/meta-lightbox/2.0.9/node_modules/@a2nt/meta-lightbox/src/js/meta-lightbox.js","webpack:///../src/alert.js","webpack:///../src/button.js","webpack:///../src/carousel.js","webpack:///../src/collapse.js","webpack:///../src/modal.js","webpack:///../src/popover.js","webpack:///../src/scrollspy.js","webpack:///../src/tab.js","webpack:///../src/tools/sanitizer.js","webpack:///../src/tooltip.js","webpack:///../src/util.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/hammerjs/2.0.8/node_modules/hammerjs/hammer.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/jquery-hammerjs/2.0.0/node_modules/jquery-hammerjs/jquery.hammer.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/jquery-hoverintent/1.10.1/node_modules/jquery-hoverintent/jquery.hoverIntent.js","webpack:///../../src/utils/isBrowser.js","webpack:///../../src/utils/debounce.js","webpack:///../../src/utils/isFunction.js","webpack:///../../src/utils/getStyleComputedProperty.js","webpack:///../../src/utils/getParentNode.js","webpack:///../../src/utils/getScrollParent.js","webpack:///../../src/utils/getReferenceNode.js","webpack:///../../src/utils/isIE.js","webpack:///../../src/utils/getOffsetParent.js","webpack:///../../src/utils/getRoot.js","webpack:///../../src/utils/findCommonOffsetParent.js","webpack:///../../src/utils/isOffsetContainer.js","webpack:///../../src/utils/getScroll.js","webpack:///../../src/utils/includeScroll.js","webpack:///../../src/utils/getBordersSize.js","webpack:///../../src/utils/getWindowSizes.js","webpack:///../../src/utils/getClientRect.js","webpack:///../../src/utils/getBoundingClientRect.js","webpack:///../../src/utils/getOffsetRectRelativeToArbitraryNode.js","webpack:///../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","webpack:///../../src/utils/isFixed.js","webpack:///../../src/utils/getFixedPositionOffsetParent.js","webpack:///../../src/utils/getBoundaries.js","webpack:///../../src/utils/computeAutoPlacement.js","webpack:///../../src/utils/getReferenceOffsets.js","webpack:///../../src/utils/getOuterSizes.js","webpack:///../../src/utils/getOppositePlacement.js","webpack:///../../src/utils/getPopperOffsets.js","webpack:///../../src/utils/find.js","webpack:///../../src/utils/runModifiers.js","webpack:///../../src/utils/findIndex.js","webpack:///../../src/methods/update.js","webpack:///../../src/utils/isModifierEnabled.js","webpack:///../../src/utils/getSupportedPropertyName.js","webpack:///../../src/methods/destroy.js","webpack:///../../src/utils/getWindow.js","webpack:///../../src/utils/setupEventListeners.js","webpack:///../../src/methods/enableEventListeners.js","webpack:///../../src/methods/disableEventListeners.js","webpack:///../../src/utils/removeEventListeners.js","webpack:///../../src/utils/isNumeric.js","webpack:///../../src/utils/setStyles.js","webpack:///../../src/modifiers/computeStyle.js","webpack:///../../src/utils/isModifierRequired.js","webpack:///../../src/methods/placements.js","webpack:///../../src/utils/clockwise.js","webpack:///../../src/modifiers/flip.js","webpack:///../../src/modifiers/offset.js","webpack:///../../src/modifiers/index.js","webpack:///../../src/methods/defaults.js","webpack:///../../src/modifiers/shift.js","webpack:///../../src/modifiers/preventOverflow.js","webpack:///../../src/modifiers/keepTogether.js","webpack:///../../src/modifiers/arrow.js","webpack:///../../src/utils/getOppositeVariation.js","webpack:///../../src/modifiers/inner.js","webpack:///../../src/modifiers/hide.js","webpack:///../../src/utils/getRoundedOffsets.js","webpack:///../../src/modifiers/applyStyle.js","webpack:///../../src/utils/setAttributes.js","webpack:///../../src/index.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/select2/4.0.13/node_modules/select2/dist/js/select2.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/smooth-scroll/14.2.1/node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/font-awesome sync nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$","webpack:///./src/img sync nonrecursive \\.(png|jpe","webpack:///./src/img/bg.png","webpack:///./src/img/photo1.png","webpack:///./src/img/photo2.jpg","webpack:///./src/img/photo3.svg","webpack:///./src/js/_components/drivers/_google.track.external.links.js","webpack:///./src/js/_components/drivers/_map.google.marker.js","webpack:///./src/js/_components/drivers/_map.google.js","webpack:///./src/js/_consts.js","webpack:///./src/js/_events.js","webpack:///./src/js/_components/_ui.hover.js","webpack:///./src/js/_components/_ui.carousel.js","webpack:///./src/js/_components/_ui.menu.js","webpack:///./src/js/_components/_ui.cookie.js","webpack:///./src/js/_components/_ui.flyout.js","webpack:///./node_modules/.pnpm/registry.npmjs.org/sticky-sidebar/3.3.1/node_modules/sticky-sidebar/src/sticky-sidebar.js","webpack:///./src/js/_components/_ui.sidebar.js","webpack:///./src/js/_components/_ui.spinner.js","webpack:///./src/js/_components/_ui.ajax.js","webpack:///./src/js/_components/_ui.form.fields.js","webpack:///./src/js/_components/_ui.form.basics.js","webpack:///./src/js/_components/_ui.header-footer.js","webpack:///./src/js/_main.js","webpack:///./src/js/_components/_ui.video.preview.js","webpack:///./src/js/_layout.js","webpack:///./src/js/app.js","webpack:///external \"jQuery\""],"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","$","window","document","defaults","effect","theme","keyboardNav","clickOverlayToClose","onInit","beforeShowLightbox","afterShowLightbox","lightbox","beforeHideLightbox","afterHideLightbox","onPrev","element","onNext","errorMessage","MetaLightbox","options","this","extend","_defaults","_name","init","$this","$html","ajaxLoaded","hasClass","addClass","removeClass","on","e","preventDefault","stopPropagation","showLightbox","off","code","keyCode","which","destructLightbox","trigger","el","$el","content","currentLink","galleryItems","constructLightbox","find","processContent","data","length","hide","show","index","eq","last","first","setTimeout","link","img","video","src","classTerm","iframe","wrap","href","attr","html","isHidpi","match","$content","imgwrapper","append","css","height","resize","zoom","contentLoaded","setTitle","ga","class","frameborder","vspace","hspace","scrolling","substring","clone","outerHeight","position","top","ajax","sync","async","url","dataType","method","cache","statusCode","404","console","log","location","302","error","jqXHR","statusText","success","status","dataJson","parseJSON","title","getResponseHeader","indexOf","replace","localStorage","setItem","URL","history","pushState","page","imagesLoaded","then","text","titleWrap","overlay","nav","close","$overlay","$target","target","replaceState","empty","devicePixelRatio","matchMedia","matches","fn","each","metaLightbox","jQuery","NAME","JQUERY_NO_CONFLICT","Alert","rootElement","_getRootElement","_triggerCloseEvent","dispose","selector","Util","parent","closeEvent","_removeElement","transitionDuration","_destroyElement","_jQueryInterface","$element","config","_handleDismiss","event","alertInstance","Button","toggle","triggerChangeEvent","addAriaPressed","input","_element","querySelector","classList","contains","activeElement","hasAttribute","button","initialButton","inputBtn","test","buttons","slice","len","DATA_KEY","EVENT_KEY","Default","interval","keyboard","slide","pause","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_getConfig","navigator","Boolean","next","nextWhenVisible","prev","clearInterval","cycle","_config","setInterval","to","activeIndex","_getItemIndex","_items","direction","_handleSwipe","absDeltax","Math","_addEventListeners","_addTouchEventListeners","start","end","clearTimeout","querySelectorAll","move","_keydown","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","targetIndex","fromIndex","slideEvent","relatedTarget","from","_setActiveIndicatorElement","indicators","_indicatorsElement","nextIndicator","children","_slide","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","eventDirectionName","slidEvent","nextElementInterval","parseInt","defaultInterval","CLASS_NAME_ACTIVE","action","TypeError","_dataApiClickHandler","slideIndex","getAttribute","carousels","$carousel","Collapse","toggleList","elem","filterElement","foundElem","_isTransitioning","actives","_parent","activesData","startEvent","dimension","_triggerArray","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","$elem","setTransitioning","_getDimension","_getParent","_addAriaAndCollapsedClass","isOpen","triggerArray","_getTargetFromElement","$trigger","selectors","backdrop","focus","Modal","_isShown","showEvent","hideEvent","transition","handleUpdate","_triggerBackdropTransition","hideEventPrevented","modalTransitionDuration","_showElement","modalBody","_dialog","parentNode","nodeType","Node","shownEvent","transitionComplete","_enforceFocus","_setEscapeEvent","_setResizeEvent","_hideModal","_removeBackdrop","_showBackdrop","animate","callback","backdropTransitionDuration","callbackRemove","_adjustDialog","isModalOverflowing","scrollHeight","_isBodyOverflowing","_resetAdjustments","_checkScrollbar","rect","_setScrollbar","fixedContent","stickyContent","actualPadding","calculatedPadding","parseFloat","actualMargin","calculatedMargin","_resetScrollbar","padding","elements","margin","_getScrollbarWidth","scrollDiv","scrollbarWidth","tagName","BSCLS_PREFIX_REGEX","RegExp","Tooltip","placement","template","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Popover","isWithContent","getTitle","addAttachmentClass","CLASS_PREFIX","getTipElement","tip","setContent","$tip","CLASS_NAME_FADE","_getContent","_cleanTipClass","tabClass","offset","ScrollSpy","refresh","autoMethod","_scrollElement","offsetMethod","offsetBase","targets","targetSelector","targetBCR","a","b","item","id","_getScrollTop","_getScrollHeight","_getOffsetHeight","_process","scrollTop","maxScroll","_scrollHeight","_targets","_activeTarget","_offsets","_activate","queries","_selector","$link","SELECTOR_NAV_LINKS","_clear","node","scrollSpys","$spy","Tab","listElement","itemSelector","previous","complete","hiddenEvent","active","container","isTransitioning","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","uriAttrs","DefaultWhitelist","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","unsafeHtml","sanitizeFn","createdDocument","domParser","whitelistKeys","elName","attributeList","whitelistedAttributes","concat","whiteList","attrName","allowedAttributeList","regExp","attrRegex","allowedAttribute","DISALLOWED_ATTRIBUTES","animation","delay","fallbackPlacement","boundary","sanitize","popperConfig","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Popper","enable","disable","toggleEnabled","dataKey","constructor","context","Error","shadowRoot","isInTheDom","ownerDocument","tipId","attachment","_getAttachment","_getPopperConfig","prevHoverState","update","_popper","setElementContent","sanitizeHtml","modifiers","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","onUpdate","_getOffset","_getContainer","_setListeners","split","triggers","eventIn","eventOut","_fixTitle","titleType","_enter","_leave","_isWithActiveTrigger","_activeTrigger","dataAttributes","_getDelegateConfig","_handlePopperPlacementChange","popperData","_fixTransition","initConfigAnimation","called","TRANSITION_END","getUID","prefix","getSelectorFromElement","hrefAttr","err","getTransitionDurationFromElement","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","triggerTransitionEnd","supportsTransitionEnd","isElement","obj","typeCheckConfig","expectedTypes","configTypes","valueType","toString","componentName","findShadowRoot","root","jQueryDetection","version","bindType","delegateType","handle","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","round","abs","now","Date","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","Array","isArray","iterator","forEach","deprecate","message","deprecationMessage","stack","warn","apply","arguments","output","source","nextKey","dest","merge","keys","inherit","child","base","properties","childP","baseP","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","type","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","trim","inArray","findByKey","toArray","uniqueArray","sort","results","values","push","prefixed","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","doc","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","userAgent","PROPS_XY","PROPS_CLIENT_XY","Input","manager","self","inputTarget","domHandler","ev","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","filter","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","add","stop","force","stopped","curRecognizer","existing","remove","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","define","originalEmit","hammer","hammerify","factory","cX","cY","_cfg","sensitivity","INSTANCE_COUNT","track","pageX","pageY","hoverIntent","handlerIn","handlerOut","instanceId","cfg","isPlainObject","isFunction","out","over","handleHover","hoverIntentData","timeoutId","isActive","compare","timeoutDuration","longerTimeoutBrowsers","isBrowser","scheduled","functionToCheck","getType","getStyleComputedProperty","getParentNode","getScrollParent","overflow","overflowX","overflowY","getReferenceNode","reference","isIE11","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nodeName","getRoot","findCommonOffsetParent","element1","element2","order","range","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","subtract","scrollLeft","modifier","getBordersSize","styles","axis","sideA","sideB","getSize","body","computedStyle","getWindowSizes","getComputedStyle","getClientRect","offsets","result","sizes","width","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","getBoundaries","boundaries","left","boundariesNode","popper","isPaddingNumber","getArea","computeAutoPlacement","rects","refRect","bottom","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","getOppositePlacement","hash","right","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","runModifiers","ends","findIndex","cur","positionFixed","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","getWindow","setupEventListeners","passive","scrollElement","attachToScrollParents","scrollParents","isBody","enableEventListeners","disableEventListeners","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requesting","isRequired","requested","validPlacements","placements","clockwise","counter","BEHAVIORS","parseOffset","useHeight","basePlacement","fragments","map","frag","divider","splitRegex","ops","mergeWithPrevious","op","size","toValue","index2","shiftvariation","isVertical","shiftOffsets","transformProp","popperStyles","transform","floor","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flippedVariationByContent","flippedVariation","getOppositeVariation","subtractLength","bound","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","bothOddWidth","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","attributes","requestAnimationFrame","debounce","modifierOptions","eventsEnabled","Utils","PopperUtils","Defaults","S2","select2","amd","requirejs","require","undef","main","req","makeMap","defined","waiting","defining","hasOwn","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","j","part","baseParts","starMap","nodeIdCompat","charAt","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","pr","uri","deps","cjsModule","ret","usingExports","callbackType","load","alt","_defined","_$","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","unshift","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","params","_type","invoke","generateChars","chars","random","func","_convertData","originalKey","dataLevel","k","hasScroll","innerHeight","innerWidth","scrollWidth","escapeMarkup","markup","replaceMap","'","String","appendMany","$nodes","jquery","substr","$jqNodes","__cache","GetUniqueElementId","select2Id","setAttribute","StoreData","GetData","RemoveData","removeAttribute","Results","dataAdapter","render","$results","clear","displayMessage","hideLoading","$message","className","hideMessages","$options","$option","option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","current","selected","selectedIds","showLoading","loading","disabled","loadingMore","$loading","prepend","attrs","Element","msMatchesSelector","webkitMatchesSelector","_resultId","role","label","$children","$child","$childrenContainer","$container","removeAttr","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","mousewheel","isAtTop","isAtBottom","evt","originalEvent","display","innerHTML","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","UP","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","closest","isEnabled","isDisabled","SingleSelection","$rendered","selectionContainer","selection","formatted","MultipleSelection","$selections","Placeholder","decorated","placeholder","normalizePlaceholder","_","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","isDefaultPrevented","$previousChoice","searchRemoveChoice","msie","documentMode","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","path","translations","BaseAdapter","query","generateResultId","SelectAdapter","select","is","currentData","unselect","addOptions","textContent","innerText","normalizedData","_normalizeItem","matcher","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","replaceWith","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","transport","failure","$request","fail","_request","abort","request","_queryTimeout","Tags","tags","createTag","insertTag","tag","_removeOldTags","wrapper","checkChildren","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","documentElement","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","detach","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","parents","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","parentOffset","isConnected","outerWidth","minWidth","appendTo","MinimumResultsForSearch","minimumResultsForSearch","Infinity","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","ctrlKey","metaKey","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","resolvedLanguages","baseLanguage","languageData","ex","camelCase","convertedData","Options","fromElement","InputCompat","excludedData","dir","dataset","upperCaseLetter","letter","attributeName","dataName","dataValue","Select2","_generateId","tabindex","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","insertAfter","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","attachEvent","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","altKey","open","_isChangeMutation","addedNodes","removedNodes","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","newVal","detachEvent","disconnect","removeData","thisMethods","instanceOptions","instance","parentElement","bubbles","cancelable","detail","initCustomEvent","CustomEvent","cancelAnimationFrame","getTime","max","global","ignore","header","topOnEmptyHash","speed","clip","easing","customEasing","updateURL","popstate","emitEvents","decodeURIComponent","charCodeAt","InvalidCharacterError","offsetHeight","clientHeight","offsetTop","h","anchor","g","w","E","S","A","pageYOffset","C","O","min","I","F","L","cancelScroll","outline","scrollTo","smoothScroll","JSON","stringify","H","hostname","pathname","animateScroll","Function","webpackEmptyContext","resolve","webpackContext","webpackContextResolve","_gaLt","srcElement","host","search","hitCallback","hitBack","returnValue","Obj","google","maps","OverlayView","ui","setMap","divClass","align","isDebugMode","onClick","onMouseOver","isBoolean","isNotUndefined","hasContent","isString","getPanes","overlayMouseTarget","appendChild","addDomListener","$div","positionInPixels","getProjection","fromLatLngToDivPixel","LatLng","divWidth","divHeight","draw","CONSTS","ENVS","MAP_DRIVER","W","markers","getName","googleApiLoaded","$mapDiv","lat","lng","MarkerUI","Map","fullscreenControl","default_zoom","popup","geocoder","Geocoder","Events","MAPAPILOADED","crds","pos","marker","showPopup","MAPMARKERCLICK","$popup","getDiv","setCenter","setZoom","opacity","hidePopup","setPosition","restoreBounds","MAPPOPUPCLOSE","addr","geocode","address","latLng","latlng","bounds","features","geometry","coordinates","LatLngBounds","addMarker","icon","flyToMarker","fitBounds","getPosition","default_bounds","getZoom","restoreZoom","AJAX","TABHIDDEN","TABFOCUSED","OFFLINE","ONLINE","LOADED","SWIPELEFT","SWIPERIGHT","ALLERTAPPEARED","ALERTREMOVED","LODEDANDREADY","LAZYIMAGEREADY","LAZYIMAGESREADY","MAPLOADED","SCROLL","RESIZE","CAROUSEL_READY","SET_TARGET_UPDATE","RESTORE_FIELD","FORM_INIT_BASICS","FORM_INIT_STEPPED","FORM_INIT_VALIDATE","FORM_INIT_VALIDATE_FIELD","FORM_INIT_STORAGE","FORM_VALIDATION_FAILED","FORM_STEPPED_NEW_STEP","FORM_STEPPED_FIRST_STEP","FORM_STEPPED_LAST_STEP","FORM_FIELDS","HoverUI","$parent","$triger","IsTouchScreen","isShown","not","Constructor","noConflict","ready","jsHoverUI","currentTarget","CarouselUI","$indicators","carousel","$youtubeSlides","YT","Player","onReady","pauseVideo","SlidingMenu","click","jsSlidingMenu","CookieUI","D","cookie","reduce","days","expires","toUTCString","encodeURIComponent","COOKIE","FlyoutUI","$modal","$close","DEFAULTS","StickySidebar","topSpacing","bottomSpacing","containerSelector","innerWrapperSelector","stickyClass","resizeSensor","sidebar","sidebarInner","affixedType","support","transform3d","_initialized","_reStyle","_breakpoint","_resizeListeners","dimensions","translateY","lastTopSpacing","lastBottomSpacing","sidebarHeight","sidebarWidth","containerTop","containerHeight","viewportHeight","viewportTop","lastViewportTop","initialize","upper","eventName","offsetLeft","_setSupportFeatures","firstChild","containers","_widthBreakpoint","calcDimensions","stickyPosition","bindEvents","capture","ResizeSensor","handleEvent","updateSticky","dims","offsetRelative","containerBottom","offsetWidth","_calcDimensionsWithScroll","sidebarLeft","viewportBottom","viewportLeft","furthest","affixType","sidebarBottom","colliderTop","colliderBottom","isSidebarFitsViewport","inner","outer","translate","_getTranslate","getAffixType","_getStyle","affixEvent","eventTrigger","_unit","affixedEvent","_running","observeScrollDir","supportTransform","z","caption","minHeight","styleReset","$Body","CLASSNAME","SidebarUI","sticky","SpinnerUI","AjaxUI","G","$Html","Spinner","MainUI","updateLocation","absoluteLocation","URLDetails","js","regions","replaceRegion","preload","$head","items","itemCallback","Deferred","promise","dfds","dfd","always","when","$region","jsAjaxUI","Title","ClassName","onpopstate","$existingLink","FormFieldUI","shown","vals","$collapse","restore","wipe","checked","msg","$field","FormBasics","_el","$fields","$selectFields","$radioOptions","siblings","jsFormBasics","HeaderUI","$header","updateHeader","updateFooter","footerHeight","SmoothScroll","info","groupCollapsed","groupEnd","Consts","timeEnd","$AlertNotify","$SiteWideMessage","visibilityState","updateOnlineStatus","onLine","pingInterval","datastatus","relative","eventFired","setTouchScreen","bool","msMaxTouchPoints","loadImages","detectBootstrapScreenSize","getScript","fonts","WebFont","families","targetEl","$targetEl","print","envs","curEnv","shift","reverse","env","cls","fadeOut","alert","fadeIn","play","ALLERTREMOVED","$imgs","$imgUrls","$imgLazyUrls","lazySrc","VideoPreviewUI","$_el","video_id","parsedURL","YouTubeGetID","jsonp","thumbnail_src","thumbnail_large","jsVideoPreviewUI","LayoutUI","importAll"],"mappings":"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AU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,QAMdyO,EAAGzO,OAAO,oBAAoB,CAC5B,aACC,SAAUsO,GACX,SAAS0P,EAAa/rC,EAAUxI,GAC9Bu0C,EAAYpL,UAAUrtB,YAAY9e,KAAKiD,MAkCzC,OA/BA4kC,EAAMiE,OAAOyL,EAAa1P,EAAMoF,YAEhCsK,EAAY91C,UAAU8uC,QAAU,SAAUz7B,GACxC,MAAM,IAAIkK,MAAM,2DAGlBu4B,EAAY91C,UAAU+1C,MAAQ,SAAUrK,EAAQr4B,GAC9C,MAAM,IAAIkK,MAAM,yDAGlBu4B,EAAY91C,UAAUJ,KAAO,SAAUwZ,EAAW62B,KAIlD6F,EAAY91C,UAAU+qB,QAAU,aAIhC+qB,EAAY91C,UAAUg2C,iBAAmB,SAAU58B,EAAW9V,GAC5D,IAAImU,EAAK2B,EAAU3B,GAAK,WASxB,OAPAA,GAAM2uB,EAAMyF,cAAc,GAEX,MAAXvoC,EAAKmU,GACPA,GAAM,IAAMnU,EAAKmU,GAAG0J,WAEpB1J,GAAM,IAAM2uB,EAAMyF,cAAc,GAE3Bp0B,GAGFq+B,KAGTvP,EAAGzO,OAAO,sBAAsB,CAC9B,SACA,WACA,WACC,SAAUge,EAAa1P,EAAOhmC,GAC/B,SAAS61C,EAAelsC,EAAUxI,GAChCC,KAAKuI,SAAWA,EAChBvI,KAAKD,QAAUA,EAEf00C,EAAcvL,UAAUrtB,YAAY9e,KAAKiD,MAkR3C,OA/QA4kC,EAAMiE,OAAO4L,EAAeH,GAE5BG,EAAcj2C,UAAU8uC,QAAU,SAAUz7B,GAC1C,IAAI/P,EAAO,GACPwjB,EAAOtlB,KAEXA,KAAKuI,SAAS3G,KAAK,aAAayF,MAAK,WACnC,IAAIylC,EAAUluC,EAAEoB,MAEZ+sC,EAASznB,EAAKtP,KAAK82B,GAEvBhrC,EAAKsiB,KAAK2oB,MAGZl7B,EAAS/P,IAGX2yC,EAAcj2C,UAAUk2C,OAAS,SAAU5yC,GACzC,IAAIwjB,EAAOtlB,KAKX,GAHA8B,EAAKyrC,UAAW,EAGZ3uC,EAAEkD,EAAKnC,SAASg1C,GAAG,UAKrB,OAJA7yC,EAAKnC,QAAQ4tC,UAAW,OAExBvtC,KAAKuI,SAASlH,QAAQ,SAASA,QAAQ,UAKzC,GAAIrB,KAAKuI,SAAS+b,KAAK,YACrBtkB,KAAKstC,SAAQ,SAAUsH,GACrB,IAAIhyB,EAAM,IAEV9gB,EAAO,CAACA,IACHsiB,KAAKxC,MAAM9f,EAAM8yC,GAEtB,IAAK,IAAI13C,EAAI,EAAGA,EAAI4E,EAAKC,OAAQ7E,IAAK,CACpC,IAAI+Y,EAAKnU,EAAK5E,GAAG+Y,IAEW,IAAxBrX,EAAEilB,QAAQ5N,EAAI2M,IAChBA,EAAIwB,KAAKnO,GAIbqP,EAAK/c,SAASqa,IAAIA,GAClB0C,EAAK/c,SAASlH,QAAQ,SAASA,QAAQ,iBAEpC,CACL,IAAIuhB,EAAM9gB,EAAKmU,GAEfjW,KAAKuI,SAASqa,IAAIA,GAClB5iB,KAAKuI,SAASlH,QAAQ,SAASA,QAAQ,YAI3CozC,EAAcj2C,UAAUq2C,SAAW,SAAU/yC,GAC3C,IAAIwjB,EAAOtlB,KAEX,GAAKA,KAAKuI,SAAS+b,KAAK,YAAxB,CAMA,GAFAxiB,EAAKyrC,UAAW,EAEZ3uC,EAAEkD,EAAKnC,SAASg1C,GAAG,UAKrB,OAJA7yC,EAAKnC,QAAQ4tC,UAAW,OAExBvtC,KAAKuI,SAASlH,QAAQ,SAASA,QAAQ,UAKzCrB,KAAKstC,SAAQ,SAAUsH,GAGrB,IAFA,IAAIhyB,EAAM,GAED1lB,EAAI,EAAGA,EAAI03C,EAAY7yC,OAAQ7E,IAAK,CAC3C,IAAI+Y,EAAK2+B,EAAY13C,GAAG+Y,GAEpBA,IAAOnU,EAAKmU,KAA8B,IAAxBrX,EAAEilB,QAAQ5N,EAAI2M,IAClCA,EAAIwB,KAAKnO,GAIbqP,EAAK/c,SAASqa,IAAIA,GAElB0C,EAAK/c,SAASlH,QAAQ,SAASA,QAAQ,eAI3CozC,EAAcj2C,UAAUJ,KAAO,SAAUwZ,EAAW62B,GAClD,IAAInpB,EAAOtlB,KAEXA,KAAK4X,UAAYA,EAEjBA,EAAUjX,GAAG,UAAU,SAAUupC,GAC/B5kB,EAAKovB,OAAOxK,EAAOpoC,SAGrB8V,EAAUjX,GAAG,YAAY,SAAUupC,GACjC5kB,EAAKuvB,SAAS3K,EAAOpoC,UAIzB2yC,EAAcj2C,UAAU+qB,QAAU,WAEhCvpB,KAAKuI,SAAS3G,KAAK,KAAKyF,MAAK,WAE3Bu9B,EAAMqH,WAAWjsC,UAIrBy0C,EAAcj2C,UAAU+1C,MAAQ,SAAUrK,EAAQr4B,GAChD,IAAI/P,EAAO,GACPwjB,EAAOtlB,KAEIA,KAAKuI,SAAS6E,WAEpB/F,MAAK,WACZ,IAAIylC,EAAUluC,EAAEoB,MAEhB,GAAK8sC,EAAQ6H,GAAG,WAAc7H,EAAQ6H,GAAG,YAAzC,CAIA,IAAI5H,EAASznB,EAAKtP,KAAK82B,GAEnB3lC,EAAUme,EAAKne,QAAQ+iC,EAAQ6C,GAEnB,OAAZ5lC,GACFrF,EAAKsiB,KAAKjd,OAId0K,EAAS,CACPqS,QAASpiB,KAIb2yC,EAAcj2C,UAAUs2C,WAAa,SAAUjI,GAC7CjI,EAAM0G,WAAWtrC,KAAKuI,SAAUskC,IAGlC4H,EAAcj2C,UAAUuuC,OAAS,SAAUjrC,GACzC,IAAIirC,EAEAjrC,EAAKsL,UACP2/B,EAASjuC,SAAS2hB,cAAc,aACzB4tB,MAAQvsC,EAAKyE,UAIO8Z,KAF3B0sB,EAASjuC,SAAS2hB,cAAc,WAErBs0B,YACThI,EAAOgI,YAAcjzC,EAAKyE,KAE1BwmC,EAAOiI,UAAYlzC,EAAKyE,UAIZ8Z,IAAZve,EAAKmU,KACP82B,EAAOlvC,MAAQiE,EAAKmU,IAGlBnU,EAAK6rC,WACPZ,EAAOY,UAAW,GAGhB7rC,EAAKyrC,WACPR,EAAOQ,UAAW,GAGhBzrC,EAAK6D,QACPonC,EAAOpnC,MAAQ7D,EAAK6D,OAGtB,IAAImnC,EAAUluC,EAAEmuC,GAEZkI,EAAiBj1C,KAAKk1C,eAAepzC,GAMzC,OALAmzC,EAAet1C,QAAUotC,EAGzBnI,EAAMmH,UAAUgB,EAAQ,OAAQkI,GAEzBnI,GAGT2H,EAAcj2C,UAAUwX,KAAO,SAAU82B,GACvC,IAAIhrC,EAAO,GAIX,GAAY,OAFZA,EAAO8iC,EAAMoH,QAAQc,EAAQ,GAAI,SAG/B,OAAOhrC,EAGT,GAAIgrC,EAAQ6H,GAAG,UACb7yC,EAAO,CACLmU,GAAI62B,EAAQlqB,MACZrc,KAAMumC,EAAQvmC,OACdonC,SAAUb,EAAQxoB,KAAK,YACvBipB,SAAUT,EAAQxoB,KAAK,YACvB3e,MAAOmnC,EAAQxoB,KAAK,eAEjB,GAAIwoB,EAAQ6H,GAAG,YAAa,CACjC7yC,EAAO,CACLyE,KAAMumC,EAAQxoB,KAAK,SACnBlX,SAAU,GACVzH,MAAOmnC,EAAQxoB,KAAK,UAMtB,IAHA,IAAIgqB,EAAYxB,EAAQ1/B,SAAS,UAC7BA,EAAW,GAENnQ,EAAI,EAAGA,EAAIqxC,EAAUvsC,OAAQ9E,IAAK,CACzC,IAAIsxC,EAAS3vC,EAAE0vC,EAAUrxC,IAErBolB,EAAQriB,KAAKgW,KAAKu4B,GAEtBnhC,EAASgX,KAAK/B,GAGhBvgB,EAAKsL,SAAWA,EAQlB,OALAtL,EAAO9B,KAAKk1C,eAAepzC,IACtBnC,QAAUmtC,EAAQ,GAEvBlI,EAAMmH,UAAUe,EAAQ,GAAI,OAAQhrC,GAE7BA,GAGT2yC,EAAcj2C,UAAU02C,eAAiB,SAAUl/B,GA6BjD,OA5BIA,IAAS1Y,OAAO0Y,KAClBA,EAAO,CACLC,GAAID,EACJzP,KAAMyP,IAaK,OATfA,EAAOpX,EAAEqB,OAAO,GAAI,CAClBsG,KAAM,IACLyP,IAOMC,KACPD,EAAKC,GAAKD,EAAKC,GAAG0J,YAGH,MAAb3J,EAAKzP,OACPyP,EAAKzP,KAAOyP,EAAKzP,KAAKoZ,YAGF,MAAlB3J,EAAKm4B,WAAqBn4B,EAAKC,IAAwB,MAAlBjW,KAAK4X,YAC5C5B,EAAKm4B,UAAYnuC,KAAKw0C,iBAAiBx0C,KAAK4X,UAAW5B,IAGlDpX,EAAEqB,OAAO,GAjBD,CACbstC,UAAU,EACVI,UAAU,GAekB33B,IAGhCy+B,EAAcj2C,UAAU2I,QAAU,SAAU+iC,EAAQpoC,GAGlD,OAFc9B,KAAKD,QAAQtC,IAAI,UAExB03C,CAAQjL,EAAQpoC,IAGlB2yC,KAGT1P,EAAGzO,OAAO,qBAAqB,CAC7B,WACA,WACA,WACC,SAAUme,EAAe7P,EAAOhmC,GACjC,SAASw2C,EAAc7sC,EAAUxI,GAC/BC,KAAKq1C,eAAiBt1C,EAAQtC,IAAI,SAAW,GAE7C23C,EAAalM,UAAUrtB,YAAY9e,KAAKiD,KAAMuI,EAAUxI,GAyE1D,OAtEA6kC,EAAMiE,OAAOuM,EAAcX,GAE3BW,EAAa52C,UAAUJ,KAAO,SAAUwZ,EAAW62B,GACjD2G,EAAalM,UAAU9qC,KAAKrB,KAAKiD,KAAM4X,EAAW62B,GAElDzuC,KAAK80C,WAAW90C,KAAKs1C,iBAAiBt1C,KAAKq1C,kBAG7CD,EAAa52C,UAAUk2C,OAAS,SAAU5yC,GACxC,IAAIgrC,EAAU9sC,KAAKuI,SAAS3G,KAAK,UAAUgrB,QAAO,SAAUhwB,EAAG24C,GAC7D,OAAOA,EAAI13C,OAASiE,EAAKmU,GAAG0J,cAGP,IAAnBmtB,EAAQ/qC,SACV+qC,EAAU9sC,KAAK+sC,OAAOjrC,GAEtB9B,KAAK80C,WAAWhI,IAGlBsI,EAAalM,UAAUwL,OAAO33C,KAAKiD,KAAM8B,IAG3CszC,EAAa52C,UAAU82C,iBAAmB,SAAUxzC,GAClD,IAAIwjB,EAAOtlB,KAEPw1C,EAAYx1C,KAAKuI,SAAS3G,KAAK,UAC/B6zC,EAAcD,EAAUxU,KAAI,WAC9B,OAAO1b,EAAKtP,KAAKpX,EAAEoB,OAAOiW,MACzBxY,MAECovC,EAAW,GAGf,SAAS6I,EAAU1/B,GACjB,OAAO,WACL,OAAOpX,EAAEoB,MAAM4iB,OAAS5M,EAAKC,IAIjC,IAAK,IAAI/Y,EAAI,EAAGA,EAAI4E,EAAKC,OAAQ7E,IAAK,CACpC,IAAI8Y,EAAOhW,KAAKk1C,eAAepzC,EAAK5E,IAGpC,GAAI0B,EAAEilB,QAAQ7N,EAAKC,GAAIw/B,IAAgB,EAAvC,CACE,IAAIE,EAAkBH,EAAU5oB,OAAO8oB,EAAS1/B,IAE5C4/B,EAAe51C,KAAKgW,KAAK2/B,GACzBE,EAAUj3C,EAAEqB,QAAO,EAAM,GAAI+V,EAAM4/B,GAEnCE,EAAa91C,KAAK+sC,OAAO8I,GAE7BF,EAAgBI,YAAYD,OAR9B,CAaA,IAAIhJ,EAAU9sC,KAAK+sC,OAAO/2B,GAE1B,GAAIA,EAAK5I,SAAU,CACjB,IAAIkhC,EAAYtuC,KAAKs1C,iBAAiBt/B,EAAK5I,UAE3Cw3B,EAAM0G,WAAWwB,EAASwB,GAG5BzB,EAASzoB,KAAK0oB,IAGhB,OAAOD,GAGFuI,KAGTrQ,EAAGzO,OAAO,oBAAoB,CAC5B,UACA,WACA,WACC,SAAU8e,EAAcxQ,EAAOhmC,GAChC,SAASo3C,EAAaztC,EAAUxI,GAC9BC,KAAKi2C,YAAcj2C,KAAKk2C,eAAen2C,EAAQtC,IAAI,SAEZ,MAAnCuC,KAAKi2C,YAAYE,iBACnBn2C,KAAKm2C,eAAiBn2C,KAAKi2C,YAAYE,gBAGzCH,EAAY9M,UAAUrtB,YAAY9e,KAAKiD,KAAMuI,EAAUxI,GAgGzD,OA7FA6kC,EAAMiE,OAAOmN,EAAaZ,GAE1BY,EAAYx3C,UAAU03C,eAAiB,SAAUn2C,GAC/C,IAAIhB,EAAW,CACb+C,KAAM,SAAUooC,GACd,OAAOtrC,EAAEqB,OAAO,GAAIiqC,EAAQ,CAC1BkM,EAAGlM,EAAOyJ,QAGd0C,UAAW,SAAUnM,EAAQ3kC,EAAS+wC,GACpC,IAAIC,EAAW33C,EAAE2F,KAAK2lC,GAKtB,OAHAqM,EAASjwC,KAAKf,GACdgxC,EAASC,KAAKF,GAEPC,IAIX,OAAO33C,EAAEqB,OAAO,GAAIlB,EAAUgB,GAAS,IAGzCi2C,EAAYx3C,UAAU23C,eAAiB,SAAUjyB,GAC/C,OAAOA,GAGT8xB,EAAYx3C,UAAU+1C,MAAQ,SAAUrK,EAAQr4B,GAC9C,IACIyT,EAAOtlB,KAEU,MAAjBA,KAAKy2C,WAEH73C,EAAE64B,WAAWz3B,KAAKy2C,SAASC,QAC7B12C,KAAKy2C,SAASC,QAGhB12C,KAAKy2C,SAAW,MAGlB,IAAI12C,EAAUnB,EAAEqB,OAAO,CACrBojB,KAAM,OACLrjB,KAAKi2C,aAUR,SAASU,IACP,IAAIJ,EAAWx2C,EAAQs2C,UAAUt2C,GAAS,SAAU+B,GAClD,IAAIoiB,EAAUoB,EAAK6wB,eAAer0C,EAAMooC,GAEpC5kB,EAAKvlB,QAAQtC,IAAI,UAAYoB,OAAOmG,SAAWA,QAAQI,QAEpD8e,GAAYA,EAAQA,SAAYtlB,EAAEwiB,QAAQ8C,EAAQA,UACrDlf,QAAQI,MACN,4FAMNyM,EAASqS,MACR,cAGG,WAAYqyB,IACS,IAApBA,EAAS/wC,QAAoC,MAApB+wC,EAAS/wC,SAIvC8f,EAAKjkB,QAAQ,kBAAmB,CAC9BmgB,QAAS,oBAIb8D,EAAKmxB,SAAWF,EApCS,oBAAhBx2C,EAAQ2E,MACjB3E,EAAQ2E,IAAM3E,EAAQ2E,IAAI3H,KAAKiD,KAAKuI,SAAU2hC,IAGpB,oBAAjBnqC,EAAQ+B,OACjB/B,EAAQ+B,KAAO/B,EAAQ+B,KAAK/E,KAAKiD,KAAKuI,SAAU2hC,IAkC9ClqC,KAAKi2C,YAAYp7B,OAAwB,MAAfqvB,EAAOyJ,MAC/B3zC,KAAK42C,eACP/3C,OAAOoN,aAAajM,KAAK42C,eAG3B52C,KAAK42C,cAAgB/3C,OAAOyD,WAAWq0C,EAAS32C,KAAKi2C,YAAYp7B,QAEjE87B,KAIGX,KAGTjR,EAAGzO,OAAO,oBAAoB,CAC5B,WACC,SAAU13B,GACX,SAASi4C,EAAM/E,EAAWvpC,EAAUxI,GAClC,IAAI+2C,EAAO/2C,EAAQtC,IAAI,QAEnBs5C,EAAYh3C,EAAQtC,IAAI,kBAEV4iB,IAAd02B,IACF/2C,KAAK+2C,UAAYA,GAGnB,IAAIC,EAAYj3C,EAAQtC,IAAI,aAQ5B,QANkB4iB,IAAd22B,IACAh3C,KAAKg3C,UAAYA,GAGrBlF,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,GAE3BnB,EAAEwiB,QAAQ01B,GACZ,IAAK,IAAIh5C,EAAI,EAAGA,EAAIg5C,EAAK/0C,OAAQjE,IAAK,CACpC,IAAIm5C,EAAMH,EAAKh5C,GACXkY,EAAOhW,KAAKk1C,eAAe+B,GAE3BnK,EAAU9sC,KAAK+sC,OAAO/2B,GAE1BhW,KAAKuI,SAASlF,OAAOypC,IAiG3B,OA5FA+J,EAAKr4C,UAAU+1C,MAAQ,SAAUzC,EAAW5H,EAAQr4B,GAClD,IAAIyT,EAAOtlB,KAEXA,KAAKk3C,iBAEc,MAAfhN,EAAOyJ,MAA+B,MAAfzJ,EAAO9jC,KAuDlC0rC,EAAU/0C,KAAKiD,KAAMkqC,GAlDrB,SAASiN,EAAS73B,EAAK+C,GAGrB,IAFA,IAAIvgB,EAAOwd,EAAI4E,QAENtnB,EAAI,EAAGA,EAAIkF,EAAKC,OAAQnF,IAAK,CACpC,IAAImwC,EAASjrC,EAAKlF,GAEdw6C,EACiB,MAAnBrK,EAAO3/B,WACN+pC,EAAQ,CACPjzB,QAAS6oB,EAAO3/B,WACf,GAQL,IALkB2/B,EAAOxmC,MAAQ,IAAIie,iBACnB0lB,EAAOyJ,MAAQ,IAAInvB,eAIpB4yB,EACf,OAAI/0B,IAIJ/C,EAAIxd,KAAOA,OACX+P,EAASyN,IAMb,GAAI+C,EACF,OAAO,EAGT,IAAI40B,EAAM3xB,EAAKyxB,UAAU7M,GAEzB,GAAW,MAAP+M,EAAa,CACf,IAAInK,EAAUxnB,EAAKynB,OAAOkK,GAC1BnK,EAAQ/pC,KAAK,oBAAoB,GAEjCuiB,EAAKwvB,WAAW,CAAChI,IAEjBxnB,EAAK0xB,UAAUl1C,EAAMm1C,GAGvB33B,EAAI4E,QAAUpiB,EAEd+P,EAASyN,MAnDTwyB,EAAU/0C,KAAKiD,KAAMkqC,EAAQr4B,IAyDjCglC,EAAKr4C,UAAUu4C,UAAY,SAAUjF,EAAW5H,GAC9C,IAAIyJ,EAAO/0C,EAAEglB,KAAKsmB,EAAOyJ,MAEzB,MAAa,KAATA,EACK,KAGF,CACL19B,GAAI09B,EACJptC,KAAMotC,IAIVkD,EAAKr4C,UAAUw4C,UAAY,SAAU/E,EAAGnwC,EAAMm1C,GAC5Cn1C,EAAK0nC,QAAQyN,IAGfJ,EAAKr4C,UAAU04C,eAAiB,SAAUjF,GACzBjyC,KAAKuI,SAAS3G,KAAK,4BAEzByF,MAAK,WACRrH,KAAKutC,UAIT3uC,EAAEoB,MAAMw0B,aAILqiB,KAGT9R,EAAGzO,OAAO,yBAAyB,CACjC,WACC,SAAU13B,GACX,SAASy4C,EAAWvF,EAAWvpC,EAAUxI,GACvC,IAAIu3C,EAAYv3C,EAAQtC,IAAI,kBAEV4iB,IAAdi3B,IACFt3C,KAAKs3C,UAAYA,GAGnBxF,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,GAwGjC,OArGAs3C,EAAU74C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GACzDqD,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhCzuC,KAAK8yC,QAAWl7B,EAAU2/B,SAASzE,SAAWl7B,EAAU65B,UAAUqB,SAChErE,EAAW7sC,KAAK,2BAGpBy1C,EAAU74C,UAAU+1C,MAAQ,SAAUzC,EAAW5H,EAAQr4B,GACvD,IAAIyT,EAAOtlB,KA+BXkqC,EAAOyJ,KAAOzJ,EAAOyJ,MAAQ,GAE7B,IAAI6D,EAAYx3C,KAAKs3C,UAAUpN,EAAQlqC,KAAKD,SA/B5C,SAA0B+B,GAExB,IAAIkU,EAAOsP,EAAK4vB,eAAepzC,GAS/B,IALuBwjB,EAAK/c,SAAS3G,KAAK,UAAUgrB,QAAO,WACzD,OAAOhuB,EAAEoB,MAAM4iB,QAAU5M,EAAKC,MAIVlU,OAAQ,CAC5B,IAAI+qC,EAAUxnB,EAAKynB,OAAO/2B,GAC1B82B,EAAQ/pC,KAAK,oBAAoB,GAEjCuiB,EAAK4xB,iBACL5xB,EAAKwvB,WAAW,CAAChI,KAOrB,SAAiBhrC,GACfwjB,EAAKjkB,QAAQ,SAAU,CACrBS,KAAMA,IALR4yC,CAAO1+B,MAaLwhC,EAAU7D,OAASzJ,EAAOyJ,OAExB3zC,KAAK8yC,QAAQ/wC,SACf/B,KAAK8yC,QAAQlwB,IAAI40B,EAAU7D,MAC3B3zC,KAAK8yC,QAAQzxC,QAAQ,UAGvB6oC,EAAOyJ,KAAO6D,EAAU7D,MAG1B7B,EAAU/0C,KAAKiD,KAAMkqC,EAAQr4B,IAG/BwlC,EAAU74C,UAAU84C,UAAY,SAAUrF,EAAG/H,EAAQnqC,EAAS8R,GAY5D,IAXA,IAAI4lC,EAAa13C,EAAQtC,IAAI,oBAAsB,GAC/Ck2C,EAAOzJ,EAAOyJ,KACd/2C,EAAI,EAEJm6C,EAAY/2C,KAAK+2C,WAAa,SAAU7M,GAC1C,MAAO,CACLj0B,GAAIi0B,EAAOyJ,KACXptC,KAAM2jC,EAAOyJ,OAIV/2C,EAAI+2C,EAAK5xC,QAAQ,CACtB,IAAI21C,EAAW/D,EAAK/2C,GAEpB,IAAyC,IAArCgC,EAAEilB,QAAQ6zB,EAAUD,GAAxB,CAMA,IAAI/Q,EAAOiN,EAAKlI,OAAO,EAAG7uC,GAKtBkF,EAAOi1C,EAJMn4C,EAAEqB,OAAO,GAAIiqC,EAAQ,CACpCyJ,KAAMjN,KAKI,MAAR5kC,GAKJ+P,EAAS/P,GAGT6xC,EAAOA,EAAKlI,OAAO7uC,EAAI,IAAM,GAC7BA,EAAI,GARFA,SAbAA,IAwBJ,MAAO,CACL+2C,KAAMA,IAIH0D,KAGTtS,EAAGzO,OAAO,kCAAkC,IAEzC,WACD,SAASqhB,EAAoB7F,EAAW8F,EAAI73C,GAC1CC,KAAK63C,mBAAqB93C,EAAQtC,IAAI,sBAEtCq0C,EAAU/0C,KAAKiD,KAAM43C,EAAI73C,GAsB3B,OAnBA43C,EAAmBn5C,UAAU+1C,MAAQ,SAAUzC,EAAW5H,EAAQr4B,GAChEq4B,EAAOyJ,KAAOzJ,EAAOyJ,MAAQ,GAEzBzJ,EAAOyJ,KAAK5xC,OAAS/B,KAAK63C,mBAC5B73C,KAAKqB,QAAQ,kBAAmB,CAC9BmgB,QAAS,gBACTqB,KAAM,CACJi1B,QAAS93C,KAAK63C,mBACd7uC,MAAOkhC,EAAOyJ,KACdzJ,OAAQA,KAOd4H,EAAU/0C,KAAKiD,KAAMkqC,EAAQr4B,IAGxB8lC,KAGT5S,EAAGzO,OAAO,kCAAkC,IAEzC,WACD,SAASyhB,EAAoBjG,EAAW8F,EAAI73C,GAC1CC,KAAKg4C,mBAAqBj4C,EAAQtC,IAAI,sBAEtCq0C,EAAU/0C,KAAKiD,KAAM43C,EAAI73C,GAuB3B,OApBAg4C,EAAmBv5C,UAAU+1C,MAAQ,SAAUzC,EAAW5H,EAAQr4B,GAChEq4B,EAAOyJ,KAAOzJ,EAAOyJ,MAAQ,GAEzB3zC,KAAKg4C,mBAAqB,GAC1B9N,EAAOyJ,KAAK5xC,OAAS/B,KAAKg4C,mBAC5Bh4C,KAAKqB,QAAQ,kBAAmB,CAC9BmgB,QAAS,eACTqB,KAAM,CACJo1B,QAASj4C,KAAKg4C,mBACdhvC,MAAOkhC,EAAOyJ,KACdzJ,OAAQA,KAOd4H,EAAU/0C,KAAKiD,KAAMkqC,EAAQr4B,IAGxBkmC,KAGThT,EAAGzO,OAAO,sCAAsC,IAE7C,WACD,SAAS4hB,EAAwBpG,EAAW8F,EAAI73C,GAC9CC,KAAKm4C,uBAAyBp4C,EAAQtC,IAAI,0BAE1Cq0C,EAAU/0C,KAAKiD,KAAM43C,EAAI73C,GA8C3B,OA3CAm4C,EAAuB15C,UAAUJ,KAC/B,SAAU0zC,EAAWl6B,EAAW62B,GAC9B,IAAInpB,EAAOtlB,KAEX8xC,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhC72B,EAAUjX,GAAG,UAAU,WACrB2kB,EAAK8yB,8BAIXF,EAAuB15C,UAAU+1C,MAC/B,SAAUzC,EAAW5H,EAAQr4B,GAC3B,IAAIyT,EAAOtlB,KAEXA,KAAKo4C,yBAAwB,WAC3BtG,EAAU/0C,KAAKuoB,EAAM4kB,EAAQr4B,OAInCqmC,EAAuB15C,UAAU45C,wBAC/B,SAAUnG,EAAGoG,GACX,IAAI/yB,EAAOtlB,KAEXA,KAAKstC,SAAQ,SAAUsH,GACrB,IAAI3jB,EAAuB,MAAf2jB,EAAsBA,EAAY7yC,OAAS,EACnDujB,EAAK6yB,uBAAyB,GAChClnB,GAAS3L,EAAK6yB,uBACd7yB,EAAKjkB,QAAQ,kBAAmB,CAC9BmgB,QAAS,kBACTqB,KAAM,CACJo1B,QAAS3yB,EAAK6yB,0BAMhBE,GACFA,QAKDH,KAGTnT,EAAGzO,OAAO,mBAAmB,CAC3B,SACA,YACC,SAAU13B,EAAGgmC,GACd,SAAS0T,EAAU/vC,EAAUxI,GAC3BC,KAAKuI,SAAWA,EAChBvI,KAAKD,QAAUA,EAEfu4C,EAASpP,UAAUrtB,YAAY9e,KAAKiD,MAgCtC,OA7BA4kC,EAAMiE,OAAOyP,EAAU1T,EAAMoF,YAE7BsO,EAAS95C,UAAU6tC,OAAS,WAC1B,IAAIW,EAAYpuC,EACd,+EASF,OAJAouC,EAAUjqC,KAAK,MAAO/C,KAAKD,QAAQtC,IAAI,QAEvCuC,KAAKgtC,UAAYA,EAEVA,GAGTsL,EAAS95C,UAAUJ,KAAO,aAI1Bk6C,EAAS95C,UAAU6F,SAAW,SAAU2oC,EAAWyB,KAInD6J,EAAS95C,UAAU+qB,QAAU,WAE3BvpB,KAAKgtC,UAAUxY,UAGV8jB,KAGTvT,EAAGzO,OAAO,0BAA0B,CAClC,SACA,aACC,SAAU13B,EAAGgmC,GACd,SAASiO,KA6GT,OA3GAA,EAAOr0C,UAAU6tC,OAAS,SAAUyF,GAClC,IAAIP,EAAYO,EAAU/0C,KAAKiD,MAE3B8yC,EAAUl0C,EACZ,4PAYF,OALAoB,KAAK+yC,iBAAmBD,EACxB9yC,KAAK8yC,QAAUA,EAAQlxC,KAAK,SAE5B2vC,EAAUzD,QAAQgF,GAEXvB,GAGTsB,EAAOr0C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GACtD,IAAInpB,EAAOtlB,KAEP8wC,EAAYl5B,EAAU3B,GAAK,WAE/B67B,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhCzuC,KAAK8yC,QAAQnyC,GAAG,WAAW,SAAU4uC,GACnCjqB,EAAKjkB,QAAQ,WAAYkuC,GAEzBjqB,EAAK2tB,gBAAkB1D,EAAI2D,wBAM7BlzC,KAAK8yC,QAAQnyC,GAAG,SAAS,SAAU4uC,GAEjC3wC,EAAEoB,MAAMgB,IAAI,YAGdhB,KAAK8yC,QAAQnyC,GAAG,eAAe,SAAU4uC,GACvCjqB,EAAKkuB,aAAajE,MAGpB33B,EAAUjX,GAAG,QAAQ,WACnB2kB,EAAKwtB,QAAQ/vC,KAAK,WAAY,GAC9BuiB,EAAKwtB,QAAQ/vC,KAAK,gBAAiB+tC,GAEnCxrB,EAAKwtB,QAAQzxC,QAAQ,SAErBxC,OAAOyD,YAAW,WAChBgjB,EAAKwtB,QAAQzxC,QAAQ,WACpB,MAGLuW,EAAUjX,GAAG,SAAS,WACpB2kB,EAAKwtB,QAAQ/vC,KAAK,YAAa,GAC/BuiB,EAAKwtB,QAAQpE,WAAW,iBACxBppB,EAAKwtB,QAAQpE,WAAW,yBAExBppB,EAAKwtB,QAAQlwB,IAAI,IACjB0C,EAAKwtB,QAAQzxC,QAAQ,WAGvBuW,EAAUjX,GAAG,SAAS,WACfiX,EAAU9H,UACbwV,EAAKwtB,QAAQzxC,QAAQ,YAIzBuW,EAAUjX,GAAG,eAAe,SAAUupC,GACX,MAArBA,EAAOqK,MAAMZ,MAAsC,KAAtBzJ,EAAOqK,MAAMZ,OAC3BruB,EAAKizB,WAAWrO,GAG/B5kB,EAAKytB,iBAAiBryC,YAAY,wBAElC4kB,EAAKytB,iBAAiBtyC,SAAS,4BAKrCmX,EAAUjX,GAAG,iBAAiB,SAAUupC,GAClCA,EAAOpoC,KAAKqsC,UACd7oB,EAAKwtB,QAAQ/vC,KAAK,wBAAyBmnC,EAAOpoC,KAAKqsC,WAEvD7oB,EAAKwtB,QAAQpE,WAAW,6BAK9BmE,EAAOr0C,UAAUg1C,aAAe,SAAUjE,GACxC,IAAKvvC,KAAKizC,gBAAiB,CACzB,IAAIjqC,EAAQhJ,KAAK8yC,QAAQlwB,MAEzB5iB,KAAKqB,QAAQ,QAAS,CACpBsyC,KAAM3qC,IAIVhJ,KAAKizC,iBAAkB,GAGzBJ,EAAOr0C,UAAU+5C,WAAa,SAAUtG,EAAG/H,GACzC,OAAO,GAGF2I,KAGT9N,EAAGzO,OAAO,mCAAmC,IAE1C,WACD,SAASkiB,EAAiB1G,EAAWvpC,EAAUxI,EAASqsC,GACtDpsC,KAAK+xC,YAAc/xC,KAAKgyC,qBAAqBjyC,EAAQtC,IAAI,gBAEzDq0C,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,EAASqsC,GAkC1C,OA/BAoM,EAAgBh6C,UAAU6E,OAAS,SAAUyuC,EAAWhwC,GACtDA,EAAKoiB,QAAUlkB,KAAKy4C,kBAAkB32C,EAAKoiB,SAE3C4tB,EAAU/0C,KAAKiD,KAAM8B,IAGvB02C,EAAgBh6C,UAAUwzC,qBAAuB,SAAUC,EAAGF,GAQ5D,MAP2B,kBAAhBA,IACTA,EAAc,CACZ97B,GAAI,GACJ1P,KAAMwrC,IAIHA,GAGTyG,EAAgBh6C,UAAUi6C,kBAAoB,SAAUxG,EAAGnwC,GAGzD,IAFA,IAAI42C,EAAe52C,EAAK8H,MAAM,GAErB1M,EAAI4E,EAAKC,OAAS,EAAG7E,GAAK,EAAGA,IAAK,CACzC,IAAI8Y,EAAOlU,EAAK5E,GAEZ8C,KAAK+xC,YAAY97B,KAAOD,EAAKC,IAC/ByiC,EAAantB,OAAOruB,EAAG,GAI3B,OAAOw7C,GAGFF,KAGTzT,EAAGzO,OAAO,kCAAkC,CAC1C,WACC,SAAU13B,GACX,SAAS+5C,EAAgB7G,EAAWvpC,EAAUxI,EAASqsC,GACrDpsC,KAAK44C,WAAa,GAElB9G,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,EAASqsC,GAExCpsC,KAAK64C,aAAe74C,KAAK84C,oBACzB94C,KAAK0tC,SAAU,EAiFjB,OA9EAiL,EAAen6C,UAAU6E,OAAS,SAAUyuC,EAAWhwC,GACrD9B,KAAK64C,aAAarkB,SAClBx0B,KAAK0tC,SAAU,EAEfoE,EAAU/0C,KAAKiD,KAAM8B,GAEjB9B,KAAK+4C,gBAAgBj3C,KACvB9B,KAAKssC,SAASjpC,OAAOrD,KAAK64C,cAC1B74C,KAAKg5C,qBAITL,EAAen6C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GAC9D,IAAInpB,EAAOtlB,KAEX8xC,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhC72B,EAAUjX,GAAG,SAAS,SAAUupC,GAC9B5kB,EAAKszB,WAAa1O,EAClB5kB,EAAKooB,SAAU,KAGjB91B,EAAUjX,GAAG,gBAAgB,SAAUupC,GACrC5kB,EAAKszB,WAAa1O,EAClB5kB,EAAKooB,SAAU,KAGjB1tC,KAAKssC,SAAS3rC,GAAG,SAAUX,KAAKg5C,iBAAiB56C,KAAK4B,QAGxD24C,EAAen6C,UAAUw6C,iBAAmB,WAC1C,IAAIC,EAAoBr6C,EAAEwK,SACxBtK,SAASo6C,gBACTl5C,KAAK64C,aAAa,KAGhB74C,KAAK0tC,SAAYuL,GAIDj5C,KAAKssC,SAASl3B,SAAS9Q,IACzCtE,KAAKssC,SAASloC,aAAY,GAIR,IAHIpE,KAAK64C,aAAazjC,SAAS9Q,IACjDtE,KAAK64C,aAAaz0C,aAAY,IAG9BpE,KAAKm5C,YAITR,EAAen6C,UAAU26C,SAAW,WAClCn5C,KAAK0tC,SAAU,EAEf,IAAIxD,EAAStrC,EAAEqB,OAAO,GAAI,CAACmG,KAAM,GAAIpG,KAAK44C,YAE1C1O,EAAO9jC,OAEPpG,KAAKqB,QAAQ,eAAgB6oC,IAG/ByO,EAAen6C,UAAUu6C,gBAAkB,SAAU9G,EAAGnwC,GACtD,OAAOA,EAAKs3C,YAAct3C,EAAKs3C,WAAWC,MAG5CV,EAAen6C,UAAUs6C,kBAAoB,WAC3C,IAAIhM,EAAUluC,EACZ,kHAKE4iB,EAAUxhB,KAAKD,QAAQtC,IAAI,gBAAgBA,IAAI,eAInD,OAFAqvC,EAAQ9pC,KAAKwe,EAAQxhB,KAAK44C,aAEnB9L,GAGF6L,KAGT5T,EAAGzO,OAAO,8BAA8B,CACtC,SACA,aACC,SAAU13B,EAAGgmC,GACd,SAAS0U,EAAYxH,EAAWvpC,EAAUxI,GACxCC,KAAKu5C,gBAAkB36C,EAAEmB,EAAQtC,IAAI,mBAAqBqB,SAAS87B,MAEnEkX,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,GAwPjC,OArPAu5C,EAAW96C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GAC1D,IAAInpB,EAAOtlB,KAEX8xC,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhC72B,EAAUjX,GAAG,QAAQ,WACnB2kB,EAAKk0B,gBACLl0B,EAAKm0B,0BAA0B7hC,GAG/B0N,EAAKo0B,6BAA6B9hC,MAGpCA,EAAUjX,GAAG,SAAS,WACpB2kB,EAAKq0B,gBACLr0B,EAAKs0B,0BAA0BhiC,MAGjC5X,KAAK65C,mBAAmBl5C,GAAG,aAAa,SAAU4uC,GAChDA,EAAIzuC,sBAIRw4C,EAAW96C,UAAU+qB,QAAU,SAAUuoB,GACvCA,EAAU/0C,KAAKiD,MAEfA,KAAK65C,mBAAmBrlB,UAG1B8kB,EAAW96C,UAAU6F,SAAW,SAAUytC,EAAW9E,EAAWyB,GAE9DzB,EAAUjqC,KAAK,QAAS0rC,EAAW1rC,KAAK,UAExCiqC,EAAUtsC,YAAY,WACtBssC,EAAUvsC,SAAS,2BAEnBusC,EAAU1pC,IAAI,CACZe,SAAU,WACVC,KAAM,SAGRtE,KAAKyuC,WAAaA,GAGpB6K,EAAW96C,UAAU6tC,OAAS,SAAUyF,GACtC,IAAIrD,EAAa7vC,EAAE,iBAEfouC,EAAY8E,EAAU/0C,KAAKiD,MAK/B,OAJAyuC,EAAWprC,OAAO2pC,GAElBhtC,KAAK65C,mBAAqBpL,EAEnBA,GAGT6K,EAAW96C,UAAUm7C,cAAgB,SAAU7H,GAC7C9xC,KAAK65C,mBAAmBC,UAG1BR,EAAW96C,UAAUk7C,6BACjB,SAAU5H,EAAWl6B,GAGvB,IAAI5X,KAAK+5C,+BAAT,CAIA,IAAIz0B,EAAOtlB,KAEX4X,EAAUjX,GAAG,eAAe,WAC1B2kB,EAAK00B,oBACL10B,EAAK20B,qBAGPriC,EAAUjX,GAAG,kBAAkB,WAC7B2kB,EAAK00B,oBACL10B,EAAK20B,qBAGPriC,EAAUjX,GAAG,mBAAmB,WAC9B2kB,EAAK00B,oBACL10B,EAAK20B,qBAGPriC,EAAUjX,GAAG,UAAU,WACrB2kB,EAAK00B,oBACL10B,EAAK20B,qBAGPriC,EAAUjX,GAAG,YAAY,WACvB2kB,EAAK00B,oBACL10B,EAAK20B,qBAGPj6C,KAAK+5C,gCAAiC,IAGxCT,EAAW96C,UAAUi7C,0BACjB,SAAU3H,EAAWl6B,GACvB,IAAI0N,EAAOtlB,KAEPk6C,EAAc,kBAAoBtiC,EAAU3B,GAC5CkkC,EAAc,kBAAoBviC,EAAU3B,GAC5CmkC,EAAmB,6BAA+BxiC,EAAU3B,GAE5DokC,EAAYr6C,KAAKyuC,WAAW6L,UAAU1tB,OAAOgY,EAAMiG,WACvDwP,EAAUhzC,MAAK,WACbu9B,EAAMmH,UAAU/rC,KAAM,0BAA2B,CAC/CmnB,EAAGvoB,EAAEoB,MAAMo6B,aACX/S,EAAGzoB,EAAEoB,MAAMsW,iBAIf+jC,EAAU15C,GAAGu5C,GAAa,SAAUz0B,GAClC,IAAIphB,EAAWugC,EAAMoH,QAAQhsC,KAAM,2BACnCpB,EAAEoB,MAAMsW,UAAUjS,EAASgjB,MAG7BzoB,EAAEC,QAAQ8B,GAAGu5C,EAAc,IAAMC,EAAc,IAAMC,GACnD,SAAUx5C,GACV0kB,EAAK00B,oBACL10B,EAAK20B,sBAITX,EAAW96C,UAAUo7C,0BACjB,SAAU9H,EAAWl6B,GACvB,IAAIsiC,EAAc,kBAAoBtiC,EAAU3B,GAC5CkkC,EAAc,kBAAoBviC,EAAU3B,GAC5CmkC,EAAmB,6BAA+BxiC,EAAU3B,GAEhDjW,KAAKyuC,WAAW6L,UAAU1tB,OAAOgY,EAAMiG,WAC7C7pC,IAAIk5C,GAEdt7C,EAAEC,QAAQmC,IAAIk5C,EAAc,IAAMC,EAAc,IAAMC,IAGxDd,EAAW96C,UAAUw7C,kBAAoB,WACvC,IAAIO,EAAU37C,EAAEC,QAEZ27C,EAAmBx6C,KAAKgtC,UAAUxsC,SAAS,2BAC3Ci6C,EAAmBz6C,KAAKgtC,UAAUxsC,SAAS,2BAE3Ck6C,EAAe,KAEftlC,EAASpV,KAAKyuC,WAAWr5B,SAE7BA,EAAO6nB,OAAS7nB,EAAO9Q,IAAMtE,KAAKyuC,WAAWrqC,aAAY,GAEzD,IAAIwT,EAAY,CACdrU,OAAQvD,KAAKyuC,WAAWrqC,aAAY,IAGtCwT,EAAUtT,IAAM8Q,EAAO9Q,IACvBsT,EAAUqlB,OAAS7nB,EAAO9Q,IAAMsT,EAAUrU,OAE1C,IAAIg0C,EACMv3C,KAAKgtC,UAAU5oC,aAAY,GAGjCu2C,EACGJ,EAAQjkC,YADXqkC,EAEMJ,EAAQjkC,YAAcikC,EAAQh3C,SAGpCq3C,EAAkBD,EAAgBvlC,EAAO9Q,IAAMizC,EAC/CsD,EAAkBF,EAAmBvlC,EAAO6nB,OAASsa,EAErDj0C,EAAM,CACRm5B,KAAMrnB,EAAOqnB,KACbn4B,IAAKsT,EAAUqlB,QAIb6d,EAAgB96C,KAAKu5C,gBAIa,WAAlCuB,EAAcx3C,IAAI,cACpBw3C,EAAgBA,EAAc1hB,gBAGhC,IAAI2hB,EAAe,CACjBz2C,IAAK,EACLm4B,KAAM,IAIN79B,EAAEwK,SAAStK,SAAS87B,KAAMkgB,EAAc,KACxCA,EAAc,GAAGE,eAEjBD,EAAeD,EAAc1lC,UAG/B9R,EAAIgB,KAAOy2C,EAAaz2C,IACxBhB,EAAIm5B,MAAQse,EAAate,KAEpB+d,GAAqBC,IACxBC,EAAe,SAGZG,IAAmBD,GAAoBJ,GAEhCI,GAAmBC,GAAmBL,IAChDE,EAAe,SAFfA,EAAe,SAKG,SAAhBA,GACDF,GAAqC,UAAjBE,KACrBp3C,EAAIgB,IAAMsT,EAAUtT,IAAMy2C,EAAaz2C,IAAMizC,GAG3B,MAAhBmD,IACF16C,KAAKgtC,UACFtsC,YAAY,mDACZD,SAAS,qBAAuBi6C,GACnC16C,KAAKyuC,WACF/tC,YAAY,qDACZD,SAAS,sBAAwBi6C,IAGtC16C,KAAK65C,mBAAmBv2C,IAAIA,IAG9Bg2C,EAAW96C,UAAUy7C,gBAAkB,WACrC,IAAI32C,EAAM,CACR83B,MAAOp7B,KAAKyuC,WAAWwM,YAAW,GAAS,MAGzCj7C,KAAKD,QAAQtC,IAAI,uBACnB6F,EAAI43C,SAAW53C,EAAI83B,MACnB93B,EAAIe,SAAW,WACff,EAAI83B,MAAQ,QAGdp7B,KAAKgtC,UAAU1pC,IAAIA,IAGrBg2C,EAAW96C,UAAUg7C,cAAgB,SAAU1H,GAC7C9xC,KAAK65C,mBAAmBsB,SAASn7C,KAAKu5C,iBAEtCv5C,KAAKg6C,oBACLh6C,KAAKi6C,mBAGAX,KAGTvU,EAAGzO,OAAO,2CAA2C,IAElD,WAiBD,SAAS8kB,EAAyBtJ,EAAWvpC,EAAUxI,EAASqsC,GAC9DpsC,KAAKq7C,wBAA0Bt7C,EAAQtC,IAAI,2BAEvCuC,KAAKq7C,wBAA0B,IACjCr7C,KAAKq7C,wBAA0BC,KAGjCxJ,EAAU/0C,KAAKiD,KAAMuI,EAAUxI,EAASqsC,GAW1C,OARAgP,EAAwB58C,UAAU+5C,WAAa,SAAUzG,EAAW5H,GAClE,QA3BF,SAASqR,EAAcz5C,GAGrB,IAFA,IAAImvB,EAAQ,EAEH/zB,EAAI,EAAGA,EAAI4E,EAAKC,OAAQ7E,IAAK,CACpC,IAAI8Y,EAAOlU,EAAK5E,GAEZ8Y,EAAK5I,SACP6jB,GAASsqB,EAAavlC,EAAK5I,UAE3B6jB,IAIJ,OAAOA,EAcHsqB,CAAarR,EAAOpoC,KAAKoiB,SAAWlkB,KAAKq7C,0BAItCvJ,EAAU/0C,KAAKiD,KAAMkqC,IAGvBkR,KAGTrW,EAAGzO,OAAO,iCAAiC,CACzC,aACC,SAAUsO,GACX,SAAS4W,KA6CT,OA3CAA,EAAch9C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GAC7D,IAAInpB,EAAOtlB,KAEX8xC,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhC72B,EAAUjX,GAAG,SAAS,SAAUupC,GAC9B5kB,EAAKm2B,qBAAqBvR,OAI9BsR,EAAch9C,UAAUi9C,qBAAuB,SAAUxJ,EAAG/H,GAC1D,GAAIA,GAAyC,MAA/BA,EAAOwR,qBAA8B,CACjD,IAAIhzC,EAAQwhC,EAAOwR,qBAInB,GAAoB,WAAhBhzC,EAAMyhC,OAAsC,aAAhBzhC,EAAMyhC,MACpC,OAIJ,IAAIwR,EAAsB37C,KAAK4uC,wBAG/B,KAAI+M,EAAoB55C,OAAS,GAAjC,CAIA,IAAID,EAAO8iC,EAAMoH,QAAQ2P,EAAoB,GAAI,QAI9B,MAAhB75C,EAAKnC,SAAmBmC,EAAKnC,QAAQ4tC,UACrB,MAAhBzrC,EAAKnC,SAAmBmC,EAAKyrC,UAKhCvtC,KAAKqB,QAAQ,SAAU,CACnBS,KAAMA,MAIL05C,KAGTzW,EAAGzO,OAAO,iCAAiC,IAExC,WACD,SAASslB,KA8BT,OA5BAA,EAAcp9C,UAAUJ,KAAO,SAAU0zC,EAAWl6B,EAAW62B,GAC7D,IAAInpB,EAAOtlB,KAEX8xC,EAAU/0C,KAAKiD,KAAM4X,EAAW62B,GAEhC72B,EAAUjX,GAAG,UAAU,SAAU4uC,GAC/BjqB,EAAKu2B,iBAAiBtM,MAGxB33B,EAAUjX,GAAG,YAAY,SAAU4uC,GACjCjqB,EAAKu2B,iBAAiBtM,OAI1BqM,EAAcp9C,UAAUq9C,iBAAmB,SAAU5J,EAAG1C,GACtD,IAAIC,EAAgBD,EAAIC,cAGpBA,IAAkBA,EAAcsM,SAAWtM,EAAcuM,UAI7D/7C,KAAKqB,QAAQ,QAAS,CACpBmuC,cAAeA,EACfkM,qBAAsBnM,KAInBqM,KAGT7W,EAAGzO,OAAO,kBAAkB,IAAG,WAE7B,MAAO,CACL0lB,aAAc,WACZ,MAAO,oCAETC,aAAc,SAAUp5B,GACtB,IAAIq5B,EAAYr5B,EAAK7Z,MAAMjH,OAAS8gB,EAAKo1B,QAErCz2B,EAAU,iBAAmB06B,EAAY,aAM7C,OAJiB,GAAbA,IACF16B,GAAW,KAGNA,GAET26B,cAAe,SAAUt5B,GAKvB,MAFc,iBAFOA,EAAKi1B,QAAUj1B,EAAK7Z,MAAMjH,QAEE,uBAInD6rC,YAAa,WACX,MAAO,8BAETwO,gBAAiB,SAAUv5B,GACzB,IAAIrB,EAAU,uBAAyBqB,EAAKo1B,QAAU,QAMtD,OAJoB,GAAhBp1B,EAAKo1B,UACPz2B,GAAW,KAGNA,GAET66B,UAAW,WACT,MAAO,oBAETC,UAAW,WACT,MAAO,mBAETC,eAAgB,WACd,MAAO,wBAKbxX,EAAGzO,OAAO,mBAAmB,CAC3B,SACA,UAEA,YAEA,qBACA,uBACA,0BACA,yBACA,qBACA,yBAEA,UACA,gBACA,eAEA,gBACA,eACA,cACA,cACA,mBACA,4BACA,4BACA,gCAEA,aACA,oBACA,6BACA,4BACA,wBACA,qCACA,2BACA,2BAEA,cACC,SAAU13B,EAAGumC,EAEHqX,EAEAlL,EAAiBK,EAAmBE,EAAaQ,EACjDoK,EAAiB7I,EAEjBhP,EAAOmP,EAAa2I,EAEpBC,EAAYC,EAAWC,EAAUhG,EAAMQ,EACvCM,EAAoBI,EAAoBG,EAExCI,EAAUwE,EAAgBtE,EAAiBG,EAC3CW,EAAY8B,EAAyBI,EAAeI,EAEpDmB,GACX,SAASjY,IACP9kC,KAAK+xB,QAkZP,OA/YA+S,EAAStmC,UAAUojB,MAAQ,SAAU7hB,GAGnC,GAA2B,OAF3BA,EAAUnB,EAAEqB,QAAO,EAAM,GAAID,KAAKjB,SAAUgB,IAEhCqsC,YAAqB,CAyC/B,GAxCoB,MAAhBrsC,EAAQwE,KACVxE,EAAQqsC,YAAcyQ,EACG,MAAhB98C,EAAQ+B,KACjB/B,EAAQqsC,YAAcwQ,EAEtB78C,EAAQqsC,YAAcuQ,EAGpB58C,EAAQ83C,mBAAqB,IAC/B93C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACRuL,IAIA53C,EAAQi4C,mBAAqB,IAC/Bj4C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACR2L,IAIAh4C,EAAQo4C,uBAAyB,IACnCp4C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACR8L,IAIAn4C,EAAQ+2C,OACV/2C,EAAQqsC,YAAcxH,EAAMuE,SAASppC,EAAQqsC,YAAayK,IAG7B,MAA3B92C,EAAQi9C,iBAAgD,MAArBj9C,EAAQu3C,YAC7Cv3C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACRiL,IAIiB,MAAjBt3C,EAAQw0C,MAAe,CACzB,IAAI0I,EAAQ9X,EAAQplC,EAAQm9C,QAAU,gBAEtCn9C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACR6Q,GAIJ,GAA6B,MAAzBl9C,EAAQo9C,cAAuB,CACjC,IAAIC,EAAgBjY,EAAQplC,EAAQm9C,QAAU,wBAE9Cn9C,EAAQqsC,YAAcxH,EAAMuE,SAC1BppC,EAAQqsC,YACRgR,IA8BN,GAzB8B,MAA1Br9C,EAAQs9C,iBACVt9C,EAAQs9C,eAAiBb,EAEL,MAAhBz8C,EAAQwE,OACVxE,EAAQs9C,eAAiBzY,EAAMuE,SAC7BppC,EAAQs9C,eACR1E,IAIuB,MAAvB54C,EAAQgyC,cACVhyC,EAAQs9C,eAAiBzY,EAAMuE,SAC7BppC,EAAQs9C,eACR7E,IAIAz4C,EAAQu9C,gBACVv9C,EAAQs9C,eAAiBzY,EAAMuE,SAC7BppC,EAAQs9C,eACR7B,KAKyB,MAA3Bz7C,EAAQw9C,gBAAyB,CACnC,GAAIx9C,EAAQy9C,SACVz9C,EAAQw9C,gBAAkBjF,MACrB,CACL,IAAImF,EAAqB7Y,EAAMuE,SAASmP,EAAUwE,GAElD/8C,EAAQw9C,gBAAkBE,EAiB5B,GAdwC,IAApC19C,EAAQs7C,0BACVt7C,EAAQw9C,gBAAkB3Y,EAAMuE,SAC9BppC,EAAQw9C,gBACRnC,IAIAr7C,EAAQ29C,gBACV39C,EAAQw9C,gBAAkB3Y,EAAMuE,SAC9BppC,EAAQw9C,gBACR3B,IAK0B,MAA5B77C,EAAQ49C,kBACe,MAAvB59C,EAAQ69C,aACyB,MAAjC79C,EAAQ89C,sBACR,CACA,IAAIC,EAAc3Y,EAAQplC,EAAQm9C,QAAU,sBAE5Cn9C,EAAQw9C,gBAAkB3Y,EAAMuE,SAC9BppC,EAAQw9C,gBACRO,GAIJ/9C,EAAQw9C,gBAAkB3Y,EAAMuE,SAC9BppC,EAAQw9C,gBACRjE,GAIJ,GAAgC,MAA5Bv5C,EAAQg+C,iBAA0B,CA6BpC,GA5BIh+C,EAAQy9C,SACVz9C,EAAQg+C,iBAAmBpM,EAE3B5xC,EAAQg+C,iBAAmBzM,EAIF,MAAvBvxC,EAAQgyC,cACVhyC,EAAQg+C,iBAAmBnZ,EAAMuE,SAC/BppC,EAAQg+C,iBACRlM,IAIA9xC,EAAQi+C,aACVj+C,EAAQg+C,iBAAmBnZ,EAAMuE,SAC/BppC,EAAQg+C,iBACR1L,IAIAtyC,EAAQy9C,WACVz9C,EAAQg+C,iBAAmBnZ,EAAMuE,SAC/BppC,EAAQg+C,iBACRtB,IAK2B,MAA7B18C,EAAQk+C,mBACgB,MAAxBl+C,EAAQm+C,cAC0B,MAAlCn+C,EAAQo+C,uBACR,CACA,IAAIC,EAAejZ,EAAQplC,EAAQm9C,QAAU,uBAE7Cn9C,EAAQg+C,iBAAmBnZ,EAAMuE,SAC/BppC,EAAQg+C,iBACRK,GAIJr+C,EAAQg+C,iBAAmBnZ,EAAMuE,SAC/BppC,EAAQg+C,iBACRnK,GAMJ7zC,EAAQs+C,SAAWr+C,KAAKs+C,iBAAiBv+C,EAAQs+C,UAGjDt+C,EAAQs+C,SAASj6B,KAAK,MAItB,IAFA,IAAIm6B,EAAkB,GAEb1hD,EAAI,EAAGA,EAAIkD,EAAQs+C,SAASt8C,OAAQlF,IAAK,CAChD,IAAIwhD,EAAWt+C,EAAQs+C,SAASxhD,IAEW,IAAvC0hD,EAAgB14C,QAAQw4C,IAC1BE,EAAgBn6B,KAAKi6B,GAWzB,OAPAt+C,EAAQs+C,SAAWE,EAEnBx+C,EAAQs0C,aAAer0C,KAAKw+C,qBAC1Bz+C,EAAQs+C,SACRt+C,EAAQ0+C,OAGH1+C,GAGT+kC,EAAStmC,UAAUuzB,MAAQ,WACzB,SAAS2sB,EAAiBn4C,GAMxB,OAAOA,EAAKT,QAAQ,qBAJpB,SAAegQ,GACb,OAAO4mC,EAAW5mC,IAAMA,KAmD5B9V,KAAKjB,SAAW,CACdm+C,QAAS,KACTyB,gBAAiB,UACjBjB,eAAe,EACfe,OAAO,EACPG,mBAAmB,EACnB3T,aAAcrG,EAAMqG,aACpBoT,SAAU,GACVlJ,QArDF,SAASA,EAASjL,EAAQpoC,GAExB,GAA4B,KAAxBlD,EAAEglB,KAAKsmB,EAAOyJ,MAChB,OAAO7xC,EAIT,GAAIA,EAAKsL,UAAYtL,EAAKsL,SAASrL,OAAS,EAAG,CAM7C,IAHA,IAAImB,EAAQtE,EAAEqB,QAAO,EAAM,GAAI6B,GAGtB7E,EAAI6E,EAAKsL,SAASrL,OAAS,EAAG9E,GAAK,EAAGA,IAM9B,MAHDk4C,EAAQjL,EAFVpoC,EAAKsL,SAASnQ,KAMxBiG,EAAMkK,SAASme,OAAOtuB,EAAG,GAK7B,OAAIiG,EAAMkK,SAASrL,OAAS,EACnBmB,EAIFiyC,EAAQjL,EAAQhnC,GAGzB,IAAI27C,EAAWH,EAAgB58C,EAAKyE,MAAMie,cACtCmvB,EAAO+K,EAAgBxU,EAAOyJ,MAAMnvB,cAGxC,OAAIq6B,EAASh5C,QAAQ8tC,IAAS,EACrB7xC,EAIF,MAYP+1C,mBAAoB,EACpBG,mBAAoB,EACpBG,uBAAwB,EACxBkD,wBAAyB,EACzBiC,eAAe,EACfwB,mBAAmB,EACnB7R,OAAQ,SAAUnrC,GAChB,OAAOA,GAETi9C,eAAgB,SAAU7jB,GACxB,OAAOA,EAAO30B,MAEhBy4C,kBAAmB,SAAUvN,GAC3B,OAAOA,EAAUlrC,MAEnBtH,MAAO,UACPm8B,MAAO,YAIX0J,EAAStmC,UAAUygD,iBAAmB,SAAUl/C,EAASwI,GACvD,IAAI22C,EAAiBn/C,EAAQs+C,SACzBc,EAAkBn/C,KAAKjB,SAASs/C,SAChCe,EAAkB72C,EAAS+b,KAAK,QAChC+6B,EAAiB92C,EAAS4oC,QAAQ,UAAU7sB,KAAK,QAEjDg7B,EAAYn+B,MAAM3iB,UAAU4b,OAAOrd,KACrCiD,KAAKs+C,iBAAiBc,GACtBp/C,KAAKs+C,iBAAiBY,GACtBl/C,KAAKs+C,iBAAiBa,GACtBn/C,KAAKs+C,iBAAiBe,IAKxB,OAFAt/C,EAAQs+C,SAAWiB,EAEZv/C,GAGT+kC,EAAStmC,UAAU8/C,iBAAmB,SAAUD,GAC9C,IAAKA,EACH,MAAO,GAGT,GAAIz/C,EAAE2gD,cAAclB,GAClB,MAAO,GAGT,GAAIz/C,EAAE44B,cAAc6mB,GAClB,MAAO,CAACA,GAGV,IAAIiB,EAKFA,EAHG1gD,EAAEwiB,QAAQi9B,GAGDA,EAFA,CAACA,GAOf,IAFA,IAAImB,EAAoB,GAEf3iD,EAAI,EAAGA,EAAIyiD,EAAUv9C,OAAQlF,IAGpC,GAFA2iD,EAAkBp7B,KAAKk7B,EAAUziD,IAEL,kBAAjByiD,EAAUziD,IAAmByiD,EAAUziD,GAAGgJ,QAAQ,KAAO,EAAG,CAErE,IACI45C,EADgBH,EAAUziD,GAAG0gB,MAAM,KACN,GAEjCiiC,EAAkBp7B,KAAKq7B,GAI3B,OAAOD,GAGT1a,EAAStmC,UAAUggD,qBAAuB,SAAUc,EAAWb,GAG7D,IAFA,IAAIpK,EAAe,IAAIN,EAEdl3C,EAAI,EAAGA,EAAIyiD,EAAUv9C,OAAQlF,IAAK,CACzC,IAAI6iD,EAAe,IAAI3L,EAEnBsK,EAAWiB,EAAUziD,GAEzB,GAAwB,kBAAbwhD,EACT,IAEEqB,EAAe3L,EAAYI,SAASkK,GACpC,MAAOz9C,GACP,IAEEy9C,EAAWr+C,KAAKjB,SAAS4/C,gBAAkBN,EAC3CqB,EAAe3L,EAAYI,SAASkK,GACpC,MAAOsB,GAIHlB,GAAS5/C,OAAOmG,SAAWA,QAAQ2c,MACrC3c,QAAQ2c,KACN,mCAAqC08B,EAArC,+EAORqB,EADS9gD,EAAE44B,cAAc6mB,GACV,IAAItK,EAAYsK,GAEhBA,EAGjBhK,EAAap0C,OAAOy/C,GAGtB,OAAOrL,GAGTvP,EAAStmC,UAAUgwB,IAAM,SAAUrwB,EAAKN,GACtC,IAEIiE,EAAO,GACXA,EAHelD,EAAEghD,UAAUzhD,IAGVN,EAEjB,IAAIgiD,EAAgBjb,EAAM6F,aAAa3oC,GAEvClD,EAAEqB,QAAO,EAAMD,KAAKjB,SAAU8gD,IAGjB,IAAI/a,KAKrBC,EAAGzO,OAAO,kBAAkB,CAC1B,UACA,SACA,aACA,YACC,SAAU6O,EAASvmC,EAAGkmC,EAAUF,GACjC,SAASkb,EAAS//C,EAASwI,GAazB,GAZAvI,KAAKD,QAAUA,EAEC,MAAZwI,GACFvI,KAAK+/C,YAAYx3C,GAGH,MAAZA,IACFvI,KAAKD,QAAU+kC,EAASma,iBAAiBj/C,KAAKD,QAASwI,IAGzDvI,KAAKD,QAAU+kC,EAASljB,MAAM5hB,KAAKD,SAE/BwI,GAAYA,EAASosC,GAAG,SAAU,CACpC,IAAIqL,EAAc7a,EAAQnlC,KAAKvC,IAAI,WAAa,oBAEhDuC,KAAKD,QAAQqsC,YAAcxH,EAAMuE,SAC/BnpC,KAAKD,QAAQqsC,YACb4T,IAoHN,OA/GAF,EAAQthD,UAAUuhD,YAAc,SAAUnI,GACxC,IAAIqI,EAAe,CAAC,WAES,MAAzBjgD,KAAKD,QAAQy9C,WACfx9C,KAAKD,QAAQy9C,SAAW5F,EAAGtzB,KAAK,aAGL,MAAzBtkB,KAAKD,QAAQ4tC,WACf3tC,KAAKD,QAAQ4tC,SAAWiK,EAAGtzB,KAAK,aAGV,MAApBtkB,KAAKD,QAAQmgD,MACXtI,EAAGtzB,KAAK,OACVtkB,KAAKD,QAAQmgD,IAAMtI,EAAGtzB,KAAK,OAClBszB,EAAGzG,QAAQ,SAAS7sB,KAAK,OAClCtkB,KAAKD,QAAQmgD,IAAMtI,EAAGzG,QAAQ,SAAS7sB,KAAK,OAE5CtkB,KAAKD,QAAQmgD,IAAM,OAIvBtI,EAAGtzB,KAAK,WAAYtkB,KAAKD,QAAQ4tC,UACjCiK,EAAGtzB,KAAK,WAAYtkB,KAAKD,QAAQy9C,UAE7B5Y,EAAMoH,QAAQ4L,EAAG,GAAI,iBACnB53C,KAAKD,QAAQ0+C,OAAS5/C,OAAOmG,SAAWA,QAAQ2c,MAClD3c,QAAQ2c,KACN,2KAMJijB,EAAMmH,UAAU6L,EAAG,GAAI,OAAQhT,EAAMoH,QAAQ4L,EAAG,GAAI,gBACpDhT,EAAMmH,UAAU6L,EAAG,GAAI,QAAQ,IAG7BhT,EAAMoH,QAAQ4L,EAAG,GAAI,aACnB53C,KAAKD,QAAQ0+C,OAAS5/C,OAAOmG,SAAWA,QAAQ2c,MAClD3c,QAAQ2c,KACN,gKAMJi2B,EAAG70C,KAAK,YAAa6hC,EAAMoH,QAAQ4L,EAAG,GAAI,YAC1ChT,EAAMmH,UAAU6L,EAAG,GAAI,WAAYhT,EAAMoH,QAAQ4L,EAAG,GAAI,aAG1D,IAAIuI,EAAU,GAEd,SAASC,EAAgBnO,EAAGoO,GAC1B,OAAOA,EAAO77B,cAIhB,IAAK,IAAIzhB,EAAO,EAAGA,EAAO60C,EAAG,GAAGrT,WAAWxiC,OAAQgB,IAAQ,CACzD,IAAIu9C,EAAgB1I,EAAG,GAAGrT,WAAWxhC,GAAM5F,KAG3C,GAFa,SAETmjD,EAAc7U,OAAO,EAFZ,QAEsB1pC,QAAmB,CAEpD,IAAIw+C,EAAWD,EAAcp8C,UAJlB,QAImCnC,QAI1Cy+C,EAAY5b,EAAMoH,QAAQ4L,EAAG,GAAI2I,GAMrCJ,EAHoBI,EAASz6C,QAAQ,YAAas6C,IAGzBI,GAMzB5hD,EAAEwI,GAAGokC,QAAsC,MAA5B5sC,EAAEwI,GAAGokC,OAAOC,OAAO,EAAG,IAAcmM,EAAG,GAAGuI,UAC3DA,EAAUvhD,EAAEqB,QAAO,EAAM,GAAI23C,EAAG,GAAGuI,QAASA,IAI9C,IAAIr+C,EAAOlD,EAAEqB,QAAO,EAAM,GAAI2kC,EAAMoH,QAAQ4L,EAAG,IAAKuI,GAIpD,IAAK,IAAIhiD,KAFT2D,EAAO8iC,EAAM6F,aAAa3oC,GAGpBlD,EAAEilB,QAAQ1lB,EAAK8hD,IAAiB,IAIhCrhD,EAAE44B,cAAcx3B,KAAKD,QAAQ5B,IAC/BS,EAAEqB,OAAOD,KAAKD,QAAQ5B,GAAM2D,EAAK3D,IAEjC6B,KAAKD,QAAQ5B,GAAO2D,EAAK3D,IAI7B,OAAO6B,MAGT8/C,EAAQthD,UAAUf,IAAM,SAAUU,GAChC,OAAO6B,KAAKD,QAAQ5B,IAGtB2hD,EAAQthD,UAAUgwB,IAAM,SAAUrwB,EAAKykB,GACrC5iB,KAAKD,QAAQ5B,GAAOykB,GAGfk9B,KAGT/a,EAAGzO,OAAO,eAAe,CACvB,SACA,YACA,UACA,WACC,SAAU13B,EAAGkhD,EAASlb,EAAO8L,GAC9B,IAAI+P,EAAU,SAAVA,EAAoBl4C,EAAUxI,GACa,MAAzC6kC,EAAMoH,QAAQzjC,EAAS,GAAI,YAC7Bq8B,EAAMoH,QAAQzjC,EAAS,GAAI,WAAWghB,UAGxCvpB,KAAKuI,SAAWA,EAEhBvI,KAAKiW,GAAKjW,KAAK0gD,YAAYn4C,GAE3BxI,EAAUA,GAAW,GAErBC,KAAKD,QAAU,IAAI+/C,EAAQ//C,EAASwI,GAEpCk4C,EAAQvX,UAAUrtB,YAAY9e,KAAKiD,MAInC,IAAI2gD,EAAWp4C,EAASxF,KAAK,aAAe,EAC5C6hC,EAAMmH,UAAUxjC,EAAS,GAAI,eAAgBo4C,GAC7Cp4C,EAASxF,KAAK,WAAY,MAI1B,IAAI69C,EAAc5gD,KAAKD,QAAQtC,IAAI,eACnCuC,KAAKosC,YAAc,IAAIwU,EAAYr4C,EAAUvI,KAAKD,SAElD,IAAI0uC,EAAazuC,KAAKqsC,SAEtBrsC,KAAK6gD,gBAAgBpS,GAErB,IAAIqS,EAAmB9gD,KAAKD,QAAQtC,IAAI,oBACxCuC,KAAKyxC,UAAY,IAAIqP,EAAiBv4C,EAAUvI,KAAKD,SACrDC,KAAK4wC,WAAa5wC,KAAKyxC,UAAUpF,SAEjCrsC,KAAKyxC,UAAUptC,SAASrE,KAAK4wC,WAAYnC,GAEzC,IAAIsS,EAAkB/gD,KAAKD,QAAQtC,IAAI,mBACvCuC,KAAKu3C,SAAW,IAAIwJ,EAAgBx4C,EAAUvI,KAAKD,SACnDC,KAAKgtC,UAAYhtC,KAAKu3C,SAASlL,SAE/BrsC,KAAKu3C,SAASlzC,SAASrE,KAAKgtC,UAAWyB,GAEvC,IAAIuS,EAAiBhhD,KAAKD,QAAQtC,IAAI,kBACtCuC,KAAKkkB,QAAU,IAAI88B,EAAez4C,EAAUvI,KAAKD,QAASC,KAAKosC,aAC/DpsC,KAAKssC,SAAWtsC,KAAKkkB,QAAQmoB,SAE7BrsC,KAAKkkB,QAAQ7f,SAASrE,KAAKssC,SAAUtsC,KAAKgtC,WAI1C,IAAI1nB,EAAOtlB,KAGXA,KAAKihD,gBAGLjhD,KAAKkhD,qBAGLlhD,KAAKmhD,sBACLnhD,KAAKohD,2BACLphD,KAAKqhD,0BACLrhD,KAAKshD,yBACLthD,KAAKuhD,kBAGLvhD,KAAKosC,YAAYkB,SAAQ,SAAUkU,GACjCl8B,EAAKjkB,QAAQ,mBAAoB,CAC/BS,KAAM0/C,OAKVj5C,EAAS9H,SAAS,6BAClB8H,EAASxF,KAAK,cAAe,QAG7B/C,KAAKyhD,kBAEL7c,EAAMmH,UAAUxjC,EAAS,GAAI,UAAWvI,MAGxCuI,EAASzG,KAAK,UAAW9B,OA8jB3B,OA3jBA4kC,EAAMiE,OAAO4X,EAAS7b,EAAMoF,YAE5ByW,EAAQjiD,UAAUkiD,YAAc,SAAUn4C,GAcxC,MAFK,YATsB,MAAvBA,EAASxF,KAAK,MACXwF,EAASxF,KAAK,MACe,MAAzBwF,EAASxF,KAAK,QAClBwF,EAASxF,KAAK,QAAU,IAAM6hC,EAAMyF,cAAc,GAElDzF,EAAMyF,cAAc,IAGnBvkC,QAAQ,kBAAmB,KAMrC26C,EAAQjiD,UAAUqiD,gBAAkB,SAAUpS,GAC5CA,EAAWiT,YAAY1hD,KAAKuI,UAE5B,IAAI6yB,EAAQp7B,KAAK2hD,cAAc3hD,KAAKuI,SAAUvI,KAAKD,QAAQtC,IAAI,UAElD,MAAT29B,GACFqT,EAAWnrC,IAAI,QAAS83B,IAI5BqlB,EAAQjiD,UAAUmjD,cAAgB,SAAUp5C,EAAU3D,GACpD,IAAIg9C,EAAQ,gEAEZ,GAAc,WAAVh9C,EAAqB,CACvB,IAAIi9C,EAAa7hD,KAAK2hD,cAAcp5C,EAAU,SAE9C,OAAkB,MAAds5C,EACKA,EAGF7hD,KAAK2hD,cAAcp5C,EAAU,WAGtC,GAAc,WAAV3D,EAAqB,CACvB,IAAIk9C,EAAev5C,EAAS0yC,YAAW,GAEvC,OAAI6G,GAAgB,EACX,OAGFA,EAAe,KAGxB,GAAc,SAAVl9C,EAAmB,CACrB,IAAImpB,EAAQxlB,EAASxF,KAAK,SAE1B,GAAsB,kBAAXgrB,EACT,OAAO,KAKT,IAFA,IAAIggB,EAAQhgB,EAAMxQ,MAAM,KAEf3gB,EAAI,EAAGC,EAAIkxC,EAAMhsC,OAAQnF,EAAIC,EAAGD,GAAQ,EAAG,CAClD,IACIuK,EADO4mC,EAAMnxC,GAAGkJ,QAAQ,MAAO,IAChB5C,MAAM0+C,GAEzB,GAAgB,OAAZz6C,GAAoBA,EAAQpF,QAAU,EACxC,OAAOoF,EAAQ,GAInB,OAAO,KAGT,MAAc,iBAAVvC,EACkB/F,OAAOk8B,iBAAiBxyB,EAAS,IAEhC6yB,MAGhBx2B,GAGT67C,EAAQjiD,UAAUyiD,cAAgB,WAChCjhD,KAAKosC,YAAYhuC,KAAK4B,KAAMA,KAAKyuC,YACjCzuC,KAAKyxC,UAAUrzC,KAAK4B,KAAMA,KAAKyuC,YAE/BzuC,KAAKu3C,SAASn5C,KAAK4B,KAAMA,KAAKyuC,YAC9BzuC,KAAKkkB,QAAQ9lB,KAAK4B,KAAMA,KAAKyuC,aAG/BgS,EAAQjiD,UAAU0iD,mBAAqB,WACrC,IAAI57B,EAAOtlB,KAEXA,KAAKuI,SAAS5H,GAAG,kBAAkB,WACjC2kB,EAAK8mB,YAAYkB,SAAQ,SAAUxrC,GACjCwjB,EAAKjkB,QAAQ,mBAAoB,CAC/BS,KAAMA,UAKZ9B,KAAKuI,SAAS5H,GAAG,iBAAiB,SAAU4uC,GAC1CjqB,EAAKjkB,QAAQ,QAASkuC,MAGxBvvC,KAAK+hD,OAASnd,EAAMxmC,KAAK4B,KAAKyhD,gBAAiBzhD,MAC/CA,KAAKgiD,OAASpd,EAAMxmC,KAAK4B,KAAKiiD,aAAcjiD,MAExCA,KAAKuI,SAAS,GAAG25C,aACnBliD,KAAKuI,SAAS,GAAG25C,YAAY,mBAAoBliD,KAAK+hD,QAGxD,IAAII,EAAWtjD,OAAOujD,kBACpBvjD,OAAOwjD,wBACPxjD,OAAOyjD,oBAGO,MAAZH,GACFniD,KAAKuiD,UAAY,IAAIJ,GAAS,SAAUK,GACtCl9B,EAAKy8B,SACLz8B,EAAK08B,OAAO,KAAMQ,MAEpBxiD,KAAKuiD,UAAUE,QAAQziD,KAAKuI,SAAS,GAAI,CACvCg8B,YAAY,EACZme,WAAW,EACXC,SAAS,KAEF3iD,KAAKuI,SAAS,GAAG+a,mBAC1BtjB,KAAKuI,SAAS,GAAG+a,iBACf,kBACAgC,EAAKy8B,QACL,GAEF/hD,KAAKuI,SAAS,GAAG+a,iBACf,kBACAgC,EAAK08B,QACL,GAEFhiD,KAAKuI,SAAS,GAAG+a,iBACf,iBACAgC,EAAK08B,QACL,KAKNvB,EAAQjiD,UAAU2iD,oBAAsB,WACtC,IAAI77B,EAAOtlB,KAEXA,KAAKosC,YAAYzrC,GAAG,KAAK,SAAUxD,EAAM+sC,GACvC5kB,EAAKjkB,QAAQlE,EAAM+sC,OAIvBuW,EAAQjiD,UAAU4iD,yBAA2B,WAC3C,IAAI97B,EAAOtlB,KACP4iD,EAAiB,CAAC,SAAU,SAEhC5iD,KAAKyxC,UAAU9wC,GAAG,UAAU,WAC1B2kB,EAAKu9B,oBAGP7iD,KAAKyxC,UAAU9wC,GAAG,SAAS,SAAUupC,GACnC5kB,EAAKlV,MAAM85B,MAGblqC,KAAKyxC,UAAU9wC,GAAG,KAAK,SAAUxD,EAAM+sC,IACI,IAArCtrC,EAAEilB,QAAQ1mB,EAAMylD,IAIpBt9B,EAAKjkB,QAAQlE,EAAM+sC,OAIvBuW,EAAQjiD,UAAU6iD,wBAA0B,WAC1C,IAAI/7B,EAAOtlB,KAEXA,KAAKu3C,SAAS52C,GAAG,KAAK,SAAUxD,EAAM+sC,GACpC5kB,EAAKjkB,QAAQlE,EAAM+sC,OAIvBuW,EAAQjiD,UAAU8iD,uBAAyB,WACzC,IAAIh8B,EAAOtlB,KAEXA,KAAKkkB,QAAQvjB,GAAG,KAAK,SAAUxD,EAAM+sC,GACnC5kB,EAAKjkB,QAAQlE,EAAM+sC,OAIvBuW,EAAQjiD,UAAU+iD,gBAAkB,WAClC,IAAIj8B,EAAOtlB,KAEXA,KAAKW,GAAG,QAAQ,WACd2kB,EAAKmpB,WAAWhuC,SAAS,8BAG3BT,KAAKW,GAAG,SAAS,WACf2kB,EAAKmpB,WAAW/tC,YAAY,8BAG9BV,KAAKW,GAAG,UAAU,WAChB2kB,EAAKmpB,WAAW/tC,YAAY,kCAG9BV,KAAKW,GAAG,WAAW,WACjB2kB,EAAKmpB,WAAWhuC,SAAS,kCAG3BT,KAAKW,GAAG,QAAQ,WACd2kB,EAAKmpB,WAAW/tC,YAAY,+BAG9BV,KAAKW,GAAG,SAAS,SAAUupC,GACpB5kB,EAAKxV,UACRwV,EAAKjkB,QAAQ,OAAQ,IAGvBrB,KAAKosC,YAAYmI,MAAMrK,GAAQ,SAAUpoC,GACvCwjB,EAAKjkB,QAAQ,cAAe,CAC1BS,KAAMA,EACNyyC,MAAOrK,UAKblqC,KAAKW,GAAG,gBAAgB,SAAUupC,GAChClqC,KAAKosC,YAAYmI,MAAMrK,GAAQ,SAAUpoC,GACvCwjB,EAAKjkB,QAAQ,iBAAkB,CAC7BS,KAAMA,EACNyyC,MAAOrK,UAKblqC,KAAKW,GAAG,YAAY,SAAU4uC,GAC5B,IAAIpxC,EAAMoxC,EAAIpuC,MAEVmkB,EAAKxV,SACH3R,IAAQuyC,EAAKT,KAAO9xC,IAAQuyC,EAAKd,KAChCzxC,IAAQuyC,EAAKH,IAAMhB,EAAIuT,QAC1Bx9B,EAAK3e,MAAM4oC,GAEXA,EAAI1uC,kBACK1C,IAAQuyC,EAAKb,OACtBvqB,EAAKjkB,QAAQ,iBAAkB,IAE/BkuC,EAAI1uC,kBACM1C,IAAQuyC,EAAKR,OAASX,EAAIuM,SACpCx2B,EAAKjkB,QAAQ,iBAAkB,IAE/BkuC,EAAI1uC,kBACK1C,IAAQuyC,EAAKH,IACtBjrB,EAAKjkB,QAAQ,mBAAoB,IAEjCkuC,EAAI1uC,kBACK1C,IAAQuyC,EAAKF,OACtBlrB,EAAKjkB,QAAQ,eAAgB,IAE7BkuC,EAAI1uC,mBAGF1C,IAAQuyC,EAAKb,OAAS1xC,IAAQuyC,EAAKR,OAClC/xC,IAAQuyC,EAAKF,MAAQjB,EAAIuT,UAC5Bx9B,EAAKy9B,OAELxT,EAAI1uC,sBAMZ4/C,EAAQjiD,UAAUijD,gBAAkB,WAClCzhD,KAAKD,QAAQyuB,IAAI,WAAYxuB,KAAKuI,SAAS+b,KAAK,aAE5CtkB,KAAKqxC,cACHrxC,KAAK8P,UACP9P,KAAK2G,QAGP3G,KAAKqB,QAAQ,UAAW,KAExBrB,KAAKqB,QAAQ,SAAU,KAI3Bo/C,EAAQjiD,UAAUwkD,kBAAoB,SAAUzT,EAAKiT,GACnD,IAAIt2B,GAAU,EACV5G,EAAOtlB,KAIX,IACEuvC,IAAOA,EAAIzoC,QACe,WAAxByoC,EAAIzoC,OAAOuyB,UAAiD,aAAxBkW,EAAIzoC,OAAOuyB,SAFnD,CAQA,GAAKmpB,EAIE,GAAIA,EAAUS,YAAcT,EAAUS,WAAWlhD,OAAS,EAC/D,IAAK,IAAI1D,EAAI,EAAGA,EAAImkD,EAAUS,WAAWlhD,OAAQ1D,IACpCmkD,EAAUS,WAAW5kD,GAEvBkvC,WACPrhB,GAAU,QAGLs2B,EAAUU,cAAgBV,EAAUU,aAAanhD,OAAS,EACnEmqB,GAAU,EACDttB,EAAEwiB,QAAQohC,IACnB5jD,EAAEyI,KAAKm7C,GAAW,SAASjT,EAAK4T,GAC9B,GAAI79B,EAAK09B,kBAAkBzT,EAAK4T,GAI9B,OADAj3B,GAAU,GACH,UAjBXA,GAAU,EAqBZ,OAAOA,IAGTu0B,EAAQjiD,UAAUyjD,aAAe,SAAU1S,EAAKiT,GAC9C,IAAIt2B,EAAUlsB,KAAKgjD,kBAAkBzT,EAAKiT,GACtCl9B,EAAOtlB,KAGPksB,GACFlsB,KAAKosC,YAAYkB,SAAQ,SAAUsH,GACjCtvB,EAAKjkB,QAAQ,mBAAoB,CAC/BS,KAAM8yC,QAUd6L,EAAQjiD,UAAU6C,QAAU,SAAUlE,EAAM0lB,GAC1C,IAAIugC,EAAgB3C,EAAQvX,UAAU7nC,QAClCgiD,EAAgB,CAClB,KAAQ,UACR,MAAS,UACT,OAAU,YACV,SAAY,cACZ,MAAS,YAOX,QAJahjC,IAATwC,IACFA,EAAO,IAGL1lB,KAAQkmD,EAAe,CACzB,IAAIC,EAAiBD,EAAclmD,GAC/BomD,EAAiB,CACnBn0B,WAAW,EACXjyB,KAAMA,EACN0lB,KAAMA,GAKR,GAFAugC,EAAcrmD,KAAKiD,KAAMsjD,EAAgBC,GAErCA,EAAen0B,UAGjB,YAFAvM,EAAKuM,WAAY,GAMrBg0B,EAAcrmD,KAAKiD,KAAM7C,EAAM0lB,IAGjC49B,EAAQjiD,UAAUqkD,eAAiB,WAC7B7iD,KAAKqxC,eAILrxC,KAAK8P,SACP9P,KAAK2G,QAEL3G,KAAK+iD,SAITtC,EAAQjiD,UAAUukD,KAAO,WACnB/iD,KAAK8P,UAIL9P,KAAKqxC,cAITrxC,KAAKqB,QAAQ,QAAS,KAGxBo/C,EAAQjiD,UAAUmI,MAAQ,SAAU4oC,GAC7BvvC,KAAK8P,UAIV9P,KAAKqB,QAAQ,QAAS,CAAEmuC,cAAgBD,KAU1CkR,EAAQjiD,UAAU4yC,UAAY,WAC5B,OAAQpxC,KAAKqxC,cASfoP,EAAQjiD,UAAU6yC,WAAa,WAC7B,OAAOrxC,KAAKD,QAAQtC,IAAI,aAG1BgjD,EAAQjiD,UAAUsR,OAAS,WACzB,OAAO9P,KAAKyuC,WAAWjuC,SAAS,4BAGlCigD,EAAQjiD,UAAUglD,SAAW,WAC3B,OAAOxjD,KAAKyuC,WAAWjuC,SAAS,6BAGlCigD,EAAQjiD,UAAU4R,MAAQ,SAAUtO,GAE9B9B,KAAKwjD,aAITxjD,KAAKyuC,WAAWhuC,SAAS,4BACzBT,KAAKqB,QAAQ,QAAS,MAGxBo/C,EAAQjiD,UAAUid,OAAS,SAAUoH,GAC/B7iB,KAAKD,QAAQtC,IAAI,UAAYoB,OAAOmG,SAAWA,QAAQ2c,MACzD3c,QAAQ2c,KACN,qJAMQ,MAARkB,GAAgC,IAAhBA,EAAK9gB,SACvB8gB,EAAO,EAAC,IAGV,IAAI8qB,GAAY9qB,EAAK,GAErB7iB,KAAKuI,SAAS+b,KAAK,WAAYqpB,IAGjC8S,EAAQjiD,UAAUsD,KAAO,WACnB9B,KAAKD,QAAQtC,IAAI,UACjBokB,UAAU9f,OAAS,GAAKlD,OAAOmG,SAAWA,QAAQ2c,MACpD3c,QAAQ2c,KACN,qIAKJ,IAAI7f,EAAO,GAMX,OAJA9B,KAAKosC,YAAYkB,SAAQ,SAAUsH,GACjC9yC,EAAO8yC,KAGF9yC,GAGT2+C,EAAQjiD,UAAUokB,IAAM,SAAUC,GAQhC,GAPI7iB,KAAKD,QAAQtC,IAAI,UAAYoB,OAAOmG,SAAWA,QAAQ2c,MACzD3c,QAAQ2c,KACN,uIAKQ,MAARkB,GAAgC,IAAhBA,EAAK9gB,OACvB,OAAO/B,KAAKuI,SAASqa,MAGvB,IAAI6gC,EAAS5gC,EAAK,GAEdjkB,EAAEwiB,QAAQqiC,KACZA,EAAS7kD,EAAEoiC,IAAIyiB,GAAQ,SAAUnkC,GAC/B,OAAOA,EAAIK,eAIf3f,KAAKuI,SAASqa,IAAI6gC,GAAQpiD,QAAQ,SAASA,QAAQ,WAGrDo/C,EAAQjiD,UAAU+qB,QAAU,WAC1BvpB,KAAKyuC,WAAWja,SAEZx0B,KAAKuI,SAAS,GAAGm7C,aACnB1jD,KAAKuI,SAAS,GAAGm7C,YAAY,mBAAoB1jD,KAAK+hD,QAGlC,MAAlB/hD,KAAKuiD,WACPviD,KAAKuiD,UAAUoB,aACf3jD,KAAKuiD,UAAY,MACRviD,KAAKuI,SAAS,GAAGib,sBAC1BxjB,KAAKuI,SAAS,GACXib,oBAAoB,kBAAmBxjB,KAAK+hD,QAAQ,GACvD/hD,KAAKuI,SAAS,GACXib,oBAAoB,kBAAmBxjB,KAAKgiD,QAAQ,GACvDhiD,KAAKuI,SAAS,GACXib,oBAAoB,iBAAkBxjB,KAAKgiD,QAAQ,IAGxDhiD,KAAK+hD,OAAS,KACd/hD,KAAKgiD,OAAS,KAEdhiD,KAAKuI,SAASvH,IAAI,YAClBhB,KAAKuI,SAASxF,KAAK,WACnB6hC,EAAMoH,QAAQhsC,KAAKuI,SAAS,GAAI,iBAEhCvI,KAAKuI,SAAS7H,YAAY,6BAC1BV,KAAKuI,SAASxF,KAAK,cAAe,SAClC6hC,EAAMqH,WAAWjsC,KAAKuI,SAAS,IAC/BvI,KAAKuI,SAASq7C,WAAW,WAEzB5jD,KAAKosC,YAAY7iB,UACjBvpB,KAAKyxC,UAAUloB,UACfvpB,KAAKu3C,SAAShuB,UACdvpB,KAAKkkB,QAAQqF,UAEbvpB,KAAKosC,YAAc,KACnBpsC,KAAKyxC,UAAY,KACjBzxC,KAAKu3C,SAAW,KAChBv3C,KAAKkkB,QAAU,MAGjBu8B,EAAQjiD,UAAU6tC,OAAS,WACzB,IAAIoC,EAAa7vC,EACf,2IAcF,OARA6vC,EAAW1rC,KAAK,MAAO/C,KAAKD,QAAQtC,IAAI,QAExCuC,KAAKyuC,WAAaA,EAElBzuC,KAAKyuC,WAAWhuC,SAAS,sBAAwBT,KAAKD,QAAQtC,IAAI,UAElEmnC,EAAMmH,UAAU0C,EAAW,GAAI,UAAWzuC,KAAKuI,UAExCkmC,GAGFgS,KAGT1b,EAAGzO,OAAO,oBAAoB,CAC5B,WACC,SAAU13B,GAEX,OAAOA,KAGTmmC,EAAGzO,OAAO,iBAAiB,CACzB,SACA,oBAEA,iBACA,qBACA,oBACC,SAAU13B,EAAGqzC,EAAGwO,EAAS3b,EAAUF,GACpC,GAAoB,MAAhBhmC,EAAEwI,GAAG49B,QAAiB,CAExB,IAAI6e,EAAc,CAAC,OAAQ,QAAS,WAEpCjlD,EAAEwI,GAAG49B,QAAU,SAAUjlC,GAGvB,GAAuB,WAAnB,EAFJA,EAAUA,GAAW,IASnB,OANAC,KAAKqH,MAAK,WACR,IAAIy8C,EAAkBllD,EAAEqB,QAAO,EAAM,GAAIF,GAE1B,IAAI0gD,EAAQ7hD,EAAEoB,MAAO8jD,MAG/B9jD,KACF,GAAuB,kBAAZD,EAAsB,CACtC,IAAIkoC,EACAplB,EAAO1B,MAAM3iB,UAAUoL,MAAM7M,KAAK8kB,UAAW,GAgBjD,OAdA7hB,KAAKqH,MAAK,WACR,IAAI08C,EAAWnf,EAAMoH,QAAQhsC,KAAM,WAEnB,MAAZ+jD,GAAoBllD,OAAOmG,SAAWA,QAAQI,OAChDJ,QAAQI,MACN,gBAAmBrF,EAAnB,iEAKJkoC,EAAM8b,EAAShkD,GAAS6hB,MAAMmiC,EAAUlhC,MAItCjkB,EAAEilB,QAAQ9jB,EAAS8jD,IAAgB,EAC9B7jD,KAGFioC,EAEP,MAAM,IAAIlsB,MAAM,kCAAoChc,IAS1D,OAJ6B,MAAzBnB,EAAEwI,GAAG49B,QAAQjmC,WACfH,EAAEwI,GAAG49B,QAAQjmC,SAAW+lC,GAGnB2b,KAIA,CACLnqB,OAAQyO,EAAGzO,OACX6O,QAASJ,EAAGI,SAv6LL,GA66LLH,EAAUD,EAAGI,QAAQ,kBAQzB,OAHA59B,EAAOH,GAAG49B,QAAQC,IAAMF,EAGjBC,IAh9LC,gC,iKCTyjCpkC,EAAnkC/B,OAAOmvC,UAAUA,QAAQxvC,UAAU2yC,UAAUnD,QAAQxvC,UAAU2yC,QAAQ,SAASvwC,GAAG,IAAI9C,EAAEO,GAAG2B,KAAKlB,UAAUkB,KAAKkc,eAAehQ,iBAAiBtL,GAAGvD,EAAE2C,KAAK,GAAG,IAAIlC,EAAEO,EAAE0D,SAASjE,GAAG,GAAGO,EAAE2X,KAAKlY,KAAKT,WAAWS,EAAE,IAAIT,EAAEA,EAAE2mD,gBAAgB,OAAO3mD,IAAK,WAAW,SAASuD,EAAEA,EAAE9C,GAAGA,EAAEA,GAAG,CAACmmD,SAAQ,EAAGC,YAAW,EAAGC,YAAO,GAAQ,IAAI9lD,EAAES,SAAS61B,YAAY,eAAe,OAAOt2B,EAAE+lD,gBAAgBxjD,EAAE9C,EAAEmmD,QAAQnmD,EAAEomD,WAAWpmD,EAAEqmD,QAAQ9lD,EAAE,GAAG,mBAAmBQ,OAAOwlD,YAAY,OAAM,EAAGzjD,EAAEpC,UAAUK,OAAO+U,MAAMpV,UAAUK,OAAOwlD,YAAYzjD,EAAzR,GAAgS,WAAW,IAAI,IAAIA,EAAE,EAAE9C,EAAE,CAAC,KAAK,MAAM,SAAS,KAAKO,EAAE,EAAEA,EAAEP,EAAEiE,SAASlD,OAAO2lC,wBAAwBnmC,EAAEQ,OAAO2lC,sBAAsB3lC,OAAOf,EAAEO,GAAG,yBAAyBQ,OAAOylD,qBAAqBzlD,OAAOf,EAAEO,GAAG,yBAAyBQ,OAAOf,EAAEO,GAAG,+BAA+BQ,OAAO2lC,wBAAwB3lC,OAAO2lC,sBAAsB,SAAS1mC,EAAEO,GAAG,IAAIhB,GAAG,IAAIwjB,MAAM0jC,UAAU3nD,EAAEgP,KAAK44C,IAAI,EAAE,IAAInnD,EAAEuD,IAAIlD,EAAEmB,OAAOyD,YAAY,WAAWxE,EAAET,EAAET,KAAKA,GAAG,OAAOgE,EAAEvD,EAAET,EAAEc,IAAImB,OAAOylD,uBAAuBzlD,OAAOylD,qBAAqB,SAAS1jD,GAAGqL,aAAarL,KAA/hB,GAAkjBA,EAAmJ,oBAAoB6jD,EAAOA,EAAO,oBAAoB5lD,OAAOA,OAAOmB,UAAtK,kBAAgB,OAA4J,SAASY,GAAG,aAAa,IAAI9C,EAAE,CAAC4mD,OAAO,uBAAuBC,OAAO,KAAKC,gBAAe,EAAGC,MAAM,IAAIC,MAAK,EAAG1vC,OAAO,EAAE2vC,OAAO,iBAAiBC,aAAa,KAAKC,WAAU,EAAGC,UAAS,EAAGC,YAAW,GAAyI9nD,EAAE,WAAW,IAAI,IAAIuD,EAAE,GAAG9C,EAAE,EAAEA,EAAE+jB,UAAU9f,OAAOjE,KAAM,SAASA,GAAG,IAAI,IAAIO,KAAKP,EAAEA,EAAEW,eAAeJ,KAAKuC,EAAEvC,GAAGP,EAAEO,IAAxD,CAA8DwjB,UAAU/jB,IAAI,OAAO8C,GAA+FlD,EAAE,SAASI,GAAG,OAAOiQ,SAASnN,EAAEm6B,iBAAiBj9B,GAAGyF,OAAO,KAAKuS,EAAE,SAASlV,GAAG,IAAI9C,EAAE,IAAIA,EAAEsnD,mBAAmBxkD,GAAG,MAAMvC,GAAGP,EAAE8C,EAAE,OAAO9C,GAAG0b,EAAE,SAAS5Y,GAAG,MAAMA,EAAEkmC,OAAO,KAAKlmC,EAAEA,EAAE6qC,OAAO,IAAI,IAAI,IAAI3tC,EAAEO,EAAEgtC,OAAOzqC,GAAGvD,EAAEgB,EAAE0D,OAAOnF,GAAG,EAAEc,EAAE,GAAGoY,EAAEzX,EAAEgnD,WAAW,KAAKzoD,EAAES,GAAG,CAAC,GAAG,KAAKS,EAAEO,EAAEgnD,WAAWzoD,IAAI,MAAM,IAAI0oD,sBAAsB,iDAAuH5nD,GAAtEI,GAAG,GAAGA,GAAG,IAAI,KAAKA,GAAG,IAAIlB,GAAGkB,GAAG,IAAIA,GAAG,IAAI,IAAIlB,GAAGkB,GAAG,IAAIA,GAAG,IAAI,KAAKgY,EAAK,KAAKhY,EAAE6hB,SAAS,IAAI,IAAO7hB,GAAG,KAAK,KAAKA,GAAG,KAAKA,GAAGA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIO,EAAEyoC,OAAOlqC,GAAG,KAAKyB,EAAEyoC,OAAOlqC,GAAG,IAAI4c,EAAE,IAAIA,EAAE4rC,mBAAmB,IAAI1nD,GAAG,MAAMkD,GAAG4Y,EAAE,IAAI9b,EAAE,OAAO8b,GAAqoB7a,EAAE,WAAW,OAAOiN,KAAK44C,IAAI1lD,SAAS87B,KAAK1oB,aAAapT,SAASo6C,gBAAgBhnC,aAAapT,SAAS87B,KAAK2qB,aAAazmD,SAASo6C,gBAAgBqM,aAAazmD,SAAS87B,KAAK4qB,aAAa1mD,SAASo6C,gBAAgBsM,eAA4KxoD,EAAE,SAAS4D,GAAG,OAAOA,EAAElD,EAAEkD,GAAGA,EAAE6kD,UAAU,GAAmWC,EAAE,SAAS5nD,EAAEO,EAAEhB,EAAET,GAAG,GAAGyB,EAAE8mD,YAAY,mBAAmBvkD,EAAEyjD,YAAY,CAAC,IAAI3mD,EAAE,IAAI2mD,YAAYvmD,EAAE,CAACmmD,SAAQ,EAAGE,OAAO,CAACwB,OAAOtoD,EAAEwL,OAAOjM,KAAKkC,SAASg2B,cAAcp3B,KAAK,OAAO,SAASA,EAAEgB,GAAG,IAAIknD,EAAIC,EAAEx+B,EAAEy+B,EAAE/vC,EAAEgwC,EAAEC,EAAE,CAAGA,aAAe,SAASplD,GAAG0jD,qBAAqByB,GAAGA,EAAE,KAAKnlD,GAAG8kD,EAAE,eAAeE,IAAII,cAAgB,SAAS3nD,EAAEzB,EAAEc,GAAG,IAAIoY,EAAEzY,EAAEuoD,GAAG9nD,EAAEJ,GAAG,IAAI8b,EAAE,oBAAoBlc,OAAOkB,UAAUmhB,SAAS5iB,KAAKsB,GAAGK,EAAE8a,IAAInb,EAAEiV,QAAQ,KAAKjV,EAAE,GAAGmb,GAAG9a,EAAE,CAAC,IAAI4pB,EAAE1nB,EAAEqlD,YAAYnwC,EAAE6uC,SAASt9B,IAAIA,EAAEvoB,SAASoK,cAAc4M,EAAE6uC,SAASmB,IAAIA,EAAE9oD,EAAEqqB,IAAI,IAAIw+B,EAAE9vC,EAAEmwC,EAAEC,EAAE3sC,EAAEnb,EAArjC,SAASP,EAAEO,EAAEhB,EAAET,GAAG,IAAIc,EAAE,EAAE,GAAGI,EAAEs7B,aAAa,GAAG17B,GAAGI,EAAE2nD,UAAU3nD,EAAEA,EAAEs7B,mBAAmBt7B,GAAG,OAAOJ,EAAEkO,KAAK44C,IAAI9mD,EAAEW,EAAEhB,EAAE,GAAGT,IAAIc,EAAEkO,KAAKw6C,IAAI1oD,EAAEiB,IAAIiC,EAAEkqC,cAAcptC,EAA+5Bb,CAAE6B,EAAEonD,EAAE/3C,SAAS,mBAAmB+H,EAAEV,OAAOU,EAAEV,OAAO/W,EAAEzB,GAAGkZ,EAAEV,OAAO,IAAIU,EAAEgvC,MAAMuB,EAAEF,EAAE79B,EAAE8tB,EAAEz3C,IAAI2nD,EAAE,EAAEC,EAAE,SAASzoD,EAAET,GAAG,IAAIK,EAAEkD,EAAEqlD,YAAY,GAAGnoD,GAAGT,GAAGK,GAAGL,IAAIirB,EAAEjrB,GAAGuD,EAAEkqC,YAAYptC,IAAI04C,EAAE,OAAO4P,EAAEQ,cAAa,GAA93B,SAAS1oD,EAAEO,EAAEhB,GAAG,IAAIS,GAAGgB,SAAS87B,KAAKxqB,QAAQ/S,IAAIS,EAAEsS,QAAQtR,SAASuK,gBAAgBvL,IAAIA,EAAEguC,aAAa,WAAW,MAAMhuC,EAAEsS,QAAQtS,EAAEiwB,MAAM04B,QAAQ,QAAQ7lD,EAAE8lD,SAAS,EAAEroD,IAA2tBupC,CAAEvpC,EAAEhB,EAAEmc,GAAGksC,EAAE,aAAa5vC,EAAEzX,EAAEzB,GAAGipD,EAAE,KAAKE,EAAE,MAAK,GAA0J,IAAInlD,EAAEqlD,aAAarlD,EAAE8lD,SAAS,EAAE,GAA3xC,SAAS9lD,EAAE9C,EAAEO,GAAGP,GAAGoI,QAAQC,WAAW9H,EAAE4mD,WAAW/+C,QAAQC,UAAU,CAACwgD,aAAaC,KAAKC,UAAUxoD,GAAGsnD,OAAO/kD,EAAEqV,IAAInX,SAAS6G,MAAM/E,IAAI9B,SAASo6C,gBAAgB,OAAO,IAAIt4C,EAAEqV,IAAmnC/Y,CAAEmB,EAAEmb,EAAE1D,GAAG4vC,EAAE,cAAc5vC,EAAEzX,EAAEzB,GAAGopD,EAAEQ,cAAa,GAAI5lD,EAAE4jC,uBAA5O,SAAFsiB,EAAWhpD,GAAG+nD,IAAIA,EAAE/nD,GAAUiY,GAAPuwC,GAAGxoD,EAAE+nD,GAAM93C,SAAS+H,EAAE+uC,MAAM,IAAcqB,EAAE59B,EAAE+9B,EAAttE,SAASzlD,EAAE9C,GAAG,IAAIO,EAAE,MAAM,eAAeuC,EAAEmkD,SAAS1mD,EAAEP,EAAEA,GAAG,gBAAgB8C,EAAEmkD,SAAS1mD,EAAEP,GAAG,EAAEA,IAAI,kBAAkB8C,EAAEmkD,SAAS1mD,EAAEP,EAAE,GAAG,EAAEA,EAAEA,GAAG,EAAE,EAAEA,GAAGA,EAAE,GAAG,gBAAgB8C,EAAEmkD,SAAS1mD,EAAEP,EAAEA,EAAEA,GAAG,iBAAiB8C,EAAEmkD,SAAS1mD,IAAIP,EAAEA,EAAEA,EAAE,GAAG,mBAAmB8C,EAAEmkD,SAAS1mD,EAAEP,EAAE,GAAG,EAAEA,EAAEA,EAAEA,GAAGA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,GAAG,GAAG,gBAAgB8C,EAAEmkD,SAAS1mD,EAAEP,EAAEA,EAAEA,EAAEA,GAAG,iBAAiB8C,EAAEmkD,SAAS1mD,EAAE,KAAKP,EAAEA,EAAEA,EAAEA,GAAG,mBAAmB8C,EAAEmkD,SAAS1mD,EAAEP,EAAE,GAAG,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,EAAE,IAAIA,EAAEA,EAAEA,EAAEA,GAAG,gBAAgB8C,EAAEmkD,SAAS1mD,EAAEP,EAAEA,EAAEA,EAAEA,EAAEA,GAAG,iBAAiB8C,EAAEmkD,SAAS1mD,EAAE,IAAIP,EAAEA,EAAEA,EAAEA,EAAEA,GAAG,mBAAmB8C,EAAEmkD,SAAS1mD,EAAEP,EAAE,GAAG,GAAGA,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,EAAE,KAAKA,EAAEA,EAAEA,EAAEA,EAAEA,GAAG8C,EAAEokD,eAAe3mD,EAAEuC,EAAEokD,aAAalnD,IAAIO,GAAGP,EAA2lDb,CAAE6Y,EAAlBC,EAAEA,EAAE,EAAE,EAAEA,GAAenV,EAAE8lD,SAAS,EAAE96C,KAAKo2B,MAAMkkB,IAAIK,EAAEL,EAAEC,KAAKJ,EAAEnlD,EAAE4jC,sBAAsBsiB,GAAGjB,EAAE/nD,SAA2HooD,EAAE,SAASpoD,GAAG,MAAhmG,eAAe8C,KAAGA,EAAEsG,WAAW,4BAA4BC,UAA8iG,IAAIrJ,EAAEyL,SAASzL,EAAEi+C,UAAUj+C,EAAEg+C,SAAS,YAAYh+C,EAAEgJ,SAAS++C,EAAE/nD,EAAEgJ,OAAOqqC,QAAQzzC,KAAK,MAAMmoD,EAAEvyC,QAAQ6X,gBAAgBrtB,EAAEgJ,OAAOqqC,QAAQyU,EAAElB,SAASmB,EAAEkB,WAAWnmD,EAAEsE,SAAS6hD,UAAUlB,EAAEmB,WAAWpmD,EAAEsE,SAAS8hD,UAAU,IAAIt9C,KAAKm8C,EAAE/iD,MAAM,CAAC,IAAIzE,EAAEmb,EAAE1D,EAAE+vC,EAAEnoB,OAAOrgC,EAAEuoD,EAAEhB,gBAAgB,MAAMvmD,EAAES,SAASo6C,gBAAgBp6C,SAASoK,cAAc7K,IAAGhB,EAAEA,GAAG,SAASgB,EAAEhB,EAAEyB,SAASo6C,mBAAoBp7C,EAAE+C,iBAAiBmlD,EAAEiB,cAAc5pD,EAAEwoD,MAAMM,EAAE,SAASvlD,GAAG,GAAG,OAAOsF,QAAQ2pB,OAAO3pB,QAAQ2pB,MAAM82B,cAAczgD,QAAQ2pB,MAAM82B,eAAeC,KAAKC,UAAUjB,IAAI1/C,QAAQ2pB,MAAM81B,OAAO,CAAC,IAAI7nD,EAAEgB,SAASoK,cAAcsQ,EAAE1D,EAAE5P,QAAQ2pB,MAAM81B,UAAU7nD,GAAGkoD,EAAEiB,cAAcnpD,EAAE,KAAK,CAACmnD,WAAU,MAAOoB,EAAE,SAASzlD,GAAGmV,IAAIA,EAAEzT,YAAY,WAAWyT,EAAE,KAAK+vC,EAAE9oD,EAAEqqB,KAAK,MAAM,OAAO2+B,EAAEz8B,QAAQ,WAAWq8B,IAAI9mD,SAAS0kB,oBAAoB,QAAQ0iC,GAAE,GAAItlD,EAAE4iB,oBAAoB,SAAS6iC,GAAE,GAAIzlD,EAAE4iB,oBAAoB,WAAW2iC,GAAE,GAAIH,EAAEQ,eAAeZ,EAAE,KAAYC,EAAE,KAAKx+B,EAAE,KAAKy+B,EAAE,KAAK/vC,EAAE,KAAKgwC,EAAE,OAAOC,EAAE5lD,KAAK,SAASxD,GAAG,KAA/zI,kBAAkBkC,UAAU,qBAAqB8B,GAAG,0BAA0BA,GAAG,YAAYA,EAAEotC,QAAQxvC,WAAguI,KAAK,iGAAiGwnD,EAAEz8B,UAAUq8B,EAAEvoD,EAAES,EAAElB,GAAG,IAAIyqB,EAAEu+B,EAAEjB,OAAO7lD,SAASoK,cAAc08C,EAAEjB,QAAQ,KAAKmB,EAAE9oD,EAAEqqB,GAAGvoB,SAASwkB,iBAAiB,QAAQ4iC,GAAE,GAAI7+B,GAAGzmB,EAAE0iB,iBAAiB,SAAS+iC,GAAE,GAAIT,EAAEX,WAAWW,EAAEV,UAAUtkD,EAAE0iB,iBAAiB,WAAW6iC,GAAE,IAAKH,EAAE5lD,KAAK1B,GAAGsnD,GAApgKloD,CAAE8C,IAAzB,QAAC,OAAD,e,meCDpnC,IAAIglD,EAGJA,EAAK,WACJ,OAAO5lD,KADH,GAIL,IAEC4lD,EAAIA,GAAK,IAAIsB,SAAS,cAAb,GACR,MAAOtmD,GAEc,YAAlB,qBAAO/B,OAAP,cAAOA,WAAqB+mD,EAAI/mD,QAOrClC,EAAOD,QAAUkpD,G,kFCnBjB,SAASuB,EAAoB7hB,GAC5B,IAAI1kC,EAAI,IAAImb,MAAM,uBAAyBupB,EAAM,KAEjD,MADA1kC,EAAEK,KAAO,mBACHL,EAEPumD,EAAoBhlC,KAAO,WAAa,MAAO,IAC/CglC,EAAoBC,QAAUD,EAC9BxqD,EAAOD,QAAUyqD,EACjBA,EAAoBlxC,GAAK,qE,qDCRzB,IAAI+qB,EAAM,CACT,WAAY,mBACZ,eAAgB,uBAChB,eAAgB,uBAChB,eAAgB,wBAIjB,SAASqmB,EAAe/hB,GACvB,IAAIrvB,EAAKqxC,EAAsBhiB,GAC/B,OAAO9oC,EAAoByZ,GAE5B,SAASqxC,EAAsBhiB,GAC9B,IAAI9oC,EAAoBa,EAAE2jC,EAAKsE,GAAM,CACpC,IAAI1kC,EAAI,IAAImb,MAAM,uBAAyBupB,EAAM,KAEjD,MADA1kC,EAAEK,KAAO,mBACHL,EAEP,OAAOogC,EAAIsE,GAEZ+hB,EAAellC,KAAO,WACrB,OAAO7kB,OAAO6kB,KAAK6e,IAEpBqmB,EAAeD,QAAUE,EACzB3qD,EAAOD,QAAU2qD,EACjBA,EAAepxC,GAAK,sC,gDCzBpB,OAAe,2B,oDCAf,OAAe,+B,oDCAf,OAAe,+B,oDCAf,OAAe,iC,6ECAf,SAASsxC,EAAM7+C,GACb,GAAkB,oBAAP9E,GAAX,CAOA,IAHA,IAAItC,EAAKoH,EAAM8+C,YAAc9+C,EAAM5B,OAIjCxF,IACsB,oBAAdA,EAAGgS,SACmB,KAA5BhS,EAAGgS,QAAQ6X,gBACV7pB,EAAGwB,OAENxB,EAAKA,EAAG2P,WAGV,GAAI3P,GAAMA,EAAGwB,KAAM,CAEjB,IAAIP,EAAOjB,EAAGwB,KACd,IAAoC,GAAhCP,EAAKsD,QAAQX,SAASuiD,QAAgBllD,EAAKW,MAAM,iBAAkB,CAGrE,IAII4D,KACFxF,EAAGwF,QAAWxF,EAAGwF,OAAO5D,MAAM,2BAC1B5B,EAAGwF,OAGTlD,GACE,OACA,QACA,iBACArB,EACAzD,SAASoG,SAAS8hD,SAAWloD,SAASoG,SAASwiD,OAC/C,CAAEC,YAfU,SAASplD,EAAMuE,GAC3BA,EAASjI,OAAOkkD,KAAKxgD,EAAMuE,GAAWjI,OAAOqG,SAASpC,KAAOP,EAc9CqlD,CAAQrlD,EAAMuE,KAI/B4B,EAAM7H,eAAiB6H,EAAM7H,iBAAoB6H,EAAMm/C,aAAc,KAM3E,IAAIhC,EAAIhnD,OACRgnD,EAAEviC,iBACEuiC,EAAEviC,iBACF,QACA,WACExkB,SAAS87B,KAAKtX,iBAAiB,QAASikC,GAAO,MAEjD,GAEA1B,EAAE3D,aACF2D,EAAE3D,YAAY,UAAU,WACtBpjD,SAAS87B,KAAKsnB,YAAY,UAAWqF,O,o0CC3D3C,IA2MeO,EA3MH,CACV1nD,KAAM,WAsMJ,OAtMU,a,mOAAA,GAC0B2nD,OAAOC,KAAKC,aADtC,I,MAAA,OAER,WAAYloD,GAAS,O,4FAAA,SAEnB,IAAMmoD,EAAK,EADX,gBADmB,OAInBA,EAAGC,OAAOpoD,EAAQihC,KAClBknB,EAAG7jD,SAAWtE,EAAQsE,SACtB6jD,EAAGllD,KAAOjD,EAAQiD,KACdjD,EAAQiD,KACR,uFACJklD,EAAGE,SAAWroD,EAAQqoD,SACtBF,EAAGG,MAAQtoD,EAAQsoD,MACnBH,EAAGI,YAAcvoD,EAAQ0+C,MACzByJ,EAAGK,QAAUxoD,EAAQwoD,QACrBL,EAAGM,YAAczoD,EAAQyoD,YAEzBN,EAAGO,UAAY,SAACvnC,GACd,MAAmB,mBAARA,GAObgnC,EAAGQ,eAAiB,SAACxnC,GACnB,MAAmB,qBAARA,GAObgnC,EAAGS,WAAa,SAACznC,GACf,OAAIA,EAAInf,OAAS,GAOnBmmD,EAAGU,SAAW,SAAC1nC,GACb,MAAmB,kBAARA,GAObgnC,EAAGzwB,WAAa,SAACvW,GACf,MAAmB,oBAARA,GAhDM,EAFb,O,EAAA,G,EAAA,+BA0DN,IAAMgnC,EAAKloD,KAGXkoD,EAAG3vC,IAAMzZ,SAAS2hB,cAAc,OAChCynC,EAAG3vC,IAAIwV,MAAM1pB,SAAW,WAGpB6jD,EAAGQ,eAAeR,EAAGE,WAAaF,EAAGS,WAAWT,EAAGE,YACrDF,EAAG3vC,IAAIo0B,UAAYub,EAAGE,UAItBF,EAAGQ,eAAeR,EAAGllD,OACrBklD,EAAGS,WAAWT,EAAGllD,OACjBklD,EAAGU,SAASV,EAAGllD,QAEfklD,EAAG3vC,IAAIm3B,UAAYwY,EAAGllD,MAGpBklD,EAAGO,UAAUP,EAAGI,cAAgBJ,EAAGI,cACrCJ,EAAG3vC,IAAIo0B,UAAY,aACnBub,EAAG3vC,IAAIm3B,UACL,sTAEFwY,EAAG3vC,IAAIuzB,aACL,QACA,oIAWJoc,EAAGW,WAAWC,mBAAmBC,YAAYb,EAAG3vC,KAGhDwvC,OAAOC,KAAKt/C,MAAMsgD,eAAed,EAAG3vC,IAAK,SAAS,SAAC7P,GACjDq/C,OAAOC,KAAKt/C,MAAMrH,QAAQ6mD,EAAI,SAC1BA,EAAGzwB,WAAWywB,EAAGK,UAAUL,EAAGK,UAClC7/C,EAAM5H,qBAGRinD,OAAOC,KAAKt/C,MAAMsgD,eAAed,EAAG3vC,IAAK,aAAa,SAAC7P,GACrDq/C,OAAOC,KAAKt/C,MAAMrH,QAAQ6mD,EAAI,aAC1BA,EAAGzwB,WAAWywB,EAAGM,cAAcN,EAAGM,cACtC9/C,EAAM5H,uBA3GF,6BAgHN,IAAMonD,EAAKloD,KACPipD,EAAOrqD,EAAEspD,EAAG3vC,KAAK3W,KACnB,uDAEGqnD,EAAKlnD,SACRknD,EAAOrqD,EAAEspD,EAAG3vC,MAId,IAAM2wC,EAAmBhB,EACtBiB,gBACAC,qBAAqB,IAAIrB,OAAOC,KAAKqB,OAAOnB,EAAG7jD,WAG5C+Q,EAAS,CACbiS,OAAGhH,EACH8G,OAAG9G,GAECipC,EAAWL,EAAKhO,aAChBsO,EAAYN,EAAK7kD,cAEvB,OAAQ+c,MAAMC,QAAQ8mC,EAAGG,OAASH,EAAGG,MAAMn5B,KAAK,KAAO,IACrD,IAAK,WACH9Z,EAAOiS,EAAIkiC,EACXn0C,EAAO+R,EAAImiC,EACX,MACF,IAAK,cACHl0C,EAAOiS,EAAIkiC,EAAY,EACvBn0C,EAAO+R,EAAImiC,EACX,MACF,IAAK,cACHl0C,EAAOiS,EAAI,EACXjS,EAAO+R,EAAImiC,EACX,MACF,IAAK,aACHl0C,EAAOiS,EAAIkiC,EACXn0C,EAAO+R,EAAImiC,EAAW,EACtB,MACF,IAAK,gBACHl0C,EAAOiS,EAAIkiC,EAAY,EACvBn0C,EAAO+R,EAAImiC,EAAW,EACtB,MACF,IAAK,gBACHl0C,EAAOiS,EAAI,EACXjS,EAAO+R,EAAImiC,EAAW,EACtB,MACF,IAAK,YACHl0C,EAAOiS,EAAIkiC,EACXn0C,EAAO+R,EAAI,EACX,MACF,IAAK,eACH/R,EAAOiS,EAAIkiC,EAAY,EACvBn0C,EAAO+R,EAAI,EACX,MACF,IAAK,eACH/R,EAAOiS,EAAI,EACXjS,EAAO+R,EAAI,EACX,MACF,QACE/R,EAAOiS,EAAIkiC,EAAY,EACvBn0C,EAAO+R,EAAImiC,EAAW,EAK1BpB,EAAG3vC,IAAIwV,MAAMzpB,IAAb,UAAsB4kD,EAAiB7hC,EAAIjS,EAAOiS,EAAlD,MACA6gC,EAAG3vC,IAAIwV,MAAM0O,KAAb,UAAuBysB,EAAiB/hC,EAAI/R,EAAO+R,EAAnD,QAlLM,oCAuLN,OADWnnB,KACDqE,WAvLJ,+BA4LN,OADWrE,KACDuY,MA5LJ,kCA+LIlU,EAAUgkD,GACTroD,KACRqE,SAAWA,EADHrE,KAERqoD,MAAQA,EAFAroD,KAGRwpD,Y,2BAnMG,O,sKCKd,ICCMC,EAAS,CACbC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,QAC5CC,WDHwB,SAAC/qD,GA4QzB,OA5Q+B,yB,4FAAA,S,UAAA,O,EAAA,G,EAAA,iCAG3B,MAAO,qBAHoB,2BAMxB2C,GAAkB,IAAbiH,EAAa,uDAAJ,GACX0/C,EAAKloD,KACL4pD,EAAI/qD,OAEVqpD,EAAG3mD,IAAMA,EACT2mD,EAAG1/C,OAASA,EACZ0/C,EAAG2B,QAAU,GAEbD,EAAE,OAAD,OAAQ1B,EAAG4B,YAAe,WACzB5B,EAAG6B,mBAGLnrD,EAAE,QAAQyE,OAAV,+EAEImF,EAAM,IAFV,yBAGmB0/C,EAAG4B,UAHtB,mBAlB2B,wCA0B3B,IAAM5B,EAAKloD,KAELuB,EAAM2mD,EAAG3mD,IACTiH,EAAS0/C,EAAG1/C,OACZwhD,EAAUzoD,EAAIK,KAAK,eAEnB6B,EAAO+E,EAAM,QAAcA,EAAM,QAAc,GAC/Cge,EAAShe,EAAM,OACjB,CACAyhD,IAAKzhD,EAAM,OAAW,GACtB0hD,IAAK1hD,EAAM,OAAW,IAEtB,CACAyhD,IAAK,EACLC,IAAK,GAEHn8B,EAAQvlB,EAAM,MAAYA,EAAM,MAAY,KAElDxD,QAAQC,IAAR,UAAeijD,EAAG4B,UAAlB,oBAEA5B,EAAGiC,SAAWA,EAAS/pD,KAAKxB,GAE5BspD,EAAGlnB,IAAM,IAAI+mB,OAAOC,KAAKoC,IAAIJ,EAAQ,GAAI,CACvCvmD,OACA+iB,SACA6jC,mBAAmB,EACnB9vB,OAAQxM,IAGVm6B,EAAGoC,aAAe7mD,EAElBumD,EAAQvpD,SAAS,gBAEjBynD,EAAGqC,MAAQ,IAAIrC,EAAGiC,SAAS,CACzBnpB,IAAKknB,EAAGlnB,IACRqnB,MAAO,CAAC,SAAU,OAClBD,SAAU,2DACVplD,KACE,uMAMJklD,EAAGsC,SAAW,IAAIzC,OAAOC,KAAKyC,SAE9BlpD,EAAIF,QAAQqpD,IAAOC,gBAxEQ,gCA2EnBC,EAAMpiD,GACd,IAAM0/C,EAAKloD,KAEL6qD,EAAM,CACVZ,IAAKW,EAAK,GACVV,IAAKU,EAAK,IAGNE,EAAS,IAAI5C,EAAGiC,SAAS,CAC7B9lD,SAAUwmD,EACV7pB,IAAKknB,EAAGlnB,IACRqnB,MAAO,CAAC,SAAU,OAClBrlD,KAAM,+CAAF,OAAiDwF,EAAM,GAAvD,sBAA2EA,EAAM,GAAjF,4BAA2GA,EAAM,KAAjH,gBACJ+/C,QAAS,WACP,IAAMhnD,EAAM3C,EAAE,UAAD,OAAW4J,EAAM,KAC9B0/C,EAAG6C,UAAUF,EAAKriD,EAAM,SAExBjH,EAAIF,QAAQqpD,IAAOM,mBAMvB,OAFA9C,EAAG2B,QAAQzlC,KAAK0mC,GAETA,IAlGoB,gCAqGnBD,EAAKrpD,GACb,IAAM0mD,EAAKloD,KACLirD,EAASrsD,EAAEspD,EAAGqC,MAAMW,UAEtBhD,EAAG1/C,OAAH,cACF0/C,EAAGlnB,IAAImqB,UAAUN,GACZ3C,EAAG1/C,OAAH,QACH0/C,EAAGlnB,IAAIoqB,QAAQ,KAKnBH,EAAO3nD,IAAI,CACT+nD,QAAS,MAEXJ,EAAOvqD,YAAY,UAEnBuqD,EAAOrpD,KAAK,iCAAiCoB,KAAKxB,GAElDypD,EAAOrpD,KAAK,gCAAgCjB,GAAG,SAAS,SAACC,GACvDA,EAAEC,iBACFqnD,EAAGoD,eAILpD,EAAGqC,MAAMgB,YAAYV,EAAK,CAAC,SAAU,QAGrCI,EAAO3nD,IAAI,CACT,aAAc,QACd+nD,QAAS,QAnIgB,kCAwI3B,IAAMnD,EAAKloD,KACIpB,EAAEspD,EAAGqC,MAAMW,UAEnBzqD,SAAS,UACXynD,EAAG1/C,OAAH,kBAAgC0/C,EAAG1/C,OAAH,aACnC0/C,EAAGsD,gBAGLtD,EAAG3mD,IAAIF,QAAQqpD,IAAOe,iBAhJK,8BAmJrBC,EAAM75C,GACZ,IAAMq2C,EAAKloD,KAEXkoD,EAAGsC,SAASmB,QACV,CACEC,QAASF,IAEX,SAACxnC,EAAS1e,GACR,GAAe,OAAXA,EAOF,MAJwB,oBAAbqM,GACTA,EAASqS,GAGJA,EAEPlf,QAAQI,MAAR,UACK8iD,EAAG4B,UADR,kEAC2EtkD,SArKtD,qCA4KdqmD,EAAQh6C,GACrB,IAAMq2C,EAAKloD,KAEXkoD,EAAGsC,SAASmB,QACV,CACEzmD,SAAU4mD,SAEZ,SAAC5nC,EAAS1e,GACR,GAAe,OAAXA,EAOF,MAJwB,oBAAbqM,GACTA,EAASqS,GAGJA,EAEPlf,QAAQI,MAAR,UACK8iD,EAAG4B,UADR,4EACqFtkD,SA9LhE,iCAqMlBgD,GACT,IAAM0/C,EAAKloD,KAIL+rD,GAFcvjD,EAAM,QAAYwjD,SAAS,GAAGC,SAASC,YAE5C,IAAInE,OAAOC,KAAKmE,cAG/B3jD,EAAM,QAAYwjD,SAAS1qC,SAAQ,SAACwpC,GAClC,IAAM70C,EAAK60C,EAAO70C,GACZ20C,EAAOE,EAAOmB,SAASC,YACvB1qD,EAAUspD,EAAOvoC,WAAW/gB,QAElC0mD,EAAGkE,UAAUxB,EAAM,CACjB30C,KACAzU,UACA6qD,KAAMvB,EAAOuB,KACbC,YAAa9jD,EAAM,cAGrBujD,EAAO9rD,OAAO,CACZgqD,IAAKW,EAAK,GACVV,IAAKU,EAAK,QAIV1C,EAAG2B,QAAQ9nD,OAAS,EACtBmmD,EAAGlnB,IAAIurB,UAAUR,EAAQ,CACvB/4C,QAAS,KAEFk1C,EAAG2B,QAAQ,IACpB3B,EAAGlnB,IAAImqB,UAAUjD,EAAG2B,QAAQ,GAAG2C,eAGjCtE,EAAGuE,eAAiBV,EACpB7D,EAAGoC,aAAepC,EAAGlnB,IAAI0rB,YAxOE,+BA6O3B,OADW1sD,KACDghC,MA7OiB,iCAkP3B,OADWhhC,KACDuqD,QAlPiB,sCAsP3B,IAAMrC,EAAKloD,KAEPkoD,EAAGuE,gBAAkBvE,EAAG2B,QAAQ9nD,OAAS,EAC3CmmD,EAAGlnB,IAAIurB,UAAUrE,EAAGuE,eAAgB,CAClCz5C,QAAS,MAGPk1C,EAAG2B,QAAQ,IACb3B,EAAGlnB,IAAImqB,UAAUjD,EAAG2B,QAAQ,GAAG2C,eAGjCtE,EAAGyE,iBAjQsB,oCAsQhB3sD,KAERghC,IAAIoqB,QAFIprD,KAEOsqD,mB,2BAxQS,KAAP,CA6QvB1rD,MCvQY6qD,O,oCCRf9sD,EAAOD,QAAU,CACfkwD,KAAM,YACNC,UAAW,aACXC,WAAY,cACZC,QAAS,UACTC,OAAQ,SACRC,OAAQ,OACRC,UAAW,oBACXC,WAAY,sBACZC,eAAgB,iBAChBC,aAAc,gBACdC,cAAe,aACfC,eAAgB,uBAChBC,gBAAiB,qBACjBC,UAAW,aACX9C,aAAc,iBACdK,eAAgB,mBAChBS,cAAe,kBACfiC,OAAQ,SACRC,OAAQ,SACRC,eAAgB,oBAChBC,kBAAmB,oBACnBC,cAAe,gBACfC,iBAAkB,cAClBC,kBAAmB,oBACnBC,mBAAoB,qBACpBC,yBAA0B,2BAC1BC,kBAAmB,oBACnBC,uBAAwB,yBACxBC,sBAAuB,gBACvBC,wBAAyB,kBACzBC,uBAAwB,iBACxBC,YAAa,0B,oxCC3BE,SAAC5vD,GAEhB,IAAMgrD,EAAI/qD,OAKJ2I,GAJI1I,SACIF,EAAE,QACFA,EAAE,QAEH,aAGP6vD,EAVgB,WAYpB,WAAYntD,I,4FAAI,SACd,IAAM4mD,EAAKloD,KACLuB,EAAM3C,EAAE0C,GACd4mD,EAAG3mD,IAAMA,EAGT,IAAImtD,EAAUntD,EAAI+4C,QAAQ,wBAC1BoU,EAAUA,GAAWA,EAAQ3sD,OAAS2sD,EAAQrsD,QAAU,KAExD6lD,EAAGwG,QAAUA,EAGb,IAAI7nD,EAAUtF,EAAIO,KAAK,UAQvB,KANA+E,GADAA,EAAUA,GAAWA,EAAQ9E,OAAS8E,EAAU,QAG5C6nD,EACEA,EAAQ9sD,KAAK,kBACb,SAEWiF,EAAQ9E,OAGvB,OAFAiD,QAAQ2c,KAAR,UAAgBna,EAAhB,+BACAxC,QAAQ2c,KAAKpgB,GAIf2mD,EAAGrhD,QAAUA,EAEb,IAAM8nD,EAAUD,GAAoBntD,EACpC2mD,EAAGyG,QAAUA,EAGb/vD,EAAE,4BAA4B+B,GAAG,eAAe,SAACC,GAC/CsnD,EAAGlmD,UAGA4nD,EAAEx+B,SACLujC,EAAQx3B,YAAY,CAClBL,YAAa,GACb7sB,SAAU,GACV0tB,KAAM,WACJuwB,EAAGjmD,QAELy1B,IAAK,WACHwwB,EAAGlmD,UAKTT,EAAIZ,GAAG,eAAe,SAACC,KAElBW,EAAIO,KAAK,gBACT8nD,EAAEgF,gBAAkBrtD,EAAIO,KAAK,uBAE9BlB,EAAEC,iBAGAqnD,EAAG2G,UACL3G,EAAGlmD,OAEHkmD,EAAGjmD,UAIPV,EAAIO,KAAK0F,EAAM0gD,GACfyG,EAAQluD,SAAR,UAAoB+G,EAApB,Y,UA7EkB,O,EAAA,E,EAAA,0CAwHlB,OAAOxH,KAAKqH,MAAK,WAEf,IAAM9F,EAAM3C,EAAEoB,MACV8B,EAAOP,EAAIO,KAnHJ0F,aAqHN1F,IACHA,EAAO,IAAI2sD,EAAQzuD,MACnBuB,EAAIO,KAvHK0F,YAuHU1F,W,EA/HL,iCAiFlB,OAAO9B,KAAK6G,QAAQrG,SAAS,UAjFX,6BAqFPR,KACRuB,IACA+4C,QAAQ,aACRwU,IAAI,WACJznD,MAAK,SAACzK,EAAG0E,GACR,IAAMC,EAAM3C,EAAE0C,GACdC,EAAIK,KAAK,aAAalB,YAAY,QAClCa,EAAId,SAAS,WAPNT,KAUR6G,QAAQpG,SAAS,UA/FF,6BAmGlB,IACMc,EADKvB,KACI6G,QACftF,EAAIb,YAAY,QAChBa,EAAIK,KAAK,kBAAkBlB,YAAY,QACvCa,EAAI0G,OAAO,aAAavH,YAAY,UAvGlB,gCA2GlB,IAAMwnD,EAAKloD,KACLuB,EAAM2mD,EAAG3mD,IAEf2mD,EAAGyG,QAAQjuD,YAAX,UAA0B8G,EAA1B,YACA5I,EAAEglD,WAAWriD,EAvGAiG,aAyGb0gD,EAAG3mD,IAAM,KACT2mD,EAAGwG,QAAU,KACbxG,EAAGrhD,QAAU,KACbqhD,EAAGyG,QAAU,U,2BApHK,KAsItB/vD,EAAEwI,GAAGI,GAAQinD,EAAQnmD,iBACrB1J,EAAEwI,GAAGI,GAAMunD,YAAcN,EACzB7vD,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACNgnD,EAAQnmD,kBAIjB1J,EAAE,yBAAyBqwD,OAAM,WAC/BrwD,EAAE,yBAAyBswD,eAI7BtwD,EAAE,4BAA4B+B,GAAG,eAAe,SAACC,GAC/CA,EAAEC,iBAEF,IACM6tD,EADM9vD,EAAEgC,EAAEuuD,eACIlnD,OAAO,aAG3BymD,EACGzmD,SACArG,KAAK,6BACLlB,YAAY,QAEXguD,EAAQluD,SAAS,SACnBkuD,EAAQhuD,YAAY,QACpBguD,EAAQ9sD,KAAK,kBAAkBlB,YAAY,UAE3CguD,EAAQjuD,SAAS,QACjBiuD,EAAQ9sD,KAAK,kBAAkBnB,SAAS,YApK7B,CAyKd7B,K,uKC3KiB,SAACA,GAEnB,IAEMwwD,EAJmB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,4BAOXv9C,GACVjT,EAAE,KAAD,OANQ,aAMR,mBAA4ByI,MAAK,SAACzK,EAAGgE,GACpCiR,EAASjV,EAAGgC,EAAEgC,SATK,6BAcrBZ,KAAK8H,UAEL9H,KAAKqH,MAAK,SAACzK,EAAGgE,GACZ,IAAMg3C,EAAKh5C,EAAEgC,GACXqV,EAAK,WAAH,OAAcrZ,GAElBg7C,EAAG70C,KAAK,KAAMkT,GACd2hC,EAAG91C,KAAK,KAAMlF,GAEd,IACEq0B,EADaryB,EAAEgC,GAAGgB,KAAK,kBACRG,OACjB,GAAKkvB,EAAL,CAKA,GAAI2mB,EAAG91C,KAAK,cAAe,CACzB,IAAMutD,EAAczwD,EAAE,yCACtBywD,EAAYhsD,OAAZ,4BACuB4S,EADvB,6CAGA,IAAK,IAAIrZ,EAAI,EAAGA,EAAIq0B,EAAOr0B,IACzByyD,EAAYhsD,OAAZ,4BACuB4S,EADvB,4BAC6CrZ,EAD7C,YAIFg7C,EAAG9J,QAAQuhB,GAITzX,EAAG91C,KAAK,YACV81C,EAAG9J,QAAH,yDACoD73B,EADpD,gIAGA2hC,EAAG9J,QAAH,yDACoD73B,EADpD,8HAMF2hC,EAAG0X,WAEH,IAAMC,EAAiB3X,EAAGh2C,KACxB,iDAGFg2C,EAAGj3C,GAAG,qBAAqB,WACrB4uD,EAAextD,QACjBwtD,EAAeloD,MAAK,SAACzK,EAAGgE,GACtB,IAAMg3C,EAAKh5C,EAAEgC,GACb,IACEg3C,EAAG91C,KACD,SACA,IAAI0tD,GAAGC,OAAO7uD,EAAG,CACf6zB,OAAQ,CACNi7B,QAAS,WACP9X,EAAG91C,KAAK,UAAU6tD,kBAM1B/X,EAAG91C,KAAK,UAAU6tD,aAClB,MAAO/uD,WAKfg3C,EAAGh2C,KAAK,0BAA0BjB,GAAG,SAAS,SAACC,GAC7CA,EAAEC,iBACF+2C,EAAG0X,SAAS,WAGd1X,EAAGh2C,KAAK,0BAA0BjB,GAAG,SAAS,SAACC,GAC7CA,EAAEC,iBACF+2C,EAAG0X,SAAS,WAId1X,EAAGphB,SAASp4B,KAAKssD,IAAOwC,WAAW,SAACtsD,GAClChC,EAAE8J,MAAM5B,QAAQwoD,SAAS,WAG3B1X,EAAGphB,SAASp4B,KAAKssD,IAAOyC,YAAY,SAACvsD,GACnChC,EAAE8J,MAAM5B,QAAQwoD,SAAS,WAO3B1X,EAAGn3C,SAAH,YAvGO,aAuGP,YACAm3C,EAAGv2C,QAAQqpD,IAAOkD,sBA1GC,gCA+GrB5tD,KAAKqH,MAAK,SAACzK,EAAGgE,GACZhC,EAAEgC,GAAG0uD,SAAS,kB,EAhHK,O,2BAAA,KAqHzB1wD,EAAEC,QAAQ8B,GAAV,UAAgB+pD,IAAO4C,gBAAiB,WACtC8B,EAAWhvD,UAtHK,CA0HjBxB,K,uKC/HkB,SAACA,GAEpB,IAAM4I,EAAO,gBAGPooD,EALoB,WAOxB,WAAYjwD,I,4FAAS,SACnBK,KAAKiJ,SAAWtJ,EAChB,IAAM4I,EAAW3J,EAAEoB,KAAKiJ,UACxBV,EAAS9H,SAAT,UAAqB+G,EAArB,YAGA5I,EAAEC,QAAQ8B,GAAG,SAAS,SAACC,GACL,KAAZA,EAAEO,OACJoH,EAAS3G,KAAK,qCAAqCiuD,W,UAfjC,O,EAAA,E,EAAA,0CA8BtB,OAAO7vD,KAAKqH,MAAK,WAEf,IAAMkB,EAAW3J,EAAEoB,MACf8B,EAAOyG,EAASzG,KA9BT0F,iBAgCN1F,IACHA,EAAO,IAAI8tD,EAAY5vD,MACvBuI,EAASzG,KAlCA0F,gBAkCe1F,W,EArCN,iCAsBtBkD,QAAQC,IAAR,qBAA0BuC,EAA1B,cAEA5I,EAAEoB,KAAKiJ,UAAUvI,YAAjB,UAAgC8G,EAAhC,YACA5I,EAAEglD,WAAW5jD,KAAKiJ,SAtBLzB,iBAuBbxH,KAAKiJ,SAAW,U,2BA1BM,KA4C1BrK,EAAEwI,GAAGI,GAAQooD,EAAYtnD,iBACzB1J,EAAEwI,GAAGI,GAAMunD,YAAca,EACzBhxD,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACNmoD,EAAYtnD,kBAIrB1J,EAAE,OAAD,OAAQ4I,IAAQynD,OAAM,WACrBrwD,EAAE,OAAD,OAAQ4I,IAAQsoD,oBArDA,CAyDlBlxD,K,2zBCzDH,IA8BemxD,EA9BG,SAACnxD,GACjB,IAAMoxD,EAAIlxD,SACAD,OAyBV,OA3BuB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,2BAKV1B,GACT,OAAO6yD,EAAEC,OAAO1yC,MAAM,MAAM2yC,QAAO,SAACxyD,EAAG4qB,GACrC,IAAMof,EAAQpf,EAAE/K,MAAM,KACtB,OAAOmqB,EAAM,KAAOvqC,EAAOioD,mBAAmB1d,EAAM,IAAMhqC,IACzD,MATgB,0BAYVP,EAAMU,GAA6B,IAAtBsyD,EAAsB,uDAAf,EAAG/b,EAAY,uDAAL,IACjCgc,EAAU,IAAIvvC,KAAKA,KAAKD,MAAe,MAAPuvC,GAAcE,cACpDL,EAAEC,OAAF,UACK9yD,EADL,YAGImzD,mBAAmBzyD,GAHvB,qBAKIuyD,EALJ,kBAOIhc,O,EArBe,O,2BAAA,KAAP,CA4Bfx1C,G,uKCvBe,SAACA,GACjB,IAAMgrD,EAAI/qD,OAIJ2I,GAHI1I,SACIF,EAAE,QAEH,YACP2xD,EAAS,GAAH,OAAM/oD,EAAN,SAGNgpD,EATiB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,8BAWnB,IAAMtI,EAAKloD,KAIX,GAFAkoD,EAAGuI,OAAS7xD,EAAE,WAAD,OAAY4I,KAEpB0gD,EAAGuI,OAAO1uD,OACb,OAAO,EAGT,IAAM2uD,EAASxI,EAAGuI,OAAO7uD,KAAV,kBAA0B4F,EAA1B,YACf0gD,EAAGuI,OAAO3uD,KAAK0F,EAAM0gD,GAEjBwI,EAAO3uD,QACT2uD,EAAO/vD,GAAG,SAAS,WACjBunD,EAAGlmD,UAIP,IAAMA,EAAO+tD,EAAStyD,IAAI8yD,GAErBG,EAAO3uD,QAAWC,GAAiB,SAATA,GAC7BM,YAAW,WACT4lD,EAAGjmD,SAzBK,OAPO,2BAsCT4P,GACC7R,KAERywD,OAAOhwD,SAAV,iBAA6B+G,EAA7B,eAzCmB,2BA4CTqK,GAGVk+C,EAASvhC,IAAI+hC,EAAQ,OAAQ,GAFlBvwD,KAGRywD,OAAO/vD,YAAV,iBAAgC8G,EAAhC,iB,EAhDmB,O,2BAAA,KAoDvB5I,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,KAAlB,YAA0BlC,IAAOuC,SAAU,WACzCuD,EAASpwD,UAGXwpD,EAAE4G,SAAWA,EAxDG,CA2Df5xD,K,oQC5DH,IAMUmL,EAGA4mD,EATJC,GAMI7mD,EAAY,iBAGZ4mD,EAAW,CAMfE,WAAY,EAMZC,cAAe,EAMfC,mBAAmB,EAMnBC,qBAAsB,wBAMtBC,YAAa,aAMbC,cAAc,EAMdhW,UAAU,GAnDa,WAsEvB,WAAYiW,GAAsB,WAAbpxD,EAAa,uDAAH,GAK7B,GALgC,UAChCC,KAAKD,QAAU6wD,EAAc3wD,OAAO0wD,EAAU5wD,GAG9CC,KAAKmxD,QAAW,kBAAoBA,EAAYryD,SAASoK,cAAcioD,GAAWA,EAC9E,qBAAuBnxD,KAAKmxD,QAC9B,MAAM,IAAIp1C,MAAM,yCAElB/b,KAAKoxD,cAAe,EACpBpxD,KAAK4X,UAAY5X,KAAKmxD,QAAQnN,cAG9BhkD,KAAKqxD,YAAc,SACnBrxD,KAAKyL,UAAY,OACjBzL,KAAKsxD,QAAU,CACbvvB,WAAa,EACbwvB,aAAa,GAGfvxD,KAAKwxD,cAAe,EACpBxxD,KAAKyxD,UAAW,EAChBzxD,KAAK0xD,aAAc,EACnB1xD,KAAK2xD,iBAAmB,GAGxB3xD,KAAK4xD,WAAa,CAChBC,WAAY,EACZhB,WAAY,EACZiB,eAAgB,EAChBhB,cAAe,EACfiB,kBAAmB,EACnBC,cAAe,EACfC,aAAc,EACdC,aAAc,EACdC,gBAAiB,EACjBC,eAAgB,EAChBC,YAAa,EACbC,gBAAiB,GAInB,CAAC,eAAehxC,SAAS,SAAC1c,GACxB,EAAKA,GAAU,EAAKA,GAAQxG,KAAK,MAInC4B,KAAKuyD,a,UApHgB,O,EAAA,E,EAAA,wCA2jBChB,GACtB,IAAIr2B,GAAS,EACT38B,EAAYgzD,EAAe,cAAgB,YAC3CiB,EAAQj0D,EAASuoC,OAAO,GAAGtiB,cAAgBjmB,EAASqL,MAAM,GAG1DmkB,EADUjvB,SAAS2hB,cAAc,WACjBsN,MAQpB,OANCxvB,EAAW,IAJG,CAAC,SAAU,MAAO,IAAK,MAIX2wB,KAAKsjC,EAAQ,KAAOA,GAAOj1C,MAAM,KAAK+D,SAAQ,SAAS/iB,EAAU3B,GAC1F,QAAwByjB,IAApB0N,EAAMxvB,GAER,OADA28B,EAAS38B,GACF,KAGJ28B,IAzkBc,mCAmlBHv7B,EAAS8yD,EAAW3wD,GACtC,IACE,IAAI4G,EAAQ,IAAI27C,YAAYoO,EAAW,CAACtO,OAAQriD,IAChD,MAAMlB,IACF8H,EAAQ5J,SAAS61B,YAAY,gBAC3ByvB,gBAAgBqO,GAAW,GAAM,EAAM3wD,GAE/CnC,EAAQm1B,cAAcpsB,KA1lBD,6BAkmBT3J,EAAUgB,GACtB,IAAImkB,EAAU,GACd,IAAK,IAAI/lB,KAAOY,EACV,qBAAuBgB,EAAQ5B,GAAO+lB,EAAQ/lB,GAAO4B,EAAQ5B,GAC5D+lB,EAAQ/lB,GAAOY,EAASZ,GAE/B,OAAO+lB,IAxmBc,qCA+mBDvkB,GACpB,IAAIu7B,EAAS,CAACuB,KAAM,EAAGn4B,IAAK,GAE5B,EAAE,CACA,IAAImhD,EAAY9lD,EAAQ8lD,UACpBiN,EAAa/yD,EAAQ+yD,WAEnB5yB,MAAM2lB,KACVvqB,EAAO52B,KAAOmhD,GAEV3lB,MAAM4yB,KACVx3B,EAAOuB,MAAQi2B,GAEjB/yD,EAAY,SAAWA,EAAQ2T,QACnB3T,EAAQqkD,cAAgBrkD,EAAQy5B,mBACtCz5B,GACR,OAAOu7B,IA/nBc,+BAwoBPv7B,EAASgtC,GACjBikB,EAAcpwD,SAASb,EAASgtC,KAChChtC,EAAQwJ,UACVxJ,EAAQwJ,UAAU+qB,IAAIyY,GAEtBhtC,EAAQgtC,WAAa,IAAMA,KA7oBV,kCAupBJhtC,EAASgtC,GACtBikB,EAAcpwD,SAASb,EAASgtC,KAC9BhtC,EAAQwJ,UACVxJ,EAAQwJ,UAAUqrB,OAAOmY,GAEzBhtC,EAAQgtC,UAAYhtC,EAAQgtC,UAAU7mC,QAAQ,IAAI0N,OAAO,UAAYm5B,EAAUpvB,MAAM,KAAK2R,KAAK,KAAO,UAAW,MAAO,QA5pBvG,+BAsqBPvvB,EAASgtC,GACvB,OAAIhtC,EAAQwJ,UACHxJ,EAAQwJ,UAAUC,SAASujC,GAE3B,IAAIn5B,OAAO,QAAUm5B,EAAY,QAAS,MAAMjjC,KAAK/J,EAAQgtC,e,EA1qBjD,oCA4HX,WAWV,GAVA3sC,KAAK2yD,sBAGD3yD,KAAKD,QAAQixD,uBACfhxD,KAAKoxD,aAAepxD,KAAKmxD,QAAQjoD,cAAclJ,KAAKD,QAAQixD,sBAExD,OAAShxD,KAAKoxD,eAChBpxD,KAAKoxD,cAAe,KAGlBpxD,KAAKoxD,aAAc,CACvB,IAAIja,EAAUr4C,SAAS2hB,cAAc,OAIrC,IAHA02B,EAAQrL,aAAa,QAAS,wBAC9B9rC,KAAKmxD,QAAQpI,YAAY5R,GAElBn3C,KAAKmxD,QAAQyB,YAAczb,GAChCA,EAAQ4R,YAAY/oD,KAAKmxD,QAAQyB,YAEnC5yD,KAAKoxD,aAAepxD,KAAKmxD,QAAQjoD,cAAc,yBAIjD,GAAIlJ,KAAKD,QAAQgxD,kBAAmB,CAClC,IAAI8B,EAAa/zD,SAASoN,iBAAiBlM,KAAKD,QAAQgxD,mBAQxD,IAPA8B,EAAa1xC,MAAM3iB,UAAUoL,MAAM7M,KAAK81D,IAE7BvxC,SAAQ,SAAC1J,EAAW5B,GACvB4B,EAAUxO,SAAS,EAAK+nD,WAC9B,EAAKv5C,UAAYA,OAGbi7C,EAAW9wD,OACf,MAAM,IAAIga,MAAM,mDAIhB,oBAAsB/b,KAAKD,QAAQ8wD,aACrC7wD,KAAKD,QAAQ8wD,WAAa9iD,SAAS/N,KAAKD,QAAQ8wD,aAAe,GAE7D,oBAAsB7wD,KAAKD,QAAQ+wD,gBACrC9wD,KAAKD,QAAQ+wD,cAAgB/iD,SAAS/N,KAAKD,QAAQ+wD,gBAAkB,GAGvE9wD,KAAK8yD,mBAGL9yD,KAAK+yD,iBAGL/yD,KAAKgzD,iBAGLhzD,KAAKizD,aAGLjzD,KAAKwxD,cAAe,IApLC,mCA4LrB3yD,OAAOykB,iBAAiB,SAAUtjB,KAAM,CAACs/B,SAAS,EAAM4zB,SAAS,IACjEr0D,OAAOykB,iBAAiB,SAAUtjB,KAAM,CAACs/B,SAAS,EAAM4zB,SAAS,IAEjElzD,KAAKmxD,QAAQ7tC,iBAAiB,SAAWvZ,EAAW/J,MAEhDA,KAAKD,QAAQmxD,cAAgB,qBAAuBiC,eACtD,IAAIA,aAAanzD,KAAKoxD,aAAcpxD,KAAKozD,aACzC,IAAID,aAAanzD,KAAK4X,UAAW5X,KAAKozD,gBAnMnB,kCA2MX1qD,GACV1I,KAAKqzD,aAAa3qD,KA5MG,uCAoNrB,IAAI1I,KAAK0xD,YAAT,CACA,IAAI4B,EAAOtzD,KAAK4xD,WAGhB0B,EAAKpB,aAAkBtB,EAAc2C,eAAevzD,KAAK4X,WAAWtT,IACpEgvD,EAAKnB,gBAAkBnyD,KAAK4X,UAAU4tC,aACtC8N,EAAKE,gBAAkBF,EAAKpB,aAAeoB,EAAKnB,gBAGhDmB,EAAKtB,cAAgBhyD,KAAKoxD,aAAa7L,aACvC+N,EAAKrB,aAAgBjyD,KAAKmxD,QAAQsC,YAGlCH,EAAKlB,eAAiBvzD,OAAOisC,YAE7B9qC,KAAK0zD,+BAnOgB,kDA2OrB,IAAIJ,EAAOtzD,KAAK4xD,WAEhB0B,EAAKK,YAAc/C,EAAc2C,eAAevzD,KAAKmxD,SAAS10B,KAE9D62B,EAAKjB,YAAiBvzD,SAASo6C,gBAAgB5iC,WAAaxX,SAAS87B,KAAKtkB,UAC1Eg9C,EAAKM,eAAiBN,EAAKjB,YAAciB,EAAKlB,eAC9CkB,EAAKO,aAAiB/0D,SAASo6C,gBAAgB9e,YAAct7B,SAAS87B,KAAKR,WAE3Ek5B,EAAKzC,WAAgB7wD,KAAKD,QAAQ8wD,WAClCyC,EAAKxC,cAAgB9wD,KAAKD,QAAQ+wD,cAE9B,oBAAsBwC,EAAKzC,aAC3ByC,EAAKzC,WAAa9iD,SAASulD,EAAKzC,WAAW7wD,KAAKmxD,WAAa,GAE7D,oBAAsBmC,EAAKxC,gBAC3BwC,EAAKxC,cAAgB/iD,SAASulD,EAAKxC,cAAc9wD,KAAKmxD,WAAa,GAEnE,iBAAmBnxD,KAAKqxD,YAEtBiC,EAAKzC,WAAayC,EAAKxB,iBACzBwB,EAAKzB,YAAcyB,EAAKxB,eAAiBwB,EAAKzC,WAC9C7wD,KAAKyxD,UAAW,GAGT,oBAAsBzxD,KAAKqxD,aAEhCiC,EAAKxC,cAAgBwC,EAAKvB,oBAC5BuB,EAAKzB,YAAcyB,EAAKvB,kBAAoBuB,EAAKxC,cACjD9wD,KAAKyxD,UAAW,GAIpB6B,EAAKxB,eAAoBwB,EAAKzC,WAC9ByC,EAAKvB,kBAAoBuB,EAAKxC,gBA5QT,8CAqRrB,OAAO9wD,KAAK4xD,WAAWI,cAAgBhyD,KAAK4xD,WAAWQ,iBArRlC,yCA4RrB,IAAIkB,EAAOtzD,KAAK4xD,WAChB,GAAI0B,EAAKhB,kBAAoBgB,EAAKjB,YAAlC,CAEA,IAAIyB,EAAW,SAAW9zD,KAAKyL,UAAYG,KAAKw6C,IAAMx6C,KAAK44C,IAGvD8O,EAAKjB,cAAgByB,EAASR,EAAKjB,YAAaiB,EAAKhB,mBACvDtyD,KAAKyL,UAAY,SAAWzL,KAAKyL,UAAa,KAAO,WAnSlC,qCA8SrB,IAAI6nD,EAAOtzD,KAAK4xD,WAAYmC,GAAY,EAExC/zD,KAAK0zD,4BAEL,IAAIM,EAAgBV,EAAKtB,cAAgBsB,EAAKpB,aAC1C+B,EAAcX,EAAKjB,YAAciB,EAAKzC,WACtCqD,EAAiBZ,EAAKM,eAAiBN,EAAKxC,cAkDhD,MA/CI,OAAS9wD,KAAKyL,UACZwoD,GAAeX,EAAKpB,cACtBoB,EAAKzB,WAAa,EAClBkC,EAAY,UAEHE,GAAeX,EAAKzB,WAAayB,EAAKpB,cAC/CoB,EAAKzB,WAAaoC,EAAcX,EAAKpB,aACrC6B,EAAY,iBAED/zD,KAAKm0D,yBAA2Bb,EAAKpB,cAAgB+B,IAChEF,EAAY,qBAKV/zD,KAAKm0D,wBAEHb,EAAKtB,cAAgBiC,GAAeX,EAAKE,iBAC3CF,EAAKzB,WAAayB,EAAKE,gBAAkBQ,EACzCD,EAAY,oBAEHE,GAAeX,EAAKpB,eAC7BoB,EAAKzB,WAAaoC,EAAcX,EAAKpB,aACrC6B,EAAY,gBAKVT,EAAKE,iBAAmBU,GAC1BZ,EAAKzB,WAAayB,EAAKE,gBAAkBQ,EACzCD,EAAY,oBAEHC,EAAgBV,EAAKzB,YAAcqC,GAC5CZ,EAAKzB,WAAaqC,EAAiBF,EACnCD,EAAY,mBAEHT,EAAKpB,aAAeoB,EAAKzB,YAAcoC,IAChDF,EAAY,qBAMlBT,EAAKzB,WAAajmD,KAAK44C,IAAI,EAAG8O,EAAKzB,YACnCyB,EAAKzB,WAAajmD,KAAKw6C,IAAIkN,EAAKnB,gBAAiBmB,EAAKzB,YAEtDyB,EAAKhB,gBAAkBgB,EAAKjB,YACrB0B,IAtWc,gCAgXbA,GACR,GAAI,qBAAuBA,EAA3B,CAEA,IAAIhmC,EAAQ,CAACqmC,MAAO,GAAIC,MAAO,IAC3Bf,EAAOtzD,KAAK4xD,WAEhB,OAAQmC,GACN,IAAK,eACHhmC,EAAMqmC,MAAQ,CAAC/vD,SAAU,QAASC,IAAKgvD,EAAKzC,WACtCp0B,KAAM62B,EAAKK,YAAcL,EAAKO,aAAcz4B,MAAOk4B,EAAKrB,cAC9D,MACF,IAAK,kBACHlkC,EAAMqmC,MAAQ,CAAC/vD,SAAU,QAASC,IAAK,OAAQm4B,KAAM62B,EAAKK,YACpD12B,OAAQq2B,EAAKxC,cAAe11B,MAAOk4B,EAAKrB,cAC9C,MACF,IAAK,mBACL,IAAK,oBACH,IAAIqC,EAAYt0D,KAAKu0D,cAAc,EAAGjB,EAAKzB,WAAa,MAGtD9jC,EAAMqmC,MADJE,EACY,CAACvyB,UAAWuyB,GAEZ,CAACjwD,SAAU,WAAYC,IAAKgvD,EAAKzB,WAAYz2B,MAAOk4B,EAAKrB,cAI7E,OAAQ8B,GACN,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,mBACHhmC,EAAMsmC,MAAQ,CAAC9wD,OAAQ+vD,EAAKtB,cAAe3tD,SAAU,YAQzD,OAJA0pB,EAAMsmC,MAAQzD,EAAc3wD,OAAO,CAACsD,OAAQ,GAAIc,SAAU,IAAK0pB,EAAMsmC,OACrEtmC,EAAMqmC,MAAQxD,EAAc3wD,OAAO,CAACoE,SAAU,WAAYC,IAAK,GAAIm4B,KAAM,GACrEQ,OAAQ,GAAI7B,MAAO,GAAK2G,UAAW/hC,KAAKu0D,iBAAkBxmC,EAAMqmC,OAE7DrmC,KAvZc,qCAiaRqG,GACb,IAAIp0B,KAAK0xD,YAAT,CAEAt9B,EAAQp0B,KAAKyxD,UAAYr9B,IAAS,EAElBp0B,KAAKD,QAAQ8wD,WACV7wD,KAAKD,QAAQ+wD,cADhC,IAGIiD,EAAY/zD,KAAKw0D,eACjBzmC,EAAQ/tB,KAAKy0D,UAAUV,GAE3B,IAAK/zD,KAAKqxD,aAAe0C,GAAa3/B,IAAU2/B,EAAW,CACzD,IAAIW,EAAa,SAAWX,EAAU5oC,cAAcrlB,QAAQ,YAAa,IAAMiE,EAQ/E,IAAK,IAAI5L,KAPTyyD,EAAc+D,aAAa30D,KAAKmxD,QAASuD,GAErC,WAAaX,EACfnD,EAAclwD,YAAYV,KAAKmxD,QAASnxD,KAAKD,QAAQkxD,aAErDL,EAAcnwD,SAAST,KAAKmxD,QAASnxD,KAAKD,QAAQkxD,aAEpCljC,EAAMsmC,MACatmC,EAAMsmC,MAAMl2D,GAC7C6B,KAAKmxD,QAAQpjC,MAAM5vB,GAAO4vB,EAAMsmC,MAAMl2D,GAGxC,IAAK,IAAIA,KAAO4vB,EAAMqmC,MAAO,CAC3B,IAAIQ,EAAS,kBAAoB7mC,EAAMqmC,MAAMj2D,GAAQ,KAAO,GAC5D6B,KAAKoxD,aAAarjC,MAAM5vB,GAAO4vB,EAAMqmC,MAAMj2D,GAAOy2D,EAGpD,IAAIC,EAAe,WAAYd,EAAU5oC,cAAcrlB,QAAQ,YAAa,IAAMiE,EAClF6mD,EAAc+D,aAAa30D,KAAKmxD,QAAS0D,QAErC70D,KAAKwxD,eAAexxD,KAAKoxD,aAAarjC,MAAM0O,KAAO1O,EAAMqmC,MAAM33B,MAGrEz8B,KAAKqxD,YAAc0C,KArcE,yCA8cjBl1D,OAAOksC,YAAc/qC,KAAKD,QAAQm7C,UACpCl7C,KAAK0xD,aAAc,EACnB1xD,KAAKqxD,YAAc,SAEnBrxD,KAAKmxD,QAAQjlB,gBAAgB,SAC7B0kB,EAAclwD,YAAYV,KAAKmxD,QAASnxD,KAAKD,QAAQkxD,aACrDjxD,KAAKoxD,aAAallB,gBAAgB,UAElClsC,KAAK0xD,aAAc,IAtdA,qCA+dC,IAIpB/rC,EAJoB,OAAXjd,EAAW,uDAAH,GACf1I,KAAK80D,WACT90D,KAAK80D,UAAW,EAEdnvC,EAuBCjd,EAAM2a,KArBPmhB,uBAAsB,WACpB,OAAQ7e,GAGN,IAAK,SACH,EAAK+tC,4BACL,EAAKqB,mBACL,EAAK/B,iBACL,MAIF,IAAK,SACL,QACE,EAAKF,mBACL,EAAKC,iBACL,EAAKC,gBAAe,GAGxB,EAAK8B,UAAW,QAxfC,4CAkgBrB,IAAIxD,EAAUtxD,KAAKsxD,QAEnBA,EAAQvvB,UAAY6uB,EAAcoE,mBAClC1D,EAAQC,YAAcX,EAAcoE,kBAAiB,KArgBhC,sCAghBW,IAApB3tC,EAAoB,uDAAhB,EAAGF,EAAa,uDAAT,EAAG8tC,EAAM,uDAAF,EAC9B,OAAIj1D,KAAKsxD,QAAQC,YAAqB,eAAiBlqC,EAAG,KAAMF,EAAG,KAAM8tC,EAAG,MACnEj1D,KAAKsxD,QAAQgD,WAAmB,aAAcjtC,EAAG,KAAMF,EAAG,MAlhB9C,gCA2hBrBtoB,OAAO2kB,oBAAoB,SAAUxjB,KAAM,CAACk1D,SAAS,IACrDr2D,OAAO2kB,oBAAoB,SAAUxjB,KAAM,CAACk1D,SAAS,IAErDl1D,KAAKmxD,QAAQhoD,UAAUqrB,OAAOx0B,KAAKD,QAAQkxD,aAC3CjxD,KAAKmxD,QAAQpjC,MAAMonC,UAAY,GAE/Bn1D,KAAKmxD,QAAQ3tC,oBAAoB,SAAWzZ,EAAW/J,MAEvD,IAAIo1D,EAAa,CAAChB,MAAO,GAAIC,MAAO,IAKpC,IAAK,IAAIl2D,KAHTi3D,EAAWhB,MAAQ,CAAC/vD,SAAU,GAAIC,IAAK,GAAIm4B,KAAM,GAAIQ,OAAQ,GAAI7B,MAAO,GAAK2G,UAAW,IACxFqzB,EAAWf,MAAQ,CAAC9wD,OAAQ,GAAIc,SAAU,IAE1B+wD,EAAWf,MACzBr0D,KAAKmxD,QAAQpjC,MAAM5vB,GAAOi3D,EAAWf,MAAMl2D,GAE7C,IAAK,IAAIA,KAAOi3D,EAAWhB,MACzBp0D,KAAKoxD,aAAarjC,MAAM5vB,GAAOi3D,EAAWhB,MAAMj2D,GAE9C6B,KAAKD,QAAQmxD,cAAgB,qBAAuBiC,eACtDA,aAAarZ,OAAO95C,KAAKoxD,aAAcpxD,KAAKozD,aAC5CD,aAAarZ,OAAO95C,KAAK4X,UAAW5X,KAAKozD,mB,2BAhjBtB,MAirBZxC,I,sKAIf/xD,OAAO+xD,cAAgBA,GCtrBN,SAAChyD,GACRE,SAAV,IACM8qD,EAAI/qD,OACJw2D,EAAQz2D,EAAE,aACV4I,EAAO,YACP8tD,EAAY,KAAH,OAAQ9tD,GAEjB+tD,EAPkB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,8BAYpB,GAHWv1D,KACR8H,UAEElJ,EAAE,IAAD,OAAK02D,IAAavzD,OAAxB,CAIAiD,QAAQC,IAAR,wBAA6BuC,IAE7B,IAAMguD,EAAS,IAAI5E,EAAJ,WAAsB0E,GAAa,CAChDtE,qBAAsB,IAAF,OAAMsE,EAAN,aAGtBD,EAAM10D,GAAN,UAAY+pD,IAAOgD,OAAnB,YAA6BhD,IAAOiD,SAAU,SAAC/sD,GAC7C40D,EAAOnC,aAAazyD,SAvBF,gCA4BpBoE,QAAQC,IAAR,sBAA2BuC,Q,EA5BP,O,2BAAA,KAgCxB5I,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAO4C,gBAAiB,WACjCiI,EAAUn1D,UAGZwpD,EAAE2L,UAAY,IAAIA,EApCD,CAuChB32D,GAvCH,I,iMCHA,IAce62D,EAdI,SAAC72D,GAWlB,OAXwB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,4BAEViT,GACVjT,EAAE,gBAAgBqD,KAAK,EAAG4P,KAHN,2BAMVA,GACVjT,EAAE,gBAAgBoD,KAAK,OAAQ6P,O,EAPX,O,2BAAA,KAAP,CAYhBjT,K,8YCRH,IA+Pe82D,EA/PC,SAAC92D,GAEf,IAAM+2D,EAAI92D,OACJmxD,EAAIlxD,SACJ82D,EAAQh3D,EAAE,QACVy2D,EAAQz2D,EAAE,QAEV4I,EAAO,WAGPkuD,EAVe,WAYnB,WAAY/1D,I,4FAAS,SACnBK,KAAKiJ,SAAWtJ,EAChB,IAAM4I,EAAW3J,EAAEoB,KAAKiJ,UACxBV,EAAS9H,SAAT,UAAqB+G,EAArB,YAEAe,EAASnK,KAAK,SAAS,SAASwC,GAC9BA,EAAEC,iBAEF,IAAMR,EAAQzB,EAAEoB,MAEhBpB,EAAE,SAASyI,MAAK,WACd,IAAMhH,EAAQzB,EAAEoB,MAChBK,EAAMK,YAAY,UAClBL,EAAMi6C,QAAQ,aAAa55C,YAAY,aAGzCL,EAAMI,SAAS,WAEfi1D,EAAOttB,KAAK/nC,EAAM0C,KAAK,SAAS,WAC9B1C,EAAMK,YAAY,WAClBL,EAAMi6C,QAAQ,aAAa75C,SAAS,UACpCJ,EAAMI,SAAS,gB,UAjCF,O,EAAA,E,EAAA,4BAuCPiE,EAAKmN,GAEfgkD,EAAQ5zD,MAAK,WACXozD,EAAM30D,YAAY,aAIpBi1D,EAAEG,OAAOC,eAAerxD,GAExB,IAAMsxD,EAAmBL,EAAEM,WAAF,KAAuBN,EAAEM,WAAF,SAAyB/xD,UAAU,GAC/E8xD,IAAqBL,EAAEzwD,SAASpC,MAClC6yD,EAAEzvD,QAAQC,UAAU,CAClB5B,MAAM,EACN6B,KAAM4vD,GACLl3D,SAAS6G,MAAOqwD,GAGrBp3D,EAAE2F,KAAK,CACLC,MAAM,EACNC,OAAO,EACPC,MACAC,SAAU,OACVC,OAAQ,MACRC,OAAO,EACPO,MAPK,SAOCC,GACJL,QAAQ2c,KAAR,gCAAsCtc,EAAMC,aAC5CqwD,EAAEzwD,SAASpC,KAAO4B,EAGE,oBAATixD,EAAE/xD,IACX+xD,EAAE/xD,GAAG,OAAQ,QAAS,QAAS,aAAcyB,EAAMC,aAGvDC,QAhBK,SAgBGzD,EAAM0D,EAAQH,GACpBqwD,EAAO1jC,QAAQlwB,EAAMuD,EAAOwM,GAGR,oBAAT8jD,EAAE/xD,KACX+xD,EAAE/xD,GAAG,MAAO,CACVwC,KAAMuvD,EAAEM,WAAF,SAA2BN,EAAEM,WAAF,KACjCtwD,MAAON,EAAMO,kBAAkB,aAEjC+vD,EAAE/xD,GAAG,OAAQ,kBAjFF,8BAuFJ9B,EAAMuD,EAAOwM,GAAU,WAC9BvO,EAAM+B,EAAMO,kBAAkB,iBAAiB2X,MAAM,MAAQ,GAC7D24C,EAAK7wD,EAAMO,kBAAkB,gBAAgB2X,MAAM,MAAQ,GAGjE,GAA6B,WAAzB,EAAOzb,EAAKq0D,SACd,IAAK,IAAMh4D,KAAO2D,EAAKq0D,QACa,kBAAvBr0D,EAAKq0D,QAAQh4D,IACtBu3D,EAAOU,cAAct0D,EAAKq0D,QAAQh4D,GAAMA,GAM9CS,EAAE,yBAAyByI,MAAK,WAC9B,IAAMzK,EAAI0G,EAAIuC,QAAQjH,EAAEoB,MAAM+C,KAAK,SAC/BnG,GAAK,EACP0G,EAAIioB,OAAO3uB,EAAG,GACJy4D,EAAMvzD,KAAK,oBACrBkD,QAAQC,IAAR,qBAA4BrG,EAAEoB,MAAM+C,KAAK,UACzCnE,EAAEoB,MAAMw0B,aAIZ51B,EAAE,kCAAkCyI,MAAK,WACvC,IAAMzK,EAAIs5D,EAAGrwD,QAAQjH,EAAEoB,MAAM+C,KAAK,QAC9BnG,GAAK,EACPs5D,EAAG3qC,OAAO3uB,EAAG,GACHy4D,EAAMvzD,KAAK,oBACrBkD,QAAQC,IAAR,qBAA4BrG,EAAEoB,MAAM+C,KAAK,SACzCnE,EAAEoB,MAAMw0B,aAKZx0B,KAAKq2D,QAAQ/yD,GAAKgD,MAAK,WACrB,IAAMgwD,EAAQ13D,EAAE,QAChB0E,EAAIge,SAAQ,SAAChgB,GACXg1D,EAAMjzD,OAAN,uDAA6D/B,EAA7D,YAIF,EAAK+0D,QAAQH,EAAI,UAAU5vD,MAAK,WAS9B,GAPA4vD,EAAG50C,SAAQ,SAAChgB,GACV+zD,EAAMhyD,OAAN,8DAAoE/B,EAApE,oBAGF0D,QAAQC,IAAI,uBAGgB,WAAxB,EAAOnD,EAAK2yB,QACd,IAAK,IAAMg+B,KAAa3wD,EAAK2yB,OAC3B71B,EAAEoxD,GAAG3uD,QAAQoxD,EAAW,CAAC3wD,EAAK2yB,OAAOg+B,KAIjB,qBAAb5gD,GACTA,IAGFjT,EAAE+2D,GAAGt0D,QAAQqpD,IAAOkC,cApJP,8BAyJJ2J,GAA0D,IAAnDlzC,EAAmD,uDAA5C,OAAQxe,IAAoC,yDAAtB2xD,EAAsB,wDACvE,IAAKD,EAAMx0D,OACT,OAAOnD,EAAE63D,WAAWrP,UAAUsP,UAGhC,IAAMC,EAAO,GAmBb,OAlBAJ,EAAMj1C,SAAQ,SAAC5c,EAAK9H,GAClB,IAAMg6D,EAAMh4D,EAAE63D,WAEd73D,EAAE2F,KAAK,CACLI,SAAU0e,EACVxe,QACAH,QACCmyD,QAAO,WACRD,EAAIxP,UACAoP,GACFA,EAAa55D,EAAG8H,MAIpBiyD,EAAKvyC,KAAKwyC,MAILh4D,EAAEk4D,KAAF,MAAAl4D,EAAU+3D,KAjLA,oCAoLE3zD,EAAM7E,GACzB,IAAM44D,EAAUn4D,EAAE,sBAAD,OAAuBT,EAAvB,OAEb44D,EAAQh1D,OACVg1D,EAAQ/vD,QAAQ3D,OAAOL,GAEvBgC,QAAQ2c,KAAK,0CA1LE,yCAuMjB,OAAO3hB,KAAKqH,MAAK,WAEf,IAAMkB,EAAW3J,EAAEoB,MACf8B,EAAOyG,EAASzG,KAlMT0F,YAoMN1F,IACHA,EAAO,IAAI4zD,EAAO11D,MAClBuI,EAASzG,KAtMA0F,WAsMe1F,W,EA9MX,iCA+LAlD,EAAEoB,KAAKiJ,UAEfvI,YAAT,UAAwB8G,EAAxB,YACA5I,EAAEglD,WAAW5jD,KAAKiJ,SA1LLzB,YA2LbxH,KAAKiJ,SAAW,U,2BAnMC,KA4PrB,OAvCArK,EAAEwI,GAAGI,GAAQkuD,EAAOptD,iBACpB1J,EAAEwI,GAAGI,GAAMunD,YAAc2G,EACzB92D,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACNiuD,EAAOptD,kBAIhB1J,EAAE,SAASqwD,OAAM,WACfrwD,EAAE,SAASo4D,cAIbp4D,EAAEoxD,GAAGrvD,GAAG,iBAAiB,SAACC,EAAGkB,GAC3BkuD,EAAErqD,MAAQ7D,EAAKm1D,MAEfrB,EAAM7yD,KAAK,QAAS,IAChBjB,EAAKo1D,WACPtB,EAAMn1D,SAASqB,EAAKo1D,cAMxBvB,EAAEwB,WAAa,SAASzuD,GACtB,IAAM0uD,EAAgBx4D,EAAE,YAAD,OAAeoxD,EAAE9qD,SAAjB,OAEH,OAAhBwD,EAAMmnB,OAAkBnnB,EAAMmnB,MAAMtrB,MACtCS,QAAQC,IAAI,uBACZywD,EAAOttB,KAAK1/B,EAAMmnB,MAAMzpB,OACfgxD,EAAcr1D,QAAUq1D,EAAc52D,SAAS,SACxDwE,QAAQC,IAAI,sBACZmyD,EAAc/1D,QAAQ,WAEtB2D,QAAQC,IAAI,iBACZ0wD,EAAEzwD,SAASpC,KAAOktD,EAAE9qD,WAIjBwwD,EA5PO,CA6Pb92D,K,0QChQH,IAiKey4D,EAjKM,SAACz4D,GAEpB,IAAM4I,EAAO,gBACPsC,EAAWtC,EACXouD,EAAQh3D,EAAE,cAEVy4D,EANoB,WAQxB,WAAY/1D,I,4FAAI,SACd,IAAM4mD,EAAKloD,KA8BX,OA5BAkoD,EAAG3mD,IAAM3C,EAAE0C,GACX4mD,EAAGoP,OAAQ,EAEXpP,EAAG3mD,IAAIO,KAAKgI,EAAUo+C,GAGtBA,EAAGqP,KAAO,CACR,IAAOrP,EAAG3mD,IAAIqhB,MACd,QAAWslC,EAAG3mD,IAAIozC,GAAG,aAIvBuT,EAAG3mD,IAAI+4C,QAAQ,cAAcwU,IAAI,UAAUpuD,YAAY,YACvDwnD,EAAGsP,UAAYtP,EAAG3mD,IAAI+4C,QAAQ,mBAAmBwU,IAAI,cAAczsD,QAC/D6lD,EAAGsP,UAAUz1D,SACfmmD,EAAG3mD,IAAIb,YAAY,YAEnBwnD,EAAGsP,UAAU72D,GAAG,oBAAoB,SAACC,GACnCsnD,EAAGjmD,UAGLimD,EAAGsP,UAAU72D,GAAG,sBAAsB,SAACC,GACrCsnD,EAAGlmD,WAIPkmD,EAAG3mD,IAAId,SAAP,UAAmB+G,EAAnB,YAEO0gD,E,UAvCe,O,EAAA,E,EAAA,0CAyItB,OAAOloD,KAAKqH,MAAK,WAEf,IAAM9F,EAAM3C,EAAEoB,MACV8B,EAAOP,EAAIO,KAAKgI,GAEfhI,IACHA,EAAO,IAAIu1D,EAAYr3D,MACvBuB,EAAIO,KAAKgI,EAAUhI,W,EAhJD,iCA4CtB,IACMP,EADKvB,KACIuB,IAEfA,EAAIb,YAAJ,UAAmB8G,EAAnB,YACA5I,EAAEglD,WAAWriD,EAAI,GAAIuI,KAhDC,6BAoDtB,IACMvI,EADKvB,KACIuB,IADJvB,KAGRy3D,UAHQz3D,KAIRs3D,OAAQ,EAUX/1D,EAAIF,QAAJ,gBAAuBmG,MAlED,6BAsEtB,IACMjG,EADKvB,KACIuB,IADJvB,KAGR03D,OAHQ13D,KAIRs3D,OAAQ,EAWX/1D,EAAIF,QAAJ,iBAAwBmG,MArFF,6BAyFtB,IACMjG,EADKvB,KACIuB,IADJvB,KAGRu3D,KAAO,CACR,KAAQh2D,EAAIwB,KAAK,QACjB,IAAOxB,EAAIqhB,MACX,QAAWrhB,EAAIozC,GAAG,aAGpBpzC,EAAIqhB,IAAI,IACRrhB,EAAI+iB,KAAK,WAAW,KAnGE,gCAuGtB,IACM/iB,EADKvB,KACIuB,IACTo2D,EAFK33D,KAEQu3D,KAAH,QAEhBh2D,EAAIqhB,IAJO5iB,KAIAu3D,KAAH,KACRh2D,EAAI+iB,KAAK,UAAWqzC,KA5GE,iCA+GbC,GAAmC,IAA9Bv0C,EAA8B,uDAAvB,KAAMqjC,IAAiB,yDACtCwB,EAAKloD,KACL63D,EAAS3P,EAAG3mD,IAAI4vC,QAAQ,UAQ9B,GALA0mB,EAAOp3D,SAAS,eACZm3D,GACFC,EAAOx0D,OAAP,oCAA6CggB,EAA7C,aAA0Du0C,EAA1D,WAGElR,EAAU,CACZ,IAAMmE,EAAMgN,EAAOziD,SAAS9Q,IAC5BuzD,EAAOznD,QACPwlD,EAAMt/C,UAAUu0C,EAAM,QA5HF,uCAiItB,IACMgN,EADK73D,KACOuB,IAAI4vC,QAAQ,UAE9B0mB,EAAOn3D,YAAY,eACnBm3D,EAAOj2D,KAAK,YAAY4yB,c,2BArIF,KA8J1B,OAPA51B,EAAEwI,GAAGI,GAAQ6vD,EAAY/uD,iBACzB1J,EAAEwI,GAAGI,GAAMunD,YAAcsI,EACzBz4D,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACN4vD,EAAY/uD,kBAGd+uD,EA9JY,CA+JlBz4D,K,uKCrJiB,SAACA,GAEnB,IAAM4I,EAAO,eAGPoiD,GADQhrD,EAAE,cACNC,QAGJi5D,GAFIh5D,SANe,WASvB,WAAYwC,I,4FAAI,SACd,IACMC,EAAM3C,EAAE0C,GADHtB,KAGR+3D,IAAMz2D,EACTC,EAAIO,KAXS0F,eAWMxH,MAInB,IAAMg4D,EAAUz2D,EAAIK,KAAK8oD,IAAO8D,aAEhCwJ,EAAQ3wD,MAAK,SAACzK,EAAG0E,GAEf,IAAI+1D,EAAY/1D,MAGlB,IAAM22D,EAAgB12D,EAAIK,KAAK,0BACzBs2D,EAAgB32D,EAAIK,KAAK,uBAE/Bq2D,EAAc5wD,MAAK,SAACzK,EAAG0E,GACrB1C,EAAE0C,GAAI0jC,aAGRgzB,EAAQ3wD,MAAK,SAACzG,EAAGU,GACf,IAAMC,EAAM3C,EAAE0C,IAEVC,EAAIf,SAAS,aAAee,EAAIwB,KAAK,mBACvCxB,EAAI4vC,QAAQ,UAAU1wC,SAAS,eAInCy3D,EAAc7wD,MAAK,SAACzG,EAAGU,GACrB,IAAMC,EAAM3C,EAAE0C,GAEVC,EAAIozC,GAAG,aACTpzC,EAAI+4C,QAAQ,UAAU75C,SAAS,cAInCy3D,EAAcv3D,GAAG,UAAU,SAACC,GAC1B,IAAMW,EAAM3C,EAAEgC,EAAEuuD,eACVT,EAAUntD,EAAI+4C,QAAQ,UAE5BoU,EAAQyJ,SAAS,UAAU9wD,MAAK,SAACzK,EAAG0E,GAClC,IAAMC,EAAM3C,EAAE0C,GAETC,EAAIK,KAAK,SAAS+yC,GAAG,aACxBpzC,EAAIb,YAAY,cAIhBa,EAAIozC,GAAG,aACT+Z,EAAQjuD,SAAS,cAIrBc,EAAIZ,GAAG,UAAU,SAACC,GAChB0B,YAAW,WACJf,EAAIK,KAAK,UAAUG,QACtB0zD,EAAUxzD,SAEX,QAGLV,EAAId,SAAJ,UAAgB+G,EAAhB,YACAjG,EAAIF,QAAQqpD,IAAOqD,kB,UA1EE,O,EAAA,E,EAAA,0CA2FG,WACxB,OAAO/tD,KAAKqH,MAAK,WAEf,IAAM9F,EAAM3C,EAAE,GACVkD,EAAOP,EAAIO,KA5FJ0F,gBA8FN1F,IACHA,EAAO,IAAIg2D,EAAW,GACtBv2D,EAAIO,KAhGK0F,eAgGU1F,W,EAnGF,iCA+ErB,IAAMP,EAAM3C,EAAEoB,KAAK+3D,KAEGx2D,EAAIK,KAAK,0BACjByF,MAAK,SAACzK,EAAG0E,GACrB1C,EAAE0C,GAAI0jC,QAAQ,cAGhBzjC,EAAIb,YAAJ,UAAmB8G,EAAnB,YACA5I,EAAEglD,WAAW5jD,KAAK+3D,IApFLvwD,gBAqFbxH,KAAK+3D,IAAM,U,2BAxFU,MA0GzBn5D,EAAEwI,GAAGI,GAAQswD,EAAWxvD,iBACxB1J,EAAEwI,GAAGI,GAAMunD,YAAc+I,EACzBl5D,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACNqwD,EAAWxvD,kBAQpB1J,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,KAAlB,YAA0BlC,IAAOuC,SAAU,WAJzCruD,EAAE,QAAQw5D,kBAlHM,CA2HjBx5D,K,uKCpIe,SAACA,GACPE,SAAV,IACM8qD,EAAI/qD,OACJw2D,EAAQz2D,EAAE,aACV4I,EAAO,WAGP6wD,GAFY,KAAH,OAAQ7wD,GALA,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,8BASRxH,KACR8H,UAIH,IAAMwwD,EAAU15D,EAAE,cAAD,OAAe4I,IAC1B+wD,EAAe,WACnB,IAAM7S,EAAI4S,EAAQ/0D,SACR8xD,EAAM/+C,YACRovC,EACN2P,EAAM50D,SAAS,UAEf40D,EAAM30D,YAAY,WAItB63D,IACAlD,EAAM10D,GAAG,iBAAiB,WACxB43D,OAGF,IAAMC,EAAe,SAAC57D,EAAG0E,GACvB,IAAMC,EAAM3C,EAAE0C,GACRm3D,EAAel3D,EAAIgC,SACzBhC,EAAI+B,IAAI,SAAUm1D,GAElBl3D,EAAI+B,IAAI,cAAem1D,GACvBl3D,EAAI42D,SAAS,YAAY70D,IAAI,iBAAkBm1D,IAGjD75D,EAAE,uBAAuB0E,IAAI,SAAU,QACvChB,YAAW,WACT1D,EAAE,uBAAuByI,KAAKmxD,KAC7B,KAEHnD,EAAM10D,GAAG,UAAU,WACjB/B,EAAE,uBAAuB0E,IAAI,SAAU,QACvChB,YAAW,WACT1D,EAAE,uBAAuByI,KAAKmxD,KAC7B,UAhDc,gCAsDnBnD,EAAM30D,YAAY,UAClB9B,EAAE,cAAD,OAAe4I,EAAf,kCAAoDzE,KAAK,MAAO,Q,EAvD9C,O,2BAAA,MA2DvBnE,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,KAAlB,YAA0BlC,IAAOuC,SAAU,WACzCoL,EAASj4D,UAGXwpD,EAAEyO,SAAW,IAAIA,EA/DD,CAkEfz5D,GAlEH,I,qhCCYA,IAAM+nD,E,MAAe+R,MAEL,SAAC95D,GAEf,IAAMgrD,EAAI/qD,OACJmxD,EAAIlxD,SACJu2D,EAAQz2D,EAAE,QAEV4I,EAAO,SAEbxC,QAAQunC,QACRvnC,QAAQ2zD,KACN,yFACA,+BAEF3zD,QAAQ4zD,eAAe,UACvBt7D,OAAO6kB,KAAKuoC,KAAQppC,SAAQ,SAACspB,GAC3B5lC,QAAQ2zD,KAAR,UAAgB/tB,EAAhB,aAAsB8f,IAAO9f,QAE/B5lC,QAAQ6zD,SAAS,UAEjB7zD,QAAQ4zD,eAAe,UACvBt7D,OAAO6kB,KAAK22C,KAAQx3C,SAAQ,SAACspB,GAC3B5lC,QAAQ2zD,KAAR,UAAgB/tB,EAAhB,aAAsBkuB,IAAOluB,QAE/B5lC,QAAQ6zD,SAAS,UAEjB7zD,QAAQ4zD,eAAe,QACvB5zD,QAAQ0tB,KAAK,QACb9zB,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAO4C,gBAAiB,WACjCtoD,QAAQ6zD,SAAS,QACjB7zD,QAAQ+zD,QAAQ,WAMlB,IAAMC,EAAep6D,EAAE,gBACjBq6D,EAAmBr6D,EAAE,oBAQ3BoxD,EAAE1sC,iBAH4B,oBAGY,WAJvB,WAKb0sC,EAAEkJ,iBACJl0D,QAAQC,IAAI,eACZowD,EAAM50D,SAAS,aACf40D,EAAMh0D,QAAQqpD,IAAOmC,aAErB7nD,QAAQC,IAAI,gBACZowD,EAAM30D,YAAY,aAClB20D,EAAMh0D,QAAQqpD,IAAOoC,gBAKzB,IAAMqM,EAAqB,WACO,qBAArBvuD,UAAUwuD,SAGhBxuD,UAAUwuD,QAKbp0D,QAAQC,IAAI,eACZowD,EAAM30D,YAAY,cAClB20D,EAAMh0D,QAAQqpD,IAAOsC,UANrBhoD,QAAQC,IAAI,gBACZowD,EAAM50D,SAAS,cACf40D,EAAMh0D,QAAQqpD,IAAOqC,YAQzBnD,EAAEtmC,iBACA,WACA,WACE61C,OAEF,GAGFvP,EAAEtmC,iBACA,UACA,WACE61C,OAEF,GAGFvP,EAAEtmC,iBAAiB,QAAQ,WACzB61C,OAGFv6D,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,OAAQ,WACxBuM,OAIF,IAYME,EAAejuD,aAAY,WAC3BiqD,EAAM70D,SAAS,eAInB5B,EAAE2F,KAAK,CACLC,MAAM,EACNC,OAAO,EACPI,OAAO,EACPH,IAAK,iBACL+/C,QAAQ,EACRphC,KAAM,OACN5L,SAPK,SAOI3V,EAAMw3D,GACM,YAAfA,GACFruD,cAAcouD,GAEdhE,EAAM50D,SAAS,eAGf40D,EAAM30D,YAAY,mBAIvB,KAEHkpD,EAAEqM,WAAa,CACb3zC,KAAM1jB,EAAE,QAAQmE,KAAK,QACrBw2D,SAAU,IACV77B,KAAM,IAGR,IAAI87B,GAAa,EACXC,EAAiB,SAACC,GAClB9P,EAAEgF,gBAAkB8K,GAAQF,IAIhCA,GAAa,EAEb5P,EAAEgF,cAAgB8K,EAClB96D,EAAE0yD,QAAQjnD,MAAQu/C,EAAEgF,cAEhB8K,EACF10D,QAAQC,IAAR,UAAeuC,EAAf,2BAEAxC,QAAQC,IAAR,UAAeuC,EAAf,4BAIFlF,YAAW,WACTk3D,GAAa,IACZ,OAGLC,EAAe,iBAAkB56D,QAAU+L,UAAU+uD,iBAAmB,GAYxE3J,EAAE1sC,iBAAiB,aAAa,WAC9Bm2C,GAAe,MAEjBzJ,EAAE1sC,iBAAiB,cAAc,WAC/Bm2C,GAAe,MAnLI,IAsLf3D,EAtLe,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,8BA0LjB91D,KAAK8H,UAEL9C,QAAQC,IAAR,wBAA6BuC,IAG7BxH,KAAK+1D,iBAGD,WAAYnM,GACdhrD,EAAE,aAAa6B,SAAS,qBAG1BT,KAAK45D,aAGL55D,KAAK65D,4BAGLj7D,EAAE,gCAAgCmE,KAAK,SAAU,UA0BjDnE,EAAE,gBAAgB+B,GAAG,SAAS,SAACC,GAC7BA,EAAEC,iBACF,IAvIYQ,EAAS0G,EAuIfzG,EAAKV,EAAEuuD,cACP5tD,EAAM3C,EAAEgC,EAAEuuD,eAxIJ9tD,EA0IHC,EA1IYyG,EA0IRxG,EAAIwB,KAAK,eAzI1B4jD,EAAaM,cAAc+I,EAAE9mD,cAAcnB,GAAW1G,EAAS,CAC7DwjD,MAAO,IACPzvC,QAAS,QA2ILxW,EAAE,kBAAkBmD,QACtBnD,EAAEk7D,UACA,wDACA,WACE,IAAMC,EAAQ,GAEdn7D,EAAE,kBAAkByI,MAAK,SAACzK,EAAG0E,GAC3By4D,EAAMn9D,GAAKgC,EAAE0C,GAAIyB,KAAK,mBAGxB6mD,EAAEoQ,QAAQ5xB,KAAK,CACb2f,OAAQ,CACNkS,SAAUF,QAQpBn7D,EAAE,qBAAqB+B,GAAG,SAAS,SAACC,GAClC,IAAMW,EAAM3C,EAAEgC,EAAEuuD,eACVtoD,EAAUjI,EAAE2C,EAAIO,KAAK,eAEtB+E,EAAQ9E,SAIb8E,EAAQQ,MAAK,SAACzK,EAAGs9D,GACf,IAAMC,EAAYv7D,EAAEs7D,GACdjjB,EAAMkjB,EAAU71C,KAAK,WAAW6G,cAE1B,UAAR8rB,GAA2B,WAARA,EACrBkjB,EAAUv3C,IAAIrhB,EAAIO,KAAK,YACbq4D,EAAU35D,SAAS,UAC7B25D,EAAU5zD,KAAKhF,EAAIO,KAAK,eAI5BP,EAAIF,QAAQqpD,IAAOmD,mBACnBhnD,EAAQsqC,QAAQ,QAAQ9vC,QAAQqpD,IAAOmD,uBAIzCjvD,EAAE,iBAAiB+B,GAAG,SAAS,SAACC,GAC9B,IAAMW,EAAM3C,EAAEgC,EAAEuuD,eACVrsD,EAAOvB,EAAIO,KAAK,QACjBgB,EAAKf,SACRiD,QAAQ2c,KAAK,qBACb3c,QAAQ2c,KAAKpgB,IAGfqoD,EAAE1kD,SAASob,OAAOxd,MAIpB+yD,EAAQ7zD,MAAK,WACXqzD,EAAM50D,SAAS,aAIbmpD,EAAEqM,WAAF,KAAqBpwD,QAAQ,cAAgB,GAC/C+jD,EAAEwQ,QAGJ/E,EAAMvzD,KAAK0F,EAAMxH,QAhTA,kDAoTjB,IAAMuB,EAAM3C,EAAE,gCACVy7D,EAAO,EAAIvB,IAAOpP,MACtB2L,EAAMhyD,OAAO9B,GAEb,IAAI+4D,EAASD,EAAKE,QAClBF,EAAOA,EAAKG,UAEZ,IAAK,IAAI59D,EAAI,EAAGA,EAAIy9D,EAAKt4D,SAAUnF,EAAG,CACpC,IAAM69D,EAAMJ,EAAKz9D,GAEjB,GADA2E,EAAId,SAAJ,YAAkBg6D,EAAlB,UACIl5D,EAAIozC,GAAG,WAAY,CACrB2lB,EAASG,EACT,OAQJ,OAJAl5D,EAAIizB,SACJ6gC,EAAM30D,YAAY25D,GAClBhF,EAAM50D,SAAS65D,GAERA,IAxUU,qCA2UG51D,GACpB,IAAIQ,EAAWR,GAAOklD,EAAE1kD,SAASpC,KAE3B46B,GADNx4B,EAAWA,EAASY,QAAQ8jD,EAAEqM,WAAF,KAAsB,MAC5BpwD,QAAQ,KAE9B+jD,EAAEqM,WAAWsD,SAAWr0D,EAASqY,MAAM,KAAK,GAC5CqsC,EAAEqM,WAAWv4B,KACXA,GAAQ,EAAIx4B,EAASumC,OAAOvmC,EAASW,QAAQ,MAAQ,KAlVtC,4BAsVN+xD,EAAK8C,GAChBzB,EAAiB0B,QAAQ,QAEzB1B,EAAiBj2D,KAAjB,0DACqD03D,EADrD,8DAC8G9C,EAD9G,iBAGAqB,EAAiBr3D,KAAK,eAAeg5D,QAErC3B,EAAiBr3D,KAAK,gCAAgCiuD,OAAM,WAC1DoJ,EAAiB0B,QAAQ,QAAQ,WAC/B1B,EAAiBr3D,KAAK,eAAeg5D,MAAM,eAI/C3B,EAAiB4B,OAAO,QAEpB7B,EAAaj3D,QACfi3D,EAAa,GAAG8B,OAGlBl8D,EAAEgrD,GAAGvoD,QAAL,UAAgBqpD,IAAO0C,mBA1WN,kCA+We,IAA5B6L,EAAiBl3D,QACnBk3D,EAAiB0B,QAAQ,QAAQ,WAC/B1B,EAAiBr3D,KAAK,UAAUg5D,MAAM,YAItC5B,EAAaj3D,QAA0C,qBAAzBi3D,EAAa,GAAG7kC,MAChD6kC,EAAa,GAAG7kC,OAGlBv1B,EAAEgrD,GAAGvoD,QAAL,UAAgBqpD,IAAOqQ,kBAzXN,mCA8XjB,IAAMC,EAAQ3F,EAAMzzD,KAAK,OACnBq5D,EAAW,GACXC,EAAe,GAGrBF,EAAM3zD,MAAK,SAACzK,EAAG0E,GACb,IAAMC,EAAM3C,EAAE0C,GACRoB,EAAMnB,EAAIwB,KAAK,OACfo4D,EAAU55D,EAAIO,KAAK,YAErBY,GAAOA,EAAIX,QACbk5D,EAAS72C,KAAK1hB,GAEZy4D,GAAWA,EAAQp5D,SACrBm5D,EAAa92C,KAAK+2C,GAClB55D,EAAId,SAAS,WAEbi1D,EAAOW,QAAQ,CAAC8E,IAAU70D,MAAK,WAC7B/E,EAAIwB,KAAK,MAAOo4D,GAEhB55D,EAAId,SAAS,UACbc,EAAIb,YAAY,WAEhBa,EAAIF,QAAJ,UAAeqpD,IAAO6C,wBAM5B8H,EAAMzzD,KAAK,kBAAkByF,MAAK,SAACzK,EAAG0E,GACpC,IAAMC,EAAM3C,EAAE0C,GACR65D,EAAU55D,EAAIO,KAAK,WAErBq5D,GAAWA,EAAQp5D,SACrBm5D,EAAa92C,KAAK+2C,GAClB55D,EAAId,SAAS,WAEbi1D,EAAOW,QAAQ,CAAC8E,IAAU70D,MAAK,WAC7B/E,EAAI+B,IAAI,CAAE,iCAA2B63D,EAA3B,OAEV55D,EAAId,SAAS,UACbc,EAAIb,YAAY,WAEhBa,EAAIF,QAAJ,UAAeqpD,IAAO6C,wBAM5BmI,EAAOW,QAAQ4E,GAAU30D,MAAK,WAC5B1H,EAAEgrD,GAAGvoD,QAAQ,iBAGbq0D,EAAOW,QAAQ6E,GAAc50D,MAAK,WAChCtB,QAAQC,IAAI,0BAEZ3C,YAAW,WACT1D,EAAEgrD,GAAGvoD,QAAL,UAAgBqpD,IAAO8C,oBACtB,aAxbU,gCA8bjBxoD,QAAQC,IAAR,sBAA2BuC,Q,EA9bV,O,2BAAA,KAkcrB5I,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,KAAlB,YAA0BlC,IAAOuC,SAAU,WACzC6I,EAAO11D,UAGTxB,EAAEgrD,GAAGjpD,GAAG,UAAU,WAChBm1D,EAAO+D,+BAGTj7D,EAAEgrD,GAAGjpD,GAAG,uBAAuB,WAC7Bk1D,EAAQ5zD,MAAK,WACXozD,EAAM30D,YAAY,gBAKtB9B,EAAE,+BAA+B+B,GAAG,gBAAgB,WAClD2B,YAAW,WACTuzD,EAAQ7zD,MAAK,WACXqzD,EAAM50D,SAAS,eAEhB,QAGLmpD,EAAEkM,OAASA,EAzdG,CA4dbl3D,K,uKCteqB,SAACA,GAEvB,IAAM4I,EAAO,mBACPsC,EAAWtC,EAKX4zD,GAHIv8D,OACAC,SANmB,WAU3B,WAAYwC,I,4FAAI,SACd0D,QAAQC,IAAR,wBAA6BuC,IAE7B,IAAM0gD,EAAKloD,KACXkoD,EAAGmT,KAAOz8D,EAAE0C,GACZ4mD,EAAGxY,UAAYwY,EAAGmT,KAAK,GAAG3rB,UAE1BwY,EAAGmT,KAAKv5D,KAAKgI,EAAU9J,MACvB,IAOIyC,EAPEK,EAAOolD,EAAGmT,KAAKt4D,KAAK,SAAWmlD,EAAGmT,KAAKv5D,KAAK,QASlD,GAAIW,EAAQK,EAAKI,MAAM,kFAAmF,CACxG,IAAIo4D,EAMJ,GAJiB,YAAb74D,EAAM,IAAiC,qBAAbA,EAAM,IAA0C,UAAbA,EAAM,KACrE64D,EAZiB,SAAC52D,GAEpB,OADA62D,UAAY72D,EAAI6Y,MAAM,mDACf8C,IAAck7C,UAAU,GAAKA,UAAU,GAAGh+C,MAAM,gBAAgB,GAAKg+C,UAAU,GAUzEC,CAAa14D,IAGV,SAAZL,EAAM,GAeR,OAdA64D,EAAW74D,EAAM,GACjBylD,EAAGmT,KAAK56D,SAAS,gBACjB7B,EAAE2F,KAAK,CACL8e,KAAM,MACN3e,IAAK,kCAAF,OAAsC42D,EAAtC,SACHG,MAAO,WACP92D,SAAU,QACVY,QAAS,SAASzD,GAChB,IAAM45D,EAAgB55D,EAAK,GAAG65D,gBAC9BzT,EAAGjmD,KAAKy5D,GACRxT,EAAGmT,KAAK36D,YAAY,cAOtB46D,GACFpT,EAAGjmD,KAAH,4BAA6Bq5D,EAA7B,Y,UArDqB,O,EAAA,E,EAAA,iCAiEzBt2D,QAAQC,IAAR,sBAA2BuC,IAC3B0gD,GAAGmT,KAAK,GAAG3rB,UAAYwY,GAAGxY,YAlED,yCAsEzB,OAAO1vC,KAAKqH,MAAK,SAACzK,EAAG0E,GAEnB,IAAMC,EAAM3C,EAAE0C,GACVQ,EAAOP,EAAIO,KAAKgI,GAEfhI,IACHA,EAAO,IAAIs5D,EAAe95D,GAC1BC,EAAIO,KAAKgI,EAAUhI,W,EA7EE,4BA0DtBY,GACQ1C,KACRq7D,KAAK,GAAG3rB,UAAY,GADZ1vC,KAERq7D,KAAKh4D,OAAR,oBAA4BX,EAA5B,0B,2BA7DyB,MAoF7B9D,EAAEwI,GAAGI,GAAQ4zD,EAAe9yD,iBAC5B1J,EAAEwI,GAAGI,GAAMunD,YAAcqM,EACzBx8D,EAAEwI,GAAGI,GAAMwnD,WAAa,WAEtB,OADApwD,EAAEwI,GAAGI,GAAQC,mBACN2zD,EAAe9yD,kBAIxB1J,EAAEC,QAAQ8B,GAAV,UAAgB+pD,IAAOkC,KAAvB,YAA+BlC,IAAOuC,SAAU,WAC9CruD,EAAE,+BAA+Bg9D,uBA7Fb,CAiGrBh9D,K,iaCnGe,SAACA,GAEjB,IAAMgrD,EAAI/qD,OAEJw2D,GADIv2D,SACIF,EAAE,SAYVi9D,EAhBiB,yB,4FAAA,S,UAAA,O,EAAA,E,EAAA,8BAkBR77D,KACR8H,UAEH9C,QAAQC,IAAR,wBAfS,aAmBTowD,EAAMhyD,OACJ,uHAYFzE,EAAEgrD,GAAGvoD,QAAQqpD,IAAO4C,iBAtCD,gCA0CnBtoD,QAAQC,IAAR,sBApCS,iB,EANU,O,2BAAA,KA8CvBrG,EAAEgrD,GAAGjpD,GAAL,UAAW+pD,IAAOkC,KAAlB,YAA0BlC,IAAOuC,SAAU,WACzC4O,EAASz7D,UAGXwpD,EAAEiS,SAAWA,GAlDG,CAqDfj9D,K,kECyBH,SAASk9D,EAAUp+D,GACjB,OAAOA,EAAEykB,OAAO6e,IAAItjC,GAGPo+D,EACb32B,yCAEkB22B,EAClB32B,yE,6DC5FFxoC,EAAOD,QAAU6K","file":"js/app.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 = \"/mnt/data/srv/dist/repositories/webpack-bootstrap-ui-kit/dist\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/js/app.js\");\n","/*\n * MetaLightbox v0.61\n * https://tony.twma.pro\n *\n */\n\n//=require ../../bower_components/jquery-zoom/jquery.zoom.js\n\n(function($, window, document) {\n var pluginName = 'metaLightbox',\n defaults = {\n effect: 'fade',\n theme: 'default',\n keyboardNav: true,\n clickOverlayToClose: true,\n onInit: function() {},\n beforeShowLightbox: function() {},\n afterShowLightbox: function(lightbox) {},\n beforeHideLightbox: function() {},\n afterHideLightbox: function() {},\n onPrev: function(element) {},\n onNext: function(element) {},\n errorMessage:\n 'The requested content cannot be loaded. Please try again later.',\n };\n\n function MetaLightbox(element, options) {\n /*this.el = element;\n this.$el = $(this.el);*/\n\n this.options = $.extend({}, defaults, options);\n\n this._defaults = defaults;\n this._name = pluginName;\n\n this.init();\n }\n\n MetaLightbox.prototype = {\n init: function() {\n var $this = this,\n $html = $('html');\n\n this.ajaxLoaded = false;\n\n // make object globally accessible\n document.MetaLightbox = this;\n\n // Need this so we don't use CSS transitions in mobile\n if (!$html.hasClass('meta-lightbox-notouch'))\n $html.addClass('meta-lightbox-notouch');\n if ('ontouchstart' in document)\n $html.removeClass('meta-lightbox-notouch');\n\n // Setup the click\n $(document).on(\n 'click',\n '[data-toggle=\"lightbox\"],[data-lightbox-gallery]',\n function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n $this.showLightbox(this);\n return false;\n },\n );\n\n // keyboardNav\n if (this.options.keyboardNav) {\n $('body')\n .off('keyup')\n .on('keyup', (e) => {\n var code = e.keyCode ? e.keyCode : e.which;\n // Escape\n if (code === 27) {\n $this.destructLightbox();\n }\n // Left\n if (code === 37) {\n $('.meta-lightbox-prev').trigger('click');\n }\n // Right\n if (code === 39) {\n $('.meta-lightbox-next').trigger('click');\n }\n });\n }\n\n this.options.onInit.call(this);\n },\n\n showLightbox: function(element) {\n this.el = element;\n this.$el = $(this.el);\n\n var $this = this,\n lightbox,\n content,\n currentLink,\n galleryItems;\n\n this.options.beforeShowLightbox.call(this);\n\n lightbox = this.constructLightbox();\n if (!lightbox) return;\n content = lightbox.find('.meta-lightbox-content');\n if (!content) return;\n currentLink = this.$el;\n $('body').addClass(`meta-lightbox-body-effect-${this.options.effect}`);\n\n // Add content\n this.processContent(content, currentLink);\n\n // Nav\n if (this.$el.data('lightbox-gallery')) {\n galleryItems = $(\n `[data-lightbox-gallery=\"${this.$el.data('lightbox-gallery')}\"]`,\n );\n\n if (galleryItems.length === 1) {\n $('.meta-lightbox-nav').hide();\n } else {\n $('.meta-lightbox-nav').show();\n }\n\n // Prev\n $('.meta-lightbox-prev')\n .off('click')\n .on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index - 1);\n if (!$(currentLink).length) currentLink = galleryItems.last();\n $this.processContent(content, currentLink);\n $this.options.onPrev.call(this, [currentLink]);\n });\n\n // Next\n $('.meta-lightbox-next')\n .off('click')\n .on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index + 1);\n if (!$(currentLink).length) currentLink = galleryItems.first();\n $this.processContent(content, currentLink);\n $this.options.onNext.call(this, [currentLink]);\n });\n }\n\n setTimeout(function() {\n lightbox.addClass('meta-lightbox-open');\n $this.options.afterShowLightbox.call(this, [lightbox]);\n }, 1); // For CSS transitions\n },\n\n processContent: function(content, link) {\n var $this = this,\n img,\n video,\n src,\n classTerm,\n iframe,\n wrap;\n\n href = link.attr('href');\n if (!href) {\n href = link.data('href');\n }\n\n content.html('').addClass('meta-lightbox-loading');\n\n // Is HiDPI?\n if (this.isHidpi() && link.data('lightbox-hidpi')) {\n href = link.data('lightbox-hidpi');\n }\n\n // Image\n if (href.match(/\\.(jpeg|jpg|gif|png)$/i) != null) {\n /*if ($(window).width() < 768) {\n window.open(href, '_blank');\n }*/\n img = $('<img>', {\n src: href,\n });\n img.on('load', () => {\n var wrap = $('<div class=\"meta-lightbox-image\"></div>'),\n $content = $('.meta-lightbox-content'),\n imgwrapper = $('<span class=\"meta-lightbox-zoom-wrapper\"></span>');\n\n imgwrapper.append(img);\n wrap.append(imgwrapper);\n\n // Vertically center images\n wrap.css({\n 'line-height': `${$content.height()}px`,\n height: `${$content.height()}px`, // For Firefox\n });\n $(window).resize(() => {\n wrap.css({\n 'line-height': `${$content.height()}px`,\n height: `${$content.height()}px`, // For Firefox\n });\n });\n\n if (typeof imgwrapper['zoom'] !== 'undefined') {\n imgwrapper.zoom();\n }\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n /*.each(function () {\n if (this.complete) $(this).load();\n });*/\n\n img.on('error', () => {\n var wrap = $(\n `<div class=\"meta-lightbox-error\"><p>${$this.options.errorMessage}</p></div>`,\n );\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Image Click', href);\n }\n }\n // Video (Youtube/Vimeo)\n else if (\n (video = href.match(\n /(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/,\n ))\n ) {\n src = '';\n classTerm = 'meta-lightbox-video';\n\n if (video[1] == 'youtube') {\n src = `https://www.youtube.com/embed/${video[4]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtu') {\n src = `https://www.youtube.com/embed/${video[3]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtube-nocookie') {\n src = `https://www.youtube-nocookie.com/embed/${video[4]}`;\n classTerm = 'nivo-lightbox-youtube';\n }\n if (video[1] == 'vimeo') {\n src = `https://player.vimeo.com/video/${video[3]}`;\n classTerm = 'meta-lightbox-vimeo';\n }\n\n if (src) {\n iframe = $('<iframe>', {\n src,\n class: classTerm,\n frameborder: 0,\n vspace: 0,\n hspace: 0,\n scrolling: 'auto',\n });\n content.html(iframe);\n iframe.on('load', () => {\n content.removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n }\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Video Click', video);\n }\n }\n // Inline HTML\n else if (href.substring(0, 1) == '#') {\n if ($(href).length) {\n wrap = $('<div class=\"meta-lightbox-inline\" />');\n wrap.append(\n $(href)\n .clone()\n .show(),\n );\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n position: 'relative',\n top: '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2)}px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n position: 'relative',\n top: '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2)}px`,\n });\n }\n });\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n } else {\n wrap = $(\n `<div class=\"meta-lightbox-error\"><p>${$this.options.errorMessage}</p></div>`,\n );\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n }\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'inline HTML click', href);\n }\n }\n // AJAX/iFrame (default)\n else {\n $.ajax({\n sync: false,\n async: true,\n url: href,\n dataType: 'html',\n method: 'GET',\n cache: false,\n statusCode: {\n 404: function() {\n console.log('page not found');\n window.location.href = url;\n },\n 302: function() {\n console.log('redirect 302');\n window.location.href = url;\n },\n },\n error: function(jqXHR) {\n console.log(`AJAX request failure.${jqXHR.statusText}`);\n\n var wrap = $(\n `<div class=\"meta-lightbox-error\"><p>${$this.options.errorMessage}</p></div>`,\n );\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success: function(data, status, jqXHR) {\n try {\n const dataJson = $.parseJSON(data);\n if (typeof dataJson === 'object') {\n // Replace regions\n if (\n typeof dataJson['regions'] === 'object' &&\n typeof dataJson['regions']['LayoutAjax'] !== 'undefinded'\n ) {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.html(dataJson['regions']['LayoutAjax']);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // trigger events\n /*if (typeof (data['events']) === 'object') {\n for (var eventName in data.events) {\n $(document).trigger(eventName, [data['events'][eventName]]);\n }\n }*/\n\n var title = jqXHR.getResponseHeader('X-Title'),\n link = jqXHR.getResponseHeader('X-Link');\n\n if (\n title &&\n title.length &&\n link &&\n link.length &&\n link !== window.location.href &&\n link.substring(0, link.indexOf('#')) !==\n window.location.href.replace($('base').attr('href'), '/')\n ) {\n $('.meta-lightbox-ajax').data('curr-title', document.title);\n $('.meta-lightbox-ajax').data(\n 'curr-link',\n window.location.href,\n );\n\n if (\n typeof window.localStorage !== 'undefined' &&\n link !== '/'\n ) {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href')}/${link}`\n ) {\n window.history.pushState(\n {\n title,\n page: link,\n ajax: 'true',\n },\n title,\n link,\n );\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('set', {\n page: link.replace($('base').attr('href'), ''),\n title,\n });\n ga('send', 'pageview');\n }\n }\n }\n } catch (e) {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.append(data);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n position: 'relative',\n top: '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2)}px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n position: 'relative',\n top: '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2)}px`,\n });\n }\n });\n\n setTimeout(() => {\n $(window).resize();\n\n if (typeof window.imagesLoaded === 'function') {\n window.imagesLoaded().then(() => {\n $(window).resize();\n });\n }\n }, 500);\n\n $this.contentLoaded();\n },\n });\n }\n },\n\n setTitle: function(text) {\n var titleWrap = $('<div>', {\n class: 'meta-lightbox-title',\n });\n titleWrap.text(text);\n $('.meta-lightbox-title-wrap').html(titleWrap);\n },\n\n contentLoaded: function() {\n setTimeout(() => {\n $(window).trigger('meta-lightbox-loaded');\n }, 1); // For CSS transitions\n\n setTimeout(() => {\n $('body').addClass('meta-lightbox-body-effect-fade');\n }, 600);\n },\n\n constructLightbox: function() {\n var $this = this,\n overlay = $('<div>', {\n class: `meta-lightbox-overlay meta-lightbox-theme-${this.options.theme} meta-lightbox-effect-${this.options.effect}`,\n }),\n wrap = $('<div>', {\n class: 'meta-lightbox-wrap',\n }),\n content = $('<div>', {\n class: 'meta-lightbox-content',\n }),\n nav = $(\n '<a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-prev\"><i class=\"fas fa fa-chevron-left\"></i> <span class=\"sr-only\">Previous</span></a><a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-next\"><i class=\"fa fas fa-chevron-right\"></i> <span class=\"sr-only\">Next</span></a>',\n ),\n close = $(\n '<a href=\"#\" class=\"meta-lightbox-close fas fa fa-times\" title=\"Close\"><span class=\"sr-only\">Close</span></a>',\n ),\n title = $('<div>', {\n class: 'meta-lightbox-title-wrap',\n }),\n isMSIE = /*@cc_on!@*/ 0,\n $overlay = $('.meta-lightbox-overlay');\n\n if ($overlay.length) return $overlay;\n\n if (isMSIE) overlay.addClass('meta-lightbox-ie');\n\n wrap.append(content);\n wrap.append(title);\n overlay.append(wrap);\n overlay.append(nav);\n overlay.append(close);\n $('body').append(overlay);\n\n if ($this.options.clickOverlayToClose) {\n overlay.on('click', (e) => {\n var $target = $(e.target);\n\n if (\n $target.hasClass('meta-lightbox-zoom-wrapper') ||\n $target.hasClass('meta-lightbox-content') ||\n $target.hasClass('meta-lightbox-wrap') ||\n $target.hasClass('meta-lightbox-image') ||\n $target.hasClass('meta-lightbox-overlay')\n ) {\n $this.destructLightbox();\n }\n });\n }\n\n close.on('click', (e) => {\n e.preventDefault();\n $this.destructLightbox();\n });\n\n return overlay;\n },\n\n destructLightbox: function() {\n var $this = this,\n $overlay = $('.meta-lightbox-overlay'),\n isMSIE = /*@cc_on!@*/ 0;\n this.options.beforeHideLightbox.call(this);\n\n var title = $('.meta-lightbox-ajax').data('curr-title'),\n link = $('.meta-lightbox-ajax').data('curr-link');\n if (title && link) {\n if (typeof window.localStorage !== 'undefined' && link !== '/') {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href')}/${link}`\n ) {\n window.history.replaceState(\n {\n title,\n page: link,\n ajax: 'true',\n },\n title,\n link,\n );\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n }\n\n $overlay.removeClass('meta-lightbox-open');\n $('.meta-lightbox-nav').hide();\n $('body').removeClass(\n `meta-lightbox-body-effect-${$this.options.effect}`,\n );\n $('.meta-lightbox-content .meta-lightbox-zoom-wrapper').trigger(\n 'zoom.destroy',\n );\n\n // For IE\n if (isMSIE) {\n $overlay.find('iframe').attr('src', ' ');\n $overlay.find('iframe').remove();\n }\n $('.meta-lightbox-prev').off('click');\n\n // Remove click handlers\n $('.meta-lightbox-next').off('click');\n\n // Empty content (for videos)\n $('.meta-lightbox-content').empty();\n\n $('body').removeClass('meta-lightbox-body-effect-fade');\n\n this.options.afterHideLightbox.call(this);\n },\n\n isHidpi: function() {\n var mediaQuery =\n '(-webkit-min-device-pixel-ratio: 1.5),\\\n (min--moz-device-pixel-ratio: 1.5),\\\n (-o-min-device-pixel-ratio: 3/2),\\\n (min-resolution: 1.5dppx)';\n if (window.devicePixelRatio > 1) return true;\n return window.matchMedia && window.matchMedia(mediaQuery).matches;\n },\n };\n\n $.fn[pluginName] = function(options) {\n return this.each(function() {\n if (!$.data(this, pluginName)) {\n $.data(this, pluginName, new MetaLightbox(this, options));\n }\n });\n };\n\n $(document).metaLightbox();\n})(jQuery, this, document);\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let 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 static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n SELECTOR_DATA_TOGGLES\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\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',\n !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, (event) => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_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 const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {\n event.preventDefault() // work around event sent to label and input\n }\n Button._jQueryInterface.call($(button), 'toggle')\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(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\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n 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 &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n 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(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const 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_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? DIRECTION_NEXT\n : DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\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 }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, (event) => this.pause(event))\n .on(EVENT_MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._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\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, (e) => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, (event) => start(event))\n $(this._element).on(EVENT_POINTERUP, (event) => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, (event) => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, (event) => move(event))\n $(this._element).on(EVENT_TOUCHEND, (event) => end(event))\n }\n }\n\n _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 case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\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 const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\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 const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, 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 data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const 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).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\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 }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_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)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\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 const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_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 const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_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 }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\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 this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\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 $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\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 handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n 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 this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(CLASS_NAME_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(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, (event) => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE)\n ? CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\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 _adjustDialog() {\n const isModalOverflowing =\n 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 _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\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 const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _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, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\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_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\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 }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter((node) => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach((node) => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_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() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\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 dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL')\n ? $(container).find(SELECTOR_ACTIVE_UL)\n : $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const 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', 'srcset', '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/**\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 */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\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 */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const 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 const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport 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 const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\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\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<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\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\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(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\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 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 show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\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\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\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 if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._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(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\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(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n 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 getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _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 _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, (event) => this._enter(event))\n .on(eventOut, this.config.selector, (event) => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\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(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const 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 _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _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, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n 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 return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const 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\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n 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 const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const 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\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","(function(factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery', 'hammerjs'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jquery'), require('hammerjs'));\r\n } else {\r\n factory(jQuery, Hammer);\r\n }\r\n}(function($, Hammer) {\r\n function hammerify(el, options) {\r\n var $el = $(el);\r\n if(!$el.data(\"hammer\")) {\r\n $el.data(\"hammer\", new Hammer($el[0], options));\r\n }\r\n }\r\n\r\n $.fn.hammer = function(options) {\r\n return this.each(function() {\r\n hammerify(this, options);\r\n });\r\n };\r\n\r\n // extend the emit method to also trigger jQuery events\r\n Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n return function(type, data) {\r\n originalEmit.call(this, type, data);\r\n $(this.element).trigger({\r\n type: type,\r\n gesture: data\r\n });\r\n };\r\n })(Hammer.Manager.prototype.emit);\r\n}));\r\n","/*!\n * hoverIntent v1.10.1 // 2019.10.05 // jQuery v1.7.0+\n * http://briancherne.github.io/jquery-hoverIntent/\n *\n * You may use hoverIntent under the terms of the MIT license. Basically that\n * means you are free to use hoverIntent as long as this header is left intact.\n * Copyright 2007-2019 Brian Cherne\n */\n\n/**\n * hoverIntent is similar to jQuery's built-in \"hover\" method except that\n * instead of firing the handlerIn function immediately, hoverIntent checks\n * to see if the user's mouse has slowed down (beneath the sensitivity\n * threshold) before firing the event. The handlerOut function is only\n * called after a matching handlerIn.\n *\n * // basic usage ... just like .hover()\n * .hoverIntent( handlerIn, handlerOut )\n * .hoverIntent( handlerInOut )\n *\n * // basic usage ... with event delegation!\n * .hoverIntent( handlerIn, handlerOut, selector )\n * .hoverIntent( handlerInOut, selector )\n *\n * // using a basic configuration object\n * .hoverIntent( config )\n *\n * @param handlerIn function OR configuration object\n * @param handlerOut function OR selector for delegation OR undefined\n * @param selector selector OR undefined\n * @author Brian Cherne <brian(at)cherne(dot)net>\n */\n\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory(require('jquery'));\n } else if (jQuery && !jQuery.fn.hoverIntent) {\n factory(jQuery);\n }\n})(function($) {\n 'use strict';\n\n // default configuration values\n var _cfg = {\n interval: 100,\n sensitivity: 6,\n timeout: 0\n };\n\n // counter used to generate an ID for each instance\n var INSTANCE_COUNT = 0;\n\n // current X and Y position of mouse, updated during mousemove tracking (shared across instances)\n var cX, cY;\n\n // saves the current pointer position coordinates based on the given mousemove event\n var track = function(ev) {\n cX = ev.pageX;\n cY = ev.pageY;\n };\n\n // compares current and previous mouse positions\n var compare = function(ev,$el,s,cfg) {\n // compare mouse positions to see if pointer has slowed enough to trigger `over` function\n if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {\n $el.off(s.event,track);\n delete s.timeoutId;\n // set hoverIntent state as active for this element (permits `out` handler to trigger)\n s.isActive = true;\n // overwrite old mouseenter event coordinates with most recent pointer position\n ev.pageX = cX; ev.pageY = cY;\n // clear coordinate data from state object\n delete s.pX; delete s.pY;\n return cfg.over.apply($el[0],[ev]);\n } else {\n // set previous coordinates for next comparison\n s.pX = cX; s.pY = cY;\n // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)\n s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );\n }\n };\n\n // triggers given `out` function at configured `timeout` after a mouseleave and clears state\n var delay = function(ev,$el,s,out) {\n var data = $el.data('hoverIntent');\n if (data) {\n delete data[s.id];\n }\n return out.apply($el[0],[ev]);\n };\n\n $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {\n // instance ID, used as a key to store and retrieve state information on an element\n var instanceId = INSTANCE_COUNT++;\n\n // extend the default configuration and parse parameters\n var cfg = $.extend({}, _cfg);\n if ( $.isPlainObject(handlerIn) ) {\n cfg = $.extend(cfg, handlerIn);\n if ( !$.isFunction(cfg.out) ) {\n cfg.out = cfg.over;\n }\n } else if ( $.isFunction(handlerOut) ) {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );\n } else {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );\n }\n\n // A private function for handling mouse 'hovering'\n var handleHover = function(e) {\n // cloned event to pass to handlers (copy required for event object to be passed in IE)\n var ev = $.extend({},e);\n\n // the current target of the mouse event, wrapped in a jQuery object\n var $el = $(this);\n\n // read hoverIntent data from element (or initialize if not present)\n var hoverIntentData = $el.data('hoverIntent');\n if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }\n\n // read per-instance state from element (or initialize if not present)\n var state = hoverIntentData[instanceId];\n if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }\n\n // state properties:\n // id = instance ID, used to clean up data\n // timeoutId = timeout ID, reused for tracking mouse position and delaying \"out\" handler\n // isActive = plugin state, true after `over` is called just until `out` is called\n // pX, pY = previously-measured pointer coordinates, updated at each polling interval\n // event = string representing the namespaced event used for mouse tracking\n\n // clear any existing timeout\n if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }\n\n // namespaced event used to register and unregister mousemove tracking\n var mousemove = state.event = 'mousemove.hoverIntent.hoverIntent'+instanceId;\n\n // handle the event, based on its type\n if (e.type === 'mouseenter') {\n // do nothing if already active\n if (state.isActive) { return; }\n // set \"previous\" X and Y position based on initial entry point\n state.pX = ev.pageX; state.pY = ev.pageY;\n // update \"current\" X and Y position based on mousemove\n $el.off(mousemove,track).on(mousemove,track);\n // start polling interval (self-calling timeout) to compare mouse coordinates over time\n state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );\n } else { // \"mouseleave\"\n // do nothing if not already active\n if (!state.isActive) { return; }\n // unbind expensive mousemove event\n $el.off(mousemove,track);\n // if hoverIntent state is true, then call the mouseOut function after the specified delay\n state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );\n }\n };\n\n // listen for mouseenter and mouseleave\n return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);\n };\n});\n","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let 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\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\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*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\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 */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n 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 */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\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 */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\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 */\nexport default function 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 const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\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 */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst 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 */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\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 */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let 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 const 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 (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\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 */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\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 */\nexport default function 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 const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\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 const 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","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\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 */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\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 */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const 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 * 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\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const 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","/**\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 */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\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 */\nexport default function getBoundingClientRect(element) {\n let 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 const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const 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 const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let 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 const 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","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const 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 let 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 const marginTop = parseFloat(styles.marginTop);\n const 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 (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\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 */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\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\nexport default function 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 let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\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 */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\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 const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\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 const 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","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\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 */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const 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 const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\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 */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\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 */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\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 */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\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 */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const 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 const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\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 */\nexport default function 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","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\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 */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const 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","import find from './find';\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 */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\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 */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let 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(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\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(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\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(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : '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 * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\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 */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function 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 * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\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 */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\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 const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\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 */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\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 */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function 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(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 * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\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 */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst 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 */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const 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 const 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 let left, top;\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 const invertTop = sideA === 'bottom' ? -1 : 1;\n const 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 const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\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 */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\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 */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst 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 */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst 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 */\nexport default function 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 const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let 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((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 const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const 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 = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\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 */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const 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 let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const 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 let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\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 */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const 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 const 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 const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\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 const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\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 const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((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(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((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 */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\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","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\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 */\nexport default {\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","import modifiers from '../modifiers/index';\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 */\nexport default {\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: () => {},\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: () => {},\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,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\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 */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\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 */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n 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 const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\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 const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\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 */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n 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","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\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 */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let 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(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const 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] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const 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 const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n 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 = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\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 */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\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 */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\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 */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\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 * @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 */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\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 */\nexport default function 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 */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const 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 const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\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 * 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 */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\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 constructor(reference, popper, options = {}) {\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 = { ...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({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\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(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const 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 update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\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 scheduleUpdate = () => requestAnimationFrame(this.update);\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 static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\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 * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n // require('jQuery') returns a factory that requires window to\n // build a jQuery instance, we normalize how we use modules\n // that require this pattern but the window provided is a noop\n // if it's defined (how jquery works)\n if (typeof window !== 'undefined') {\n jQuery = require('jquery');\n }\n else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n} (function (jQuery) {\n // This is needed so we can catch the AMD loader configuration and use it\n // The inner file should be wrapped (by `banner.start.js`) in a function that\n // returns the AMD loader references.\n var S2 =(function () {\n // Restore the Select2 AMD loader so it can be used\n // Needed mostly in the language files, where the loader is not inserted\n if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n var S2 = jQuery.fn.select2.amd;\n }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n var _$ = jQuery || $;\n\n if (_$ == null && console && console.error) {\n console.error(\n 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n 'found. Make sure that you are including jQuery before Select2 on your ' +\n 'web page.'\n );\n }\n\n return _$;\n});\n\nS2.define('select2/utils',[\n 'jquery'\n], function ($) {\n var Utils = {};\n\n Utils.Extend = function (ChildClass, SuperClass) {\n var __hasProp = {}.hasOwnProperty;\n\n function BaseConstructor () {\n this.constructor = ChildClass;\n }\n\n for (var key in SuperClass) {\n if (__hasProp.call(SuperClass, key)) {\n ChildClass[key] = SuperClass[key];\n }\n }\n\n BaseConstructor.prototype = SuperClass.prototype;\n ChildClass.prototype = new BaseConstructor();\n ChildClass.__super__ = SuperClass.prototype;\n\n return ChildClass;\n };\n\n function getMethods (theClass) {\n var proto = theClass.prototype;\n\n var methods = [];\n\n for (var methodName in proto) {\n var m = proto[methodName];\n\n if (typeof m !== 'function') {\n continue;\n }\n\n if (methodName === 'constructor') {\n continue;\n }\n\n methods.push(methodName);\n }\n\n return methods;\n }\n\n Utils.Decorate = function (SuperClass, DecoratorClass) {\n var decoratedMethods = getMethods(DecoratorClass);\n var superMethods = getMethods(SuperClass);\n\n function DecoratedClass () {\n var unshift = Array.prototype.unshift;\n\n var argCount = DecoratorClass.prototype.constructor.length;\n\n var calledConstructor = SuperClass.prototype.constructor;\n\n if (argCount > 0) {\n unshift.call(arguments, SuperClass.prototype.constructor);\n\n calledConstructor = DecoratorClass.prototype.constructor;\n }\n\n calledConstructor.apply(this, arguments);\n }\n\n DecoratorClass.displayName = SuperClass.displayName;\n\n function ctr () {\n this.constructor = DecoratedClass;\n }\n\n DecoratedClass.prototype = new ctr();\n\n for (var m = 0; m < superMethods.length; m++) {\n var superMethod = superMethods[m];\n\n DecoratedClass.prototype[superMethod] =\n SuperClass.prototype[superMethod];\n }\n\n var calledMethod = function (methodName) {\n // Stub out the original method if it's not decorating an actual method\n var originalMethod = function () {};\n\n if (methodName in DecoratedClass.prototype) {\n originalMethod = DecoratedClass.prototype[methodName];\n }\n\n var decoratedMethod = DecoratorClass.prototype[methodName];\n\n return function () {\n var unshift = Array.prototype.unshift;\n\n unshift.call(arguments, originalMethod);\n\n return decoratedMethod.apply(this, arguments);\n };\n };\n\n for (var d = 0; d < decoratedMethods.length; d++) {\n var decoratedMethod = decoratedMethods[d];\n\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n }\n\n return DecoratedClass;\n };\n\n var Observable = function () {\n this.listeners = {};\n };\n\n Observable.prototype.on = function (event, callback) {\n this.listeners = this.listeners || {};\n\n if (event in this.listeners) {\n this.listeners[event].push(callback);\n } else {\n this.listeners[event] = [callback];\n }\n };\n\n Observable.prototype.trigger = function (event) {\n var slice = Array.prototype.slice;\n var params = slice.call(arguments, 1);\n\n this.listeners = this.listeners || {};\n\n // Params should always come in as an array\n if (params == null) {\n params = [];\n }\n\n // If there are no arguments to the event, use a temporary object\n if (params.length === 0) {\n params.push({});\n }\n\n // Set the `_type` of the first object to the event\n params[0]._type = event;\n\n if (event in this.listeners) {\n this.invoke(this.listeners[event], slice.call(arguments, 1));\n }\n\n if ('*' in this.listeners) {\n this.invoke(this.listeners['*'], arguments);\n }\n };\n\n Observable.prototype.invoke = function (listeners, params) {\n for (var i = 0, len = listeners.length; i < len; i++) {\n listeners[i].apply(this, params);\n }\n };\n\n Utils.Observable = Observable;\n\n Utils.generateChars = function (length) {\n var chars = '';\n\n for (var i = 0; i < length; i++) {\n var randomChar = Math.floor(Math.random() * 36);\n chars += randomChar.toString(36);\n }\n\n return chars;\n };\n\n Utils.bind = function (func, context) {\n return function () {\n func.apply(context, arguments);\n };\n };\n\n Utils._convertData = function (data) {\n for (var originalKey in data) {\n var keys = originalKey.split('-');\n\n var dataLevel = data;\n\n if (keys.length === 1) {\n continue;\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k];\n\n // Lowercase the first letter\n // By default, dash-separated becomes camelCase\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n if (!(key in dataLevel)) {\n dataLevel[key] = {};\n }\n\n if (k == keys.length - 1) {\n dataLevel[key] = data[originalKey];\n }\n\n dataLevel = dataLevel[key];\n }\n\n delete data[originalKey];\n }\n\n return data;\n };\n\n Utils.hasScroll = function (index, el) {\n // Adapted from the function created by @ShadowScripter\n // and adapted by @BillBarry on the Stack Exchange Code Review website.\n // The original code can be found at\n // http://codereview.stackexchange.com/q/13338\n // and was designed to be used with the Sizzle selector engine.\n\n var $el = $(el);\n var overflowX = el.style.overflowX;\n var overflowY = el.style.overflowY;\n\n //Check both x and y declarations\n if (overflowX === overflowY &&\n (overflowY === 'hidden' || overflowY === 'visible')) {\n return false;\n }\n\n if (overflowX === 'scroll' || overflowY === 'scroll') {\n return true;\n }\n\n return ($el.innerHeight() < el.scrollHeight ||\n $el.innerWidth() < el.scrollWidth);\n };\n\n Utils.escapeMarkup = function (markup) {\n var replaceMap = {\n '\\\\': '\',\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n };\n\n // Do not try to escape the markup if it's not a string\n if (typeof markup !== 'string') {\n return markup;\n }\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replaceMap[match];\n });\n };\n\n // Append an array of jQuery nodes to a given element.\n Utils.appendMany = function ($element, $nodes) {\n // jQuery 1.7.x does not support $.fn.append() with an array\n // Fall back to a jQuery object collection using $.fn.add()\n if ($.fn.jquery.substr(0, 3) === '1.7') {\n var $jqNodes = $();\n\n $.map($nodes, function (node) {\n $jqNodes = $jqNodes.add(node);\n });\n\n $nodes = $jqNodes;\n }\n\n $element.append($nodes);\n };\n\n // Cache objects in Utils.__cache instead of $.data (see #4346)\n Utils.__cache = {};\n\n var id = 0;\n Utils.GetUniqueElementId = function (element) {\n // Get a unique element Id. If element has no id,\n // creates a new unique number, stores it in the id\n // attribute and returns the new id.\n // If an id already exists, it simply returns it.\n\n var select2Id = element.getAttribute('data-select2-id');\n if (select2Id == null) {\n // If element has id, use it.\n if (element.id) {\n select2Id = element.id;\n element.setAttribute('data-select2-id', select2Id);\n } else {\n element.setAttribute('data-select2-id', ++id);\n select2Id = id.toString();\n }\n }\n return select2Id;\n };\n\n Utils.StoreData = function (element, name, value) {\n // Stores an item in the cache for a specified element.\n // name is the cache key.\n var id = Utils.GetUniqueElementId(element);\n if (!Utils.__cache[id]) {\n Utils.__cache[id] = {};\n }\n\n Utils.__cache[id][name] = value;\n };\n\n Utils.GetData = function (element, name) {\n // Retrieves a value from the cache by its key (name)\n // name is optional. If no name specified, return\n // all cache items for the specified element.\n // and for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (name) {\n if (Utils.__cache[id]) {\n if (Utils.__cache[id][name] != null) {\n return Utils.__cache[id][name];\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n } else {\n return Utils.__cache[id];\n }\n };\n\n Utils.RemoveData = function (element) {\n // Removes all cached items for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (Utils.__cache[id] != null) {\n delete Utils.__cache[id];\n }\n\n element.removeAttribute('data-select2-id');\n };\n\n return Utils;\n});\n\nS2.define('select2/results',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Results ($element, options, dataAdapter) {\n this.$element = $element;\n this.data = dataAdapter;\n this.options = options;\n\n Results.__super__.constructor.call(this);\n }\n\n Utils.Extend(Results, Utils.Observable);\n\n Results.prototype.render = function () {\n var $results = $(\n '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n );\n\n if (this.options.get('multiple')) {\n $results.attr('aria-multiselectable', 'true');\n }\n\n this.$results = $results;\n\n return $results;\n };\n\n Results.prototype.clear = function () {\n this.$results.empty();\n };\n\n Results.prototype.displayMessage = function (params) {\n var escapeMarkup = this.options.get('escapeMarkup');\n\n this.clear();\n this.hideLoading();\n\n var $message = $(\n '<li role=\"alert\" aria-live=\"assertive\"' +\n ' class=\"select2-results__option\"></li>'\n );\n\n var message = this.options.get('translations').get(params.message);\n\n $message.append(\n escapeMarkup(\n message(params.args)\n )\n );\n\n $message[0].className += ' select2-results__message';\n\n this.$results.append($message);\n };\n\n Results.prototype.hideMessages = function () {\n this.$results.find('.select2-results__message').remove();\n };\n\n Results.prototype.append = function (data) {\n this.hideLoading();\n\n var $options = [];\n\n if (data.results == null || data.results.length === 0) {\n if (this.$results.children().length === 0) {\n this.trigger('results:message', {\n message: 'noResults'\n });\n }\n\n return;\n }\n\n data.results = this.sort(data.results);\n\n for (var d = 0; d < data.results.length; d++) {\n var item = data.results[d];\n\n var $option = this.option(item);\n\n $options.push($option);\n }\n\n this.$results.append($options);\n };\n\n Results.prototype.position = function ($results, $dropdown) {\n var $resultsContainer = $dropdown.find('.select2-results');\n $resultsContainer.append($results);\n };\n\n Results.prototype.sort = function (data) {\n var sorter = this.options.get('sorter');\n\n return sorter(data);\n };\n\n Results.prototype.highlightFirstItem = function () {\n var $options = this.$results\n .find('.select2-results__option[aria-selected]');\n\n var $selected = $options.filter('[aria-selected=true]');\n\n // Check if there are any selected options\n if ($selected.length > 0) {\n // If there are selected options, highlight the first\n $selected.first().trigger('mouseenter');\n } else {\n // If there are no selected options, highlight the first option\n // in the dropdown\n $options.first().trigger('mouseenter');\n }\n\n this.ensureHighlightVisible();\n };\n\n Results.prototype.setClasses = function () {\n var self = this;\n\n this.data.current(function (selected) {\n var selectedIds = $.map(selected, function (s) {\n return s.id.toString();\n });\n\n var $options = self.$results\n .find('.select2-results__option[aria-selected]');\n\n $options.each(function () {\n var $option = $(this);\n\n var item = Utils.GetData(this, 'data');\n\n // id needs to be converted to a string when comparing\n var id = '' + item.id;\n\n if ((item.element != null && item.element.selected) ||\n (item.element == null && $.inArray(id, selectedIds) > -1)) {\n $option.attr('aria-selected', 'true');\n } else {\n $option.attr('aria-selected', 'false');\n }\n });\n\n });\n };\n\n Results.prototype.showLoading = function (params) {\n this.hideLoading();\n\n var loadingMore = this.options.get('translations').get('searching');\n\n var loading = {\n disabled: true,\n loading: true,\n text: loadingMore(params)\n };\n var $loading = this.option(loading);\n $loading.className += ' loading-results';\n\n this.$results.prepend($loading);\n };\n\n Results.prototype.hideLoading = function () {\n this.$results.find('.loading-results').remove();\n };\n\n Results.prototype.option = function (data) {\n var option = document.createElement('li');\n option.className = 'select2-results__option';\n\n var attrs = {\n 'role': 'option',\n 'aria-selected': 'false'\n };\n\n var matches = window.Element.prototype.matches ||\n window.Element.prototype.msMatchesSelector ||\n window.Element.prototype.webkitMatchesSelector;\n\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\n (data.element == null && data.disabled)) {\n delete attrs['aria-selected'];\n attrs['aria-disabled'] = 'true';\n }\n\n if (data.id == null) {\n delete attrs['aria-selected'];\n }\n\n if (data._resultId != null) {\n option.id = data._resultId;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n if (data.children) {\n attrs.role = 'group';\n attrs['aria-label'] = data.text;\n delete attrs['aria-selected'];\n }\n\n for (var attr in attrs) {\n var val = attrs[attr];\n\n option.setAttribute(attr, val);\n }\n\n if (data.children) {\n var $option = $(option);\n\n var label = document.createElement('strong');\n label.className = 'select2-results__group';\n\n var $label = $(label);\n this.template(data, label);\n\n var $children = [];\n\n for (var c = 0; c < data.children.length; c++) {\n var child = data.children[c];\n\n var $child = this.option(child);\n\n $children.push($child);\n }\n\n var $childrenContainer = $('<ul></ul>', {\n 'class': 'select2-results__options select2-results__options--nested'\n });\n\n $childrenContainer.append($children);\n\n $option.append(label);\n $option.append($childrenContainer);\n } else {\n this.template(data, option);\n }\n\n Utils.StoreData(option, 'data', data);\n\n return option;\n };\n\n Results.prototype.bind = function (container, $container) {\n var self = this;\n\n var id = container.id + '-results';\n\n this.$results.attr('id', id);\n\n container.on('results:all', function (params) {\n self.clear();\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n self.highlightFirstItem();\n }\n });\n\n container.on('results:append', function (params) {\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n }\n });\n\n container.on('query', function (params) {\n self.hideMessages();\n self.showLoading(params);\n });\n\n container.on('select', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('unselect', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expended=\"true\"\n self.$results.attr('aria-expanded', 'true');\n self.$results.attr('aria-hidden', 'false');\n\n self.setClasses();\n self.ensureHighlightVisible();\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expended=\"false\"\n self.$results.attr('aria-expanded', 'false');\n self.$results.attr('aria-hidden', 'true');\n self.$results.removeAttr('aria-activedescendant');\n });\n\n container.on('results:toggle', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n $highlighted.trigger('mouseup');\n });\n\n container.on('results:select', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var data = Utils.GetData($highlighted[0], 'data');\n\n if ($highlighted.attr('aria-selected') == 'true') {\n self.trigger('close', {});\n } else {\n self.trigger('select', {\n data: data\n });\n }\n });\n\n container.on('results:previous', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n // If we are already at the top, don't move further\n // If no options, currentIndex will be -1\n if (currentIndex <= 0) {\n return;\n }\n\n var nextIndex = currentIndex - 1;\n\n // If none are highlighted, highlight the first\n if ($highlighted.length === 0) {\n nextIndex = 0;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top;\n var nextTop = $next.offset().top;\n var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextTop - currentOffset < 0) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:next', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var nextIndex = currentIndex + 1;\n\n // If we are at the last option, stay there\n if (nextIndex >= $options.length) {\n return;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top +\n self.$results.outerHeight(false);\n var nextBottom = $next.offset().top + $next.outerHeight(false);\n var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextBottom > currentOffset) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:focus', function (params) {\n params.element.addClass('select2-results__option--highlighted');\n });\n\n container.on('results:message', function (params) {\n self.displayMessage(params);\n });\n\n if ($.fn.mousewheel) {\n this.$results.on('mousewheel', function (e) {\n var top = self.$results.scrollTop();\n\n var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n if (isAtTop) {\n self.$results.scrollTop(0);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (isAtBottom) {\n self.$results.scrollTop(\n self.$results.get(0).scrollHeight - self.$results.height()\n );\n\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n function (evt) {\n var $this = $(this);\n\n var data = Utils.GetData(this, 'data');\n\n if ($this.attr('aria-selected') === 'true') {\n if (self.options.get('multiple')) {\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n } else {\n self.trigger('close', {});\n }\n\n return;\n }\n\n self.trigger('select', {\n originalEvent: evt,\n data: data\n });\n });\n\n this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n function (evt) {\n var data = Utils.GetData(this, 'data');\n\n self.getHighlightedResults()\n .removeClass('select2-results__option--highlighted');\n\n self.trigger('results:focus', {\n data: data,\n element: $(this)\n });\n });\n };\n\n Results.prototype.getHighlightedResults = function () {\n var $highlighted = this.$results\n .find('.select2-results__option--highlighted');\n\n return $highlighted;\n };\n\n Results.prototype.destroy = function () {\n this.$results.remove();\n };\n\n Results.prototype.ensureHighlightVisible = function () {\n var $highlighted = this.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var $options = this.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var currentOffset = this.$results.offset().top;\n var nextTop = $highlighted.offset().top;\n var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n var offsetDelta = nextTop - currentOffset;\n nextOffset -= $highlighted.outerHeight(false) * 2;\n\n if (currentIndex <= 2) {\n this.$results.scrollTop(0);\n } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n this.$results.scrollTop(nextOffset);\n }\n };\n\n Results.prototype.template = function (result, container) {\n var template = this.options.get('templateResult');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n var content = template(result, container);\n\n if (content == null) {\n container.style.display = 'none';\n } else if (typeof content === 'string') {\n container.innerHTML = escapeMarkup(content);\n } else {\n $(container).append(content);\n }\n };\n\n return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n var KEYS = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n ESC: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n };\n\n return KEYS;\n});\n\nS2.define('select2/selection/base',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function BaseSelection ($element, options) {\n this.$element = $element;\n this.options = options;\n\n BaseSelection.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseSelection, Utils.Observable);\n\n BaseSelection.prototype.render = function () {\n var $selection = $(\n '<span class=\"select2-selection\" role=\"combobox\" ' +\n ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n '</span>'\n );\n\n this._tabindex = 0;\n\n if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n } else if (this.$element.attr('tabindex') != null) {\n this._tabindex = this.$element.attr('tabindex');\n }\n\n $selection.attr('title', this.$element.attr('title'));\n $selection.attr('tabindex', this._tabindex);\n $selection.attr('aria-disabled', 'false');\n\n this.$selection = $selection;\n\n return $selection;\n };\n\n BaseSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n this.container = container;\n\n this.$selection.on('focus', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('blur', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n if (evt.which === KEYS.SPACE) {\n evt.preventDefault();\n }\n });\n\n container.on('results:focus', function (params) {\n self.$selection.attr('aria-activedescendant', params.data._resultId);\n });\n\n container.on('selection:update', function (params) {\n self.update(params.data);\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expanded=\"true\"\n self.$selection.attr('aria-expanded', 'true');\n self.$selection.attr('aria-owns', resultsId);\n\n self._attachCloseHandler(container);\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expanded=\"false\"\n self.$selection.attr('aria-expanded', 'false');\n self.$selection.removeAttr('aria-activedescendant');\n self.$selection.removeAttr('aria-owns');\n\n self.$selection.trigger('focus');\n\n self._detachCloseHandler(container);\n });\n\n container.on('enable', function () {\n self.$selection.attr('tabindex', self._tabindex);\n self.$selection.attr('aria-disabled', 'false');\n });\n\n container.on('disable', function () {\n self.$selection.attr('tabindex', '-1');\n self.$selection.attr('aria-disabled', 'true');\n });\n };\n\n BaseSelection.prototype._handleBlur = function (evt) {\n var self = this;\n\n // This needs to be delayed as the active element is the body when the tab\n // key is pressed, possibly along with others.\n window.setTimeout(function () {\n // Don't trigger `blur` if the focus is still in the selection\n if (\n (document.activeElement == self.$selection[0]) ||\n ($.contains(self.$selection[0], document.activeElement))\n ) {\n return;\n }\n\n self.trigger('blur', evt);\n }, 1);\n };\n\n BaseSelection.prototype._attachCloseHandler = function (container) {\n\n $(document.body).on('mousedown.select2.' + container.id, function (e) {\n var $target = $(e.target);\n\n var $select = $target.closest('.select2');\n\n var $all = $('.select2.select2-container--open');\n\n $all.each(function () {\n if (this == $select[0]) {\n return;\n }\n\n var $element = Utils.GetData(this, 'element');\n\n $element.select2('close');\n });\n });\n };\n\n BaseSelection.prototype._detachCloseHandler = function (container) {\n $(document.body).off('mousedown.select2.' + container.id);\n };\n\n BaseSelection.prototype.position = function ($selection, $container) {\n var $selectionContainer = $container.find('.selection');\n $selectionContainer.append($selection);\n };\n\n BaseSelection.prototype.destroy = function () {\n this._detachCloseHandler(this.container);\n };\n\n BaseSelection.prototype.update = function (data) {\n throw new Error('The `update` method must be defined in child classes.');\n };\n\n /**\n * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n BaseSelection.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n BaseSelection.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n 'jquery',\n './base',\n '../utils',\n '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n function SingleSelection () {\n SingleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(SingleSelection, BaseSelection);\n\n SingleSelection.prototype.render = function () {\n var $selection = SingleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--single');\n\n $selection.html(\n '<span class=\"select2-selection__rendered\"></span>' +\n '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n '<b role=\"presentation\"></b>' +\n '</span>'\n );\n\n return $selection;\n };\n\n SingleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n SingleSelection.__super__.bind.apply(this, arguments);\n\n var id = container.id + '-container';\n\n this.$selection.find('.select2-selection__rendered')\n .attr('id', id)\n .attr('role', 'textbox')\n .attr('aria-readonly', 'true');\n this.$selection.attr('aria-labelledby', id);\n\n this.$selection.on('mousedown', function (evt) {\n // Only respond to left clicks\n if (evt.which !== 1) {\n return;\n }\n\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on('focus', function (evt) {\n // User focuses on the container\n });\n\n this.$selection.on('blur', function (evt) {\n // User exits the container\n });\n\n container.on('focus', function (evt) {\n if (!container.isOpen()) {\n self.$selection.trigger('focus');\n }\n });\n };\n\n SingleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title'); // clear tooltip on empty\n };\n\n SingleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n SingleSelection.prototype.selectionContainer = function () {\n return $('<span></span>');\n };\n\n SingleSelection.prototype.update = function (data) {\n if (data.length === 0) {\n this.clear();\n return;\n }\n\n var selection = data[0];\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n var formatted = this.display(selection, $rendered);\n\n $rendered.empty().append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $rendered.attr('title', title);\n } else {\n $rendered.removeAttr('title');\n }\n };\n\n return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n 'jquery',\n './base',\n '../utils'\n], function ($, BaseSelection, Utils) {\n function MultipleSelection ($element, options) {\n MultipleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(MultipleSelection, BaseSelection);\n\n MultipleSelection.prototype.render = function () {\n var $selection = MultipleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--multiple');\n\n $selection.html(\n '<ul class=\"select2-selection__rendered\"></ul>'\n );\n\n return $selection;\n };\n\n MultipleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n MultipleSelection.__super__.bind.apply(this, arguments);\n\n this.$selection.on('click', function (evt) {\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on(\n 'click',\n '.select2-selection__choice__remove',\n function (evt) {\n // Ignore the event if it is disabled\n if (self.isDisabled()) {\n return;\n }\n\n var $remove = $(this);\n var $selection = $remove.parent();\n\n var data = Utils.GetData($selection[0], 'data');\n\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n }\n );\n };\n\n MultipleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title');\n };\n\n MultipleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n MultipleSelection.prototype.selectionContainer = function () {\n var $container = $(\n '<li class=\"select2-selection__choice\">' +\n '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n '×' +\n '</span>' +\n '</li>'\n );\n\n return $container;\n };\n\n MultipleSelection.prototype.update = function (data) {\n this.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var $selections = [];\n\n for (var d = 0; d < data.length; d++) {\n var selection = data[d];\n\n var $selection = this.selectionContainer();\n var formatted = this.display(selection, $selection);\n\n $selection.append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $selection.attr('title', title);\n }\n\n Utils.StoreData($selection[0], 'data', selection);\n\n $selections.push($selection);\n }\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n\n Utils.appendMany($rendered, $selections);\n };\n\n return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n '../utils'\n], function (Utils) {\n function Placeholder (decorated, $element, options) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options);\n }\n\n Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n var $placeholder = this.selectionContainer();\n\n $placeholder.html(this.display(placeholder));\n $placeholder.addClass('select2-selection__placeholder')\n .removeClass('select2-selection__choice');\n\n return $placeholder;\n };\n\n Placeholder.prototype.update = function (decorated, data) {\n var singlePlaceholder = (\n data.length == 1 && data[0].id != this.placeholder.id\n );\n var multipleSelections = data.length > 1;\n\n if (multipleSelections || singlePlaceholder) {\n return decorated.call(this, data);\n }\n\n this.clear();\n\n var $placeholder = this.createPlaceholder(this.placeholder);\n\n this.$selection.find('.select2-selection__rendered').append($placeholder);\n };\n\n return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n 'jquery',\n '../keys',\n '../utils'\n], function ($, KEYS, Utils) {\n function AllowClear () { }\n\n AllowClear.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n if (this.placeholder == null) {\n if (this.options.get('debug') && window.console && console.error) {\n console.error(\n 'Select2: The `allowClear` option should be used in combination ' +\n 'with the `placeholder` option.'\n );\n }\n }\n\n this.$selection.on('mousedown', '.select2-selection__clear',\n function (evt) {\n self._handleClear(evt);\n });\n\n container.on('keypress', function (evt) {\n self._handleKeyboardClear(evt, container);\n });\n };\n\n AllowClear.prototype._handleClear = function (_, evt) {\n // Ignore the event if it is disabled\n if (this.isDisabled()) {\n return;\n }\n\n var $clear = this.$selection.find('.select2-selection__clear');\n\n // Ignore the event if nothing has been selected\n if ($clear.length === 0) {\n return;\n }\n\n evt.stopPropagation();\n\n var data = Utils.GetData($clear[0], 'data');\n\n var previousVal = this.$element.val();\n this.$element.val(this.placeholder.id);\n\n var unselectData = {\n data: data\n };\n this.trigger('clear', unselectData);\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n\n for (var d = 0; d < data.length; d++) {\n unselectData = {\n data: data[d]\n };\n\n // Trigger the `unselect` event, so people can prevent it from being\n // cleared.\n this.trigger('unselect', unselectData);\n\n // If the event was prevented, don't clear it out.\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n }\n\n this.$element.trigger('input').trigger('change');\n\n this.trigger('toggle', {});\n };\n\n AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n if (container.isOpen()) {\n return;\n }\n\n if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n this._handleClear(evt);\n }\n };\n\n AllowClear.prototype.update = function (decorated, data) {\n decorated.call(this, data);\n\n if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n data.length === 0) {\n return;\n }\n\n var removeAll = this.options.get('translations').get('removeAllItems');\n\n var $remove = $(\n '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n '×' +\n '</span>'\n );\n Utils.StoreData($remove[0], 'data', data);\n\n this.$selection.find('.select2-selection__rendered').prepend($remove);\n };\n\n return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function Search (decorated, $element, options) {\n decorated.call(this, $element, options);\n }\n\n Search.prototype.render = function (decorated) {\n var $search = $(\n '<li class=\"select2-search select2-search--inline\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</li>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n var $rendered = decorated.call(this);\n\n this._transferTabIndex();\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\n });\n\n container.on('close', function () {\n self.$search.val('');\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n self.$search.trigger('focus');\n });\n\n container.on('enable', function () {\n self.$search.prop('disabled', false);\n\n self._transferTabIndex();\n });\n\n container.on('disable', function () {\n self.$search.prop('disabled', true);\n });\n\n container.on('focus', function (evt) {\n self.$search.trigger('focus');\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n\n this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n evt.stopPropagation();\n\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n\n var key = evt.which;\n\n if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n var $previousChoice = self.$searchContainer\n .prev('.select2-selection__choice');\n\n if ($previousChoice.length > 0) {\n var item = Utils.GetData($previousChoice[0], 'data');\n\n self.searchRemoveChoice(item);\n\n evt.preventDefault();\n }\n }\n });\n\n this.$selection.on('click', '.select2-search--inline', function (evt) {\n if (self.$search.val()) {\n evt.stopPropagation();\n }\n });\n\n // Try to detect the IE version should the `documentMode` property that\n // is stored on the document. This is only implemented in IE and is\n // slightly cleaner than doing a user agent check.\n // This property is not available in Edge, but Edge also doesn't have\n // this bug.\n var msie = document.documentMode;\n var disableInputEvents = msie && msie <= 11;\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$selection.on(\n 'input.searchcheck',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents) {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n // Unbind the duplicated `keyup` event\n self.$selection.off('keyup.search');\n }\n );\n\n this.$selection.on(\n 'keyup.search input.search',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents && evt.type === 'input') {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n var key = evt.which;\n\n // We can freely ignore events from modifier keys\n if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n return;\n }\n\n // Tabbing will be handled during the `keydown` phase\n if (key == KEYS.TAB) {\n return;\n }\n\n self.handleSearch(evt);\n }\n );\n };\n\n /**\n * This method will transfer the tabindex attribute from the rendered\n * selection to the search box. This allows for the search box to be used as\n * the primary focus instead of the selection container.\n *\n * @private\n */\n Search.prototype._transferTabIndex = function (decorated) {\n this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n this.$selection.attr('tabindex', '-1');\n };\n\n Search.prototype.createPlaceholder = function (decorated, placeholder) {\n this.$search.attr('placeholder', placeholder.text);\n };\n\n Search.prototype.update = function (decorated, data) {\n var searchHadFocus = this.$search[0] == document.activeElement;\n\n this.$search.attr('placeholder', '');\n\n decorated.call(this, data);\n\n this.$selection.find('.select2-selection__rendered')\n .append(this.$searchContainer);\n\n this.resizeSearch();\n if (searchHadFocus) {\n this.$search.trigger('focus');\n }\n };\n\n Search.prototype.handleSearch = function () {\n this.resizeSearch();\n\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.searchRemoveChoice = function (decorated, item) {\n this.trigger('unselect', {\n data: item\n });\n\n this.$search.val(item.text);\n this.handleSearch();\n };\n\n Search.prototype.resizeSearch = function () {\n this.$search.css('width', '25px');\n\n var width = '';\n\n if (this.$search.attr('placeholder') !== '') {\n width = this.$selection.find('.select2-selection__rendered').width();\n } else {\n var minimumWidth = this.$search.val().length + 1;\n\n width = (minimumWidth * 0.75) + 'em';\n }\n\n this.$search.css('width', width);\n };\n\n return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n 'jquery'\n], function ($) {\n function EventRelay () { }\n\n EventRelay.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var relayEvents = [\n 'open', 'opening',\n 'close', 'closing',\n 'select', 'selecting',\n 'unselect', 'unselecting',\n 'clear', 'clearing'\n ];\n\n var preventableEvents = [\n 'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n ];\n\n decorated.call(this, container, $container);\n\n container.on('*', function (name, params) {\n // Ignore events that should not be relayed\n if ($.inArray(name, relayEvents) === -1) {\n return;\n }\n\n // The parameters should always be an object\n params = params || {};\n\n // Generate the jQuery event for the Select2 event\n var evt = $.Event('select2:' + name, {\n params: params\n });\n\n self.$element.trigger(evt);\n\n // Only handle preventable events if it was one\n if ($.inArray(name, preventableEvents) === -1) {\n return;\n }\n\n params.prevented = evt.isDefaultPrevented();\n });\n };\n\n return EventRelay;\n});\n\nS2.define('select2/translation',[\n 'jquery',\n 'require'\n], function ($, require) {\n function Translation (dict) {\n this.dict = dict || {};\n }\n\n Translation.prototype.all = function () {\n return this.dict;\n };\n\n Translation.prototype.get = function (key) {\n return this.dict[key];\n };\n\n Translation.prototype.extend = function (translation) {\n this.dict = $.extend({}, translation.all(), this.dict);\n };\n\n // Static functions\n\n Translation._cache = {};\n\n Translation.loadPath = function (path) {\n if (!(path in Translation._cache)) {\n var translations = require(path);\n\n Translation._cache[path] = translations;\n }\n\n return new Translation(Translation._cache[path]);\n };\n\n return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n var diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u0152': 'OE',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u0153': 'oe',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03CE': '\\u03C9',\n '\\u03C2': '\\u03C3',\n '\\u2019': '\\''\n };\n\n return diacritics;\n});\n\nS2.define('select2/data/base',[\n '../utils'\n], function (Utils) {\n function BaseAdapter ($element, options) {\n BaseAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseAdapter, Utils.Observable);\n\n BaseAdapter.prototype.current = function (callback) {\n throw new Error('The `current` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.query = function (params, callback) {\n throw new Error('The `query` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.bind = function (container, $container) {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.destroy = function () {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.generateResultId = function (container, data) {\n var id = container.id + '-result-';\n\n id += Utils.generateChars(4);\n\n if (data.id != null) {\n id += '-' + data.id.toString();\n } else {\n id += '-' + Utils.generateChars(4);\n }\n return id;\n };\n\n return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n './base',\n '../utils',\n 'jquery'\n], function (BaseAdapter, Utils, $) {\n function SelectAdapter ($element, options) {\n this.$element = $element;\n this.options = options;\n\n SelectAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(SelectAdapter, BaseAdapter);\n\n SelectAdapter.prototype.current = function (callback) {\n var data = [];\n var self = this;\n\n this.$element.find(':selected').each(function () {\n var $option = $(this);\n\n var option = self.item($option);\n\n data.push(option);\n });\n\n callback(data);\n };\n\n SelectAdapter.prototype.select = function (data) {\n var self = this;\n\n data.selected = true;\n\n // If data.element is a DOM node, use it instead\n if ($(data.element).is('option')) {\n data.element.selected = true;\n\n this.$element.trigger('input').trigger('change');\n\n return;\n }\n\n if (this.$element.prop('multiple')) {\n this.current(function (currentData) {\n var val = [];\n\n data = [data];\n data.push.apply(data, currentData);\n\n for (var d = 0; d < data.length; d++) {\n var id = data[d].id;\n\n if ($.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n self.$element.trigger('input').trigger('change');\n });\n } else {\n var val = data.id;\n\n this.$element.val(val);\n this.$element.trigger('input').trigger('change');\n }\n };\n\n SelectAdapter.prototype.unselect = function (data) {\n var self = this;\n\n if (!this.$element.prop('multiple')) {\n return;\n }\n\n data.selected = false;\n\n if ($(data.element).is('option')) {\n data.element.selected = false;\n\n this.$element.trigger('input').trigger('change');\n\n return;\n }\n\n this.current(function (currentData) {\n var val = [];\n\n for (var d = 0; d < currentData.length; d++) {\n var id = currentData[d].id;\n\n if (id !== data.id && $.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n\n self.$element.trigger('input').trigger('change');\n });\n };\n\n SelectAdapter.prototype.bind = function (container, $container) {\n var self = this;\n\n this.container = container;\n\n container.on('select', function (params) {\n self.select(params.data);\n });\n\n container.on('unselect', function (params) {\n self.unselect(params.data);\n });\n };\n\n SelectAdapter.prototype.destroy = function () {\n // Remove anything added to child elements\n this.$element.find('*').each(function () {\n // Remove any custom data set by Select2\n Utils.RemoveData(this);\n });\n };\n\n SelectAdapter.prototype.query = function (params, callback) {\n var data = [];\n var self = this;\n\n var $options = this.$element.children();\n\n $options.each(function () {\n var $option = $(this);\n\n if (!$option.is('option') && !$option.is('optgroup')) {\n return;\n }\n\n var option = self.item($option);\n\n var matches = self.matches(params, option);\n\n if (matches !== null) {\n data.push(matches);\n }\n });\n\n callback({\n results: data\n });\n };\n\n SelectAdapter.prototype.addOptions = function ($options) {\n Utils.appendMany(this.$element, $options);\n };\n\n SelectAdapter.prototype.option = function (data) {\n var option;\n\n if (data.children) {\n option = document.createElement('optgroup');\n option.label = data.text;\n } else {\n option = document.createElement('option');\n\n if (option.textContent !== undefined) {\n option.textContent = data.text;\n } else {\n option.innerText = data.text;\n }\n }\n\n if (data.id !== undefined) {\n option.value = data.id;\n }\n\n if (data.disabled) {\n option.disabled = true;\n }\n\n if (data.selected) {\n option.selected = true;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n var $option = $(option);\n\n var normalizedData = this._normalizeItem(data);\n normalizedData.element = option;\n\n // Override the option's data with the combined data\n Utils.StoreData(option, 'data', normalizedData);\n\n return $option;\n };\n\n SelectAdapter.prototype.item = function ($option) {\n var data = {};\n\n data = Utils.GetData($option[0], 'data');\n\n if (data != null) {\n return data;\n }\n\n if ($option.is('option')) {\n data = {\n id: $option.val(),\n text: $option.text(),\n disabled: $option.prop('disabled'),\n selected: $option.prop('selected'),\n title: $option.prop('title')\n };\n } else if ($option.is('optgroup')) {\n data = {\n text: $option.prop('label'),\n children: [],\n title: $option.prop('title')\n };\n\n var $children = $option.children('option');\n var children = [];\n\n for (var c = 0; c < $children.length; c++) {\n var $child = $($children[c]);\n\n var child = this.item($child);\n\n children.push(child);\n }\n\n data.children = children;\n }\n\n data = this._normalizeItem(data);\n data.element = $option[0];\n\n Utils.StoreData($option[0], 'data', data);\n\n return data;\n };\n\n SelectAdapter.prototype._normalizeItem = function (item) {\n if (item !== Object(item)) {\n item = {\n id: item,\n text: item\n };\n }\n\n item = $.extend({}, {\n text: ''\n }, item);\n\n var defaults = {\n selected: false,\n disabled: false\n };\n\n if (item.id != null) {\n item.id = item.id.toString();\n }\n\n if (item.text != null) {\n item.text = item.text.toString();\n }\n\n if (item._resultId == null && item.id && this.container != null) {\n item._resultId = this.generateResultId(this.container, item);\n }\n\n return $.extend({}, defaults, item);\n };\n\n SelectAdapter.prototype.matches = function (params, data) {\n var matcher = this.options.get('matcher');\n\n return matcher(params, data);\n };\n\n return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n './select',\n '../utils',\n 'jquery'\n], function (SelectAdapter, Utils, $) {\n function ArrayAdapter ($element, options) {\n this._dataToConvert = options.get('data') || [];\n\n ArrayAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(ArrayAdapter, SelectAdapter);\n\n ArrayAdapter.prototype.bind = function (container, $container) {\n ArrayAdapter.__super__.bind.call(this, container, $container);\n\n this.addOptions(this.convertToOptions(this._dataToConvert));\n };\n\n ArrayAdapter.prototype.select = function (data) {\n var $option = this.$element.find('option').filter(function (i, elm) {\n return elm.value == data.id.toString();\n });\n\n if ($option.length === 0) {\n $option = this.option(data);\n\n this.addOptions($option);\n }\n\n ArrayAdapter.__super__.select.call(this, data);\n };\n\n ArrayAdapter.prototype.convertToOptions = function (data) {\n var self = this;\n\n var $existing = this.$element.find('option');\n var existingIds = $existing.map(function () {\n return self.item($(this)).id;\n }).get();\n\n var $options = [];\n\n // Filter out all items except for the one passed in the argument\n function onlyItem (item) {\n return function () {\n return $(this).val() == item.id;\n };\n }\n\n for (var d = 0; d < data.length; d++) {\n var item = this._normalizeItem(data[d]);\n\n // Skip items which were pre-loaded, only merge the data\n if ($.inArray(item.id, existingIds) >= 0) {\n var $existingOption = $existing.filter(onlyItem(item));\n\n var existingData = this.item($existingOption);\n var newData = $.extend(true, {}, item, existingData);\n\n var $newOption = this.option(newData);\n\n $existingOption.replaceWith($newOption);\n\n continue;\n }\n\n var $option = this.option(item);\n\n if (item.children) {\n var $children = this.convertToOptions(item.children);\n\n Utils.appendMany($option, $children);\n }\n\n $options.push($option);\n }\n\n return $options;\n };\n\n return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n './array',\n '../utils',\n 'jquery'\n], function (ArrayAdapter, Utils, $) {\n function AjaxAdapter ($element, options) {\n this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n if (this.ajaxOptions.processResults != null) {\n this.processResults = this.ajaxOptions.processResults;\n }\n\n AjaxAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n AjaxAdapter.prototype._applyDefaults = function (options) {\n var defaults = {\n data: function (params) {\n return $.extend({}, params, {\n q: params.term\n });\n },\n transport: function (params, success, failure) {\n var $request = $.ajax(params);\n\n $request.then(success);\n $request.fail(failure);\n\n return $request;\n }\n };\n\n return $.extend({}, defaults, options, true);\n };\n\n AjaxAdapter.prototype.processResults = function (results) {\n return results;\n };\n\n AjaxAdapter.prototype.query = function (params, callback) {\n var matches = [];\n var self = this;\n\n if (this._request != null) {\n // JSONP requests cannot always be aborted\n if ($.isFunction(this._request.abort)) {\n this._request.abort();\n }\n\n this._request = null;\n }\n\n var options = $.extend({\n type: 'GET'\n }, this.ajaxOptions);\n\n if (typeof options.url === 'function') {\n options.url = options.url.call(this.$element, params);\n }\n\n if (typeof options.data === 'function') {\n options.data = options.data.call(this.$element, params);\n }\n\n function request () {\n var $request = options.transport(options, function (data) {\n var results = self.processResults(data, params);\n\n if (self.options.get('debug') && window.console && console.error) {\n // Check to make sure that the response included a `results` key.\n if (!results || !results.results || !$.isArray(results.results)) {\n console.error(\n 'Select2: The AJAX results did not return an array in the ' +\n '`results` key of the response.'\n );\n }\n }\n\n callback(results);\n }, function () {\n // Attempt to detect if a request was aborted\n // Only works if the transport exposes a status property\n if ('status' in $request &&\n ($request.status === 0 || $request.status === '0')) {\n return;\n }\n\n self.trigger('results:message', {\n message: 'errorLoading'\n });\n });\n\n self._request = $request;\n }\n\n if (this.ajaxOptions.delay && params.term != null) {\n if (this._queryTimeout) {\n window.clearTimeout(this._queryTimeout);\n }\n\n this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n } else {\n request();\n }\n };\n\n return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n 'jquery'\n], function ($) {\n function Tags (decorated, $element, options) {\n var tags = options.get('tags');\n\n var createTag = options.get('createTag');\n\n if (createTag !== undefined) {\n this.createTag = createTag;\n }\n\n var insertTag = options.get('insertTag');\n\n if (insertTag !== undefined) {\n this.insertTag = insertTag;\n }\n\n decorated.call(this, $element, options);\n\n if ($.isArray(tags)) {\n for (var t = 0; t < tags.length; t++) {\n var tag = tags[t];\n var item = this._normalizeItem(tag);\n\n var $option = this.option(item);\n\n this.$element.append($option);\n }\n }\n }\n\n Tags.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n this._removeOldTags();\n\n if (params.term == null || params.page != null) {\n decorated.call(this, params, callback);\n return;\n }\n\n function wrapper (obj, child) {\n var data = obj.results;\n\n for (var i = 0; i < data.length; i++) {\n var option = data[i];\n\n var checkChildren = (\n option.children != null &&\n !wrapper({\n results: option.children\n }, true)\n );\n\n var optionText = (option.text || '').toUpperCase();\n var paramsTerm = (params.term || '').toUpperCase();\n\n var checkText = optionText === paramsTerm;\n\n if (checkText || checkChildren) {\n if (child) {\n return false;\n }\n\n obj.data = data;\n callback(obj);\n\n return;\n }\n }\n\n if (child) {\n return true;\n }\n\n var tag = self.createTag(params);\n\n if (tag != null) {\n var $option = self.option(tag);\n $option.attr('data-select2-tag', true);\n\n self.addOptions([$option]);\n\n self.insertTag(data, tag);\n }\n\n obj.results = data;\n\n callback(obj);\n }\n\n decorated.call(this, params, wrapper);\n };\n\n Tags.prototype.createTag = function (decorated, params) {\n var term = $.trim(params.term);\n\n if (term === '') {\n return null;\n }\n\n return {\n id: term,\n text: term\n };\n };\n\n Tags.prototype.insertTag = function (_, data, tag) {\n data.unshift(tag);\n };\n\n Tags.prototype._removeOldTags = function (_) {\n var $options = this.$element.find('option[data-select2-tag]');\n\n $options.each(function () {\n if (this.selected) {\n return;\n }\n\n $(this).remove();\n });\n };\n\n return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n 'jquery'\n], function ($) {\n function Tokenizer (decorated, $element, options) {\n var tokenizer = options.get('tokenizer');\n\n if (tokenizer !== undefined) {\n this.tokenizer = tokenizer;\n }\n\n decorated.call(this, $element, options);\n }\n\n Tokenizer.prototype.bind = function (decorated, container, $container) {\n decorated.call(this, container, $container);\n\n this.$search = container.dropdown.$search || container.selection.$search ||\n $container.find('.select2-search__field');\n };\n\n Tokenizer.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n function createAndSelect (data) {\n // Normalize the data object so we can use it for checks\n var item = self._normalizeItem(data);\n\n // Check if the data object already exists as a tag\n // Select it if it doesn't\n var $existingOptions = self.$element.find('option').filter(function () {\n return $(this).val() === item.id;\n });\n\n // If an existing option wasn't found for it, create the option\n if (!$existingOptions.length) {\n var $option = self.option(item);\n $option.attr('data-select2-tag', true);\n\n self._removeOldTags();\n self.addOptions([$option]);\n }\n\n // Select the item, now that we know there is an option for it\n select(item);\n }\n\n function select (data) {\n self.trigger('select', {\n data: data\n });\n }\n\n params.term = params.term || '';\n\n var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n if (tokenData.term !== params.term) {\n // Replace the search term if we have the search box\n if (this.$search.length) {\n this.$search.val(tokenData.term);\n this.$search.trigger('focus');\n }\n\n params.term = tokenData.term;\n }\n\n decorated.call(this, params, callback);\n };\n\n Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n var separators = options.get('tokenSeparators') || [];\n var term = params.term;\n var i = 0;\n\n var createTag = this.createTag || function (params) {\n return {\n id: params.term,\n text: params.term\n };\n };\n\n while (i < term.length) {\n var termChar = term[i];\n\n if ($.inArray(termChar, separators) === -1) {\n i++;\n\n continue;\n }\n\n var part = term.substr(0, i);\n var partParams = $.extend({}, params, {\n term: part\n });\n\n var data = createTag(partParams);\n\n if (data == null) {\n i++;\n continue;\n }\n\n callback(data);\n\n // Reset the term to not include the tokenized portion\n term = term.substr(i + 1) || '';\n i = 0;\n }\n\n return {\n term: term\n };\n };\n\n return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n function MinimumInputLength (decorated, $e, options) {\n this.minimumInputLength = options.get('minimumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MinimumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (params.term.length < this.minimumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooShort',\n args: {\n minimum: this.minimumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n function MaximumInputLength (decorated, $e, options) {\n this.maximumInputLength = options.get('maximumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (this.maximumInputLength > 0 &&\n params.term.length > this.maximumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooLong',\n args: {\n maximum: this.maximumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n function MaximumSelectionLength (decorated, $e, options) {\n this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumSelectionLength.prototype.bind =\n function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function () {\n self._checkIfMaximumSelected();\n });\n };\n\n MaximumSelectionLength.prototype.query =\n function (decorated, params, callback) {\n var self = this;\n\n this._checkIfMaximumSelected(function () {\n decorated.call(self, params, callback);\n });\n };\n\n MaximumSelectionLength.prototype._checkIfMaximumSelected =\n function (_, successCallback) {\n var self = this;\n\n this.current(function (currentData) {\n var count = currentData != null ? currentData.length : 0;\n if (self.maximumSelectionLength > 0 &&\n count >= self.maximumSelectionLength) {\n self.trigger('results:message', {\n message: 'maximumSelected',\n args: {\n maximum: self.maximumSelectionLength\n }\n });\n return;\n }\n\n if (successCallback) {\n successCallback();\n }\n });\n };\n\n return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Dropdown ($element, options) {\n this.$element = $element;\n this.options = options;\n\n Dropdown.__super__.constructor.call(this);\n }\n\n Utils.Extend(Dropdown, Utils.Observable);\n\n Dropdown.prototype.render = function () {\n var $dropdown = $(\n '<span class=\"select2-dropdown\">' +\n '<span class=\"select2-results\"></span>' +\n '</span>'\n );\n\n $dropdown.attr('dir', this.options.get('dir'));\n\n this.$dropdown = $dropdown;\n\n return $dropdown;\n };\n\n Dropdown.prototype.bind = function () {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.position = function ($dropdown, $container) {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.destroy = function () {\n // Remove the dropdown from the DOM\n this.$dropdown.remove();\n };\n\n return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function Search () { }\n\n Search.prototype.render = function (decorated) {\n var $rendered = decorated.call(this);\n\n var $search = $(\n '<span class=\"select2-search select2-search--dropdown\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</span>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n $rendered.prepend($search);\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n this.$search.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n });\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$search.on('input', function (evt) {\n // Unbind the duplicated `keyup` event\n $(this).off('keyup');\n });\n\n this.$search.on('keyup input', function (evt) {\n self.handleSearch(evt);\n });\n\n container.on('open', function () {\n self.$search.attr('tabindex', 0);\n self.$search.attr('aria-controls', resultsId);\n\n self.$search.trigger('focus');\n\n window.setTimeout(function () {\n self.$search.trigger('focus');\n }, 0);\n });\n\n container.on('close', function () {\n self.$search.attr('tabindex', -1);\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n\n self.$search.val('');\n self.$search.trigger('blur');\n });\n\n container.on('focus', function () {\n if (!container.isOpen()) {\n self.$search.trigger('focus');\n }\n });\n\n container.on('results:all', function (params) {\n if (params.query.term == null || params.query.term === '') {\n var showSearch = self.showSearch(params);\n\n if (showSearch) {\n self.$searchContainer.removeClass('select2-search--hide');\n } else {\n self.$searchContainer.addClass('select2-search--hide');\n }\n }\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n };\n\n Search.prototype.handleSearch = function (evt) {\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.showSearch = function (_, params) {\n return true;\n };\n\n return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n function HidePlaceholder (decorated, $element, options, dataAdapter) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n HidePlaceholder.prototype.append = function (decorated, data) {\n data.results = this.removePlaceholder(data.results);\n\n decorated.call(this, data);\n };\n\n HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n var modifiedData = data.slice(0);\n\n for (var d = data.length - 1; d >= 0; d--) {\n var item = data[d];\n\n if (this.placeholder.id === item.id) {\n modifiedData.splice(d, 1);\n }\n }\n\n return modifiedData;\n };\n\n return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n 'jquery'\n], function ($) {\n function InfiniteScroll (decorated, $element, options, dataAdapter) {\n this.lastParams = {};\n\n decorated.call(this, $element, options, dataAdapter);\n\n this.$loadingMore = this.createLoadingMore();\n this.loading = false;\n }\n\n InfiniteScroll.prototype.append = function (decorated, data) {\n this.$loadingMore.remove();\n this.loading = false;\n\n decorated.call(this, data);\n\n if (this.showLoadingMore(data)) {\n this.$results.append(this.$loadingMore);\n this.loadMoreIfNeeded();\n }\n };\n\n InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('query', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n container.on('query:append', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n };\n\n InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n var isLoadMoreVisible = $.contains(\n document.documentElement,\n this.$loadingMore[0]\n );\n\n if (this.loading || !isLoadMoreVisible) {\n return;\n }\n\n var currentOffset = this.$results.offset().top +\n this.$results.outerHeight(false);\n var loadingMoreOffset = this.$loadingMore.offset().top +\n this.$loadingMore.outerHeight(false);\n\n if (currentOffset + 50 >= loadingMoreOffset) {\n this.loadMore();\n }\n };\n\n InfiniteScroll.prototype.loadMore = function () {\n this.loading = true;\n\n var params = $.extend({}, {page: 1}, this.lastParams);\n\n params.page++;\n\n this.trigger('query:append', params);\n };\n\n InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n return data.pagination && data.pagination.more;\n };\n\n InfiniteScroll.prototype.createLoadingMore = function () {\n var $option = $(\n '<li ' +\n 'class=\"select2-results__option select2-results__option--load-more\"' +\n 'role=\"option\" aria-disabled=\"true\"></li>'\n );\n\n var message = this.options.get('translations').get('loadingMore');\n\n $option.html(message(this.lastParams));\n\n return $option;\n };\n\n return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function AttachBody (decorated, $element, options) {\n this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n decorated.call(this, $element, options);\n }\n\n AttachBody.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self._showDropdown();\n self._attachPositioningHandler(container);\n\n // Must bind after the results handlers to ensure correct sizing\n self._bindContainerResultHandlers(container);\n });\n\n container.on('close', function () {\n self._hideDropdown();\n self._detachPositioningHandler(container);\n });\n\n this.$dropdownContainer.on('mousedown', function (evt) {\n evt.stopPropagation();\n });\n };\n\n AttachBody.prototype.destroy = function (decorated) {\n decorated.call(this);\n\n this.$dropdownContainer.remove();\n };\n\n AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n // Clone all of the container classes\n $dropdown.attr('class', $container.attr('class'));\n\n $dropdown.removeClass('select2');\n $dropdown.addClass('select2-container--open');\n\n $dropdown.css({\n position: 'absolute',\n top: -999999\n });\n\n this.$container = $container;\n };\n\n AttachBody.prototype.render = function (decorated) {\n var $container = $('<span></span>');\n\n var $dropdown = decorated.call(this);\n $container.append($dropdown);\n\n this.$dropdownContainer = $container;\n\n return $container;\n };\n\n AttachBody.prototype._hideDropdown = function (decorated) {\n this.$dropdownContainer.detach();\n };\n\n AttachBody.prototype._bindContainerResultHandlers =\n function (decorated, container) {\n\n // These should only be bound once\n if (this._containerResultsHandlersBound) {\n return;\n }\n\n var self = this;\n\n container.on('results:all', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:append', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:message', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('select', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('unselect', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n this._containerResultsHandlersBound = true;\n };\n\n AttachBody.prototype._attachPositioningHandler =\n function (decorated, container) {\n var self = this;\n\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.each(function () {\n Utils.StoreData(this, 'select2-scroll-position', {\n x: $(this).scrollLeft(),\n y: $(this).scrollTop()\n });\n });\n\n $watchers.on(scrollEvent, function (ev) {\n var position = Utils.GetData(this, 'select2-scroll-position');\n $(this).scrollTop(position.y);\n });\n\n $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n function (e) {\n self._positionDropdown();\n self._resizeDropdown();\n });\n };\n\n AttachBody.prototype._detachPositioningHandler =\n function (decorated, container) {\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.off(scrollEvent);\n\n $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n };\n\n AttachBody.prototype._positionDropdown = function () {\n var $window = $(window);\n\n var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n var newDirection = null;\n\n var offset = this.$container.offset();\n\n offset.bottom = offset.top + this.$container.outerHeight(false);\n\n var container = {\n height: this.$container.outerHeight(false)\n };\n\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n\n var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n var css = {\n left: offset.left,\n top: container.bottom\n };\n\n // Determine what the parent element is to use for calculating the offset\n var $offsetParent = this.$dropdownParent;\n\n // For statically positioned elements, we need to get the element\n // that is determining the offset\n if ($offsetParent.css('position') === 'static') {\n $offsetParent = $offsetParent.offsetParent();\n }\n\n var parentOffset = {\n top: 0,\n left: 0\n };\n\n if (\n $.contains(document.body, $offsetParent[0]) ||\n $offsetParent[0].isConnected\n ) {\n parentOffset = $offsetParent.offset();\n }\n\n css.top -= parentOffset.top;\n css.left -= parentOffset.left;\n\n if (!isCurrentlyAbove && !isCurrentlyBelow) {\n newDirection = 'below';\n }\n\n if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n newDirection = 'above';\n } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n newDirection = 'below';\n }\n\n if (newDirection == 'above' ||\n (isCurrentlyAbove && newDirection !== 'below')) {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown\n .removeClass('select2-dropdown--below select2-dropdown--above')\n .addClass('select2-dropdown--' + newDirection);\n this.$container\n .removeClass('select2-container--below select2-container--above')\n .addClass('select2-container--' + newDirection);\n }\n\n this.$dropdownContainer.css(css);\n };\n\n AttachBody.prototype._resizeDropdown = function () {\n var css = {\n width: this.$container.outerWidth(false) + 'px'\n };\n\n if (this.options.get('dropdownAutoWidth')) {\n css.minWidth = css.width;\n css.position = 'relative';\n css.width = 'auto';\n }\n\n this.$dropdown.css(css);\n };\n\n AttachBody.prototype._showDropdown = function (decorated) {\n this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n this._positionDropdown();\n this._resizeDropdown();\n };\n\n return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n function countResults (data) {\n var count = 0;\n\n for (var d = 0; d < data.length; d++) {\n var item = data[d];\n\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n }\n\n return count;\n }\n\n function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n if (this.minimumResultsForSearch < 0) {\n this.minimumResultsForSearch = Infinity;\n }\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n if (countResults(params.data.results) < this.minimumResultsForSearch) {\n return false;\n }\n\n return decorated.call(this, params);\n };\n\n return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n '../utils'\n], function (Utils) {\n function SelectOnClose () { }\n\n SelectOnClose.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('close', function (params) {\n self._handleSelectOnClose(params);\n });\n };\n\n SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n if (params && params.originalSelect2Event != null) {\n var event = params.originalSelect2Event;\n\n // Don't select an item if the close event was triggered from a select or\n // unselect event\n if (event._type === 'select' || event._type === 'unselect') {\n return;\n }\n }\n\n var $highlightedResults = this.getHighlightedResults();\n\n // Only select highlighted results\n if ($highlightedResults.length < 1) {\n return;\n }\n\n var data = Utils.GetData($highlightedResults[0], 'data');\n\n // Don't re-select already selected resulte\n if (\n (data.element != null && data.element.selected) ||\n (data.element == null && data.selected)\n ) {\n return;\n }\n\n this.trigger('select', {\n data: data\n });\n };\n\n return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n function CloseOnSelect () { }\n\n CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function (evt) {\n self._selectTriggered(evt);\n });\n\n container.on('unselect', function (evt) {\n self._selectTriggered(evt);\n });\n };\n\n CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n var originalEvent = evt.originalEvent;\n\n // Don't close if the control key is being held\n if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n return;\n }\n\n this.trigger('close', {\n originalEvent: originalEvent,\n originalSelect2Event: evt\n });\n };\n\n return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n // English\n return {\n errorLoading: function () {\n return 'The results could not be loaded.';\n },\n inputTooLong: function (args) {\n var overChars = args.input.length - args.maximum;\n\n var message = 'Please delete ' + overChars + ' character';\n\n if (overChars != 1) {\n message += 's';\n }\n\n return message;\n },\n inputTooShort: function (args) {\n var remainingChars = args.minimum - args.input.length;\n\n var message = 'Please enter ' + remainingChars + ' or more characters';\n\n return message;\n },\n loadingMore: function () {\n return 'Loading more results…';\n },\n maximumSelected: function (args) {\n var message = 'You can only select ' + args.maximum + ' item';\n\n if (args.maximum != 1) {\n message += 's';\n }\n\n return message;\n },\n noResults: function () {\n return 'No results found';\n },\n searching: function () {\n return 'Searching…';\n },\n removeAllItems: function () {\n return 'Remove all items';\n }\n };\n});\n\nS2.define('select2/defaults',[\n 'jquery',\n 'require',\n\n './results',\n\n './selection/single',\n './selection/multiple',\n './selection/placeholder',\n './selection/allowClear',\n './selection/search',\n './selection/eventRelay',\n\n './utils',\n './translation',\n './diacritics',\n\n './data/select',\n './data/array',\n './data/ajax',\n './data/tags',\n './data/tokenizer',\n './data/minimumInputLength',\n './data/maximumInputLength',\n './data/maximumSelectionLength',\n\n './dropdown',\n './dropdown/search',\n './dropdown/hidePlaceholder',\n './dropdown/infiniteScroll',\n './dropdown/attachBody',\n './dropdown/minimumResultsForSearch',\n './dropdown/selectOnClose',\n './dropdown/closeOnSelect',\n\n './i18n/en'\n], function ($, require,\n\n ResultsList,\n\n SingleSelection, MultipleSelection, Placeholder, AllowClear,\n SelectionSearch, EventRelay,\n\n Utils, Translation, DIACRITICS,\n\n SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n EnglishTranslation) {\n function Defaults () {\n this.reset();\n }\n\n Defaults.prototype.apply = function (options) {\n options = $.extend(true, {}, this.defaults, options);\n\n if (options.dataAdapter == null) {\n if (options.ajax != null) {\n options.dataAdapter = AjaxData;\n } else if (options.data != null) {\n options.dataAdapter = ArrayData;\n } else {\n options.dataAdapter = SelectData;\n }\n\n if (options.minimumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MinimumInputLength\n );\n }\n\n if (options.maximumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumInputLength\n );\n }\n\n if (options.maximumSelectionLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumSelectionLength\n );\n }\n\n if (options.tags) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n }\n\n if (options.tokenSeparators != null || options.tokenizer != null) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Tokenizer\n );\n }\n\n if (options.query != null) {\n var Query = require(options.amdBase + 'compat/query');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Query\n );\n }\n\n if (options.initSelection != null) {\n var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n InitSelection\n );\n }\n }\n\n if (options.resultsAdapter == null) {\n options.resultsAdapter = ResultsList;\n\n if (options.ajax != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n InfiniteScroll\n );\n }\n\n if (options.placeholder != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n HidePlaceholder\n );\n }\n\n if (options.selectOnClose) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n SelectOnClose\n );\n }\n }\n\n if (options.dropdownAdapter == null) {\n if (options.multiple) {\n options.dropdownAdapter = Dropdown;\n } else {\n var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n options.dropdownAdapter = SearchableDropdown;\n }\n\n if (options.minimumResultsForSearch !== 0) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n MinimumResultsForSearch\n );\n }\n\n if (options.closeOnSelect) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n CloseOnSelect\n );\n }\n\n if (\n options.dropdownCssClass != null ||\n options.dropdownCss != null ||\n options.adaptDropdownCssClass != null\n ) {\n var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n DropdownCSS\n );\n }\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n AttachBody\n );\n }\n\n if (options.selectionAdapter == null) {\n if (options.multiple) {\n options.selectionAdapter = MultipleSelection;\n } else {\n options.selectionAdapter = SingleSelection;\n }\n\n // Add the placeholder mixin if a placeholder was specified\n if (options.placeholder != null) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n Placeholder\n );\n }\n\n if (options.allowClear) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n AllowClear\n );\n }\n\n if (options.multiple) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n SelectionSearch\n );\n }\n\n if (\n options.containerCssClass != null ||\n options.containerCss != null ||\n options.adaptContainerCssClass != null\n ) {\n var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n ContainerCSS\n );\n }\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n EventRelay\n );\n }\n\n // If the defaults were not previously applied from an element, it is\n // possible for the language option to have not been resolved\n options.language = this._resolveLanguage(options.language);\n\n // Always fall back to English since it will always be complete\n options.language.push('en');\n\n var uniqueLanguages = [];\n\n for (var l = 0; l < options.language.length; l++) {\n var language = options.language[l];\n\n if (uniqueLanguages.indexOf(language) === -1) {\n uniqueLanguages.push(language);\n }\n }\n\n options.language = uniqueLanguages;\n\n options.translations = this._processTranslations(\n options.language,\n options.debug\n );\n\n return options;\n };\n\n Defaults.prototype.reset = function () {\n function stripDiacritics (text) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a) {\n return DIACRITICS[a] || a;\n }\n\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n }\n\n function matcher (params, data) {\n // Always return the object if there is nothing to compare\n if ($.trim(params.term) === '') {\n return data;\n }\n\n // Do a recursive check for options with children\n if (data.children && data.children.length > 0) {\n // Clone the data object if there are children\n // This is required as we modify the object to remove any non-matches\n var match = $.extend(true, {}, data);\n\n // Check each child of the option\n for (var c = data.children.length - 1; c >= 0; c--) {\n var child = data.children[c];\n\n var matches = matcher(params, child);\n\n // If there wasn't a match, remove the object in the array\n if (matches == null) {\n match.children.splice(c, 1);\n }\n }\n\n // If any children matched, return the new object\n if (match.children.length > 0) {\n return match;\n }\n\n // If there were no matching children, check just the plain object\n return matcher(params, match);\n }\n\n var original = stripDiacritics(data.text).toUpperCase();\n var term = stripDiacritics(params.term).toUpperCase();\n\n // Check if the text contains the term\n if (original.indexOf(term) > -1) {\n return data;\n }\n\n // If it doesn't contain the term, don't return anything\n return null;\n }\n\n this.defaults = {\n amdBase: './',\n amdLanguageBase: './i18n/',\n closeOnSelect: true,\n debug: false,\n dropdownAutoWidth: false,\n escapeMarkup: Utils.escapeMarkup,\n language: {},\n matcher: matcher,\n minimumInputLength: 0,\n maximumInputLength: 0,\n maximumSelectionLength: 0,\n minimumResultsForSearch: 0,\n selectOnClose: false,\n scrollAfterSelect: false,\n sorter: function (data) {\n return data;\n },\n templateResult: function (result) {\n return result.text;\n },\n templateSelection: function (selection) {\n return selection.text;\n },\n theme: 'default',\n width: 'resolve'\n };\n };\n\n Defaults.prototype.applyFromElement = function (options, $element) {\n var optionLanguage = options.language;\n var defaultLanguage = this.defaults.language;\n var elementLanguage = $element.prop('lang');\n var parentLanguage = $element.closest('[lang]').prop('lang');\n\n var languages = Array.prototype.concat.call(\n this._resolveLanguage(elementLanguage),\n this._resolveLanguage(optionLanguage),\n this._resolveLanguage(defaultLanguage),\n this._resolveLanguage(parentLanguage)\n );\n\n options.language = languages;\n\n return options;\n };\n\n Defaults.prototype._resolveLanguage = function (language) {\n if (!language) {\n return [];\n }\n\n if ($.isEmptyObject(language)) {\n return [];\n }\n\n if ($.isPlainObject(language)) {\n return [language];\n }\n\n var languages;\n\n if (!$.isArray(language)) {\n languages = [language];\n } else {\n languages = language;\n }\n\n var resolvedLanguages = [];\n\n for (var l = 0; l < languages.length; l++) {\n resolvedLanguages.push(languages[l]);\n\n if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n // Extract the region information if it is included\n var languageParts = languages[l].split('-');\n var baseLanguage = languageParts[0];\n\n resolvedLanguages.push(baseLanguage);\n }\n }\n\n return resolvedLanguages;\n };\n\n Defaults.prototype._processTranslations = function (languages, debug) {\n var translations = new Translation();\n\n for (var l = 0; l < languages.length; l++) {\n var languageData = new Translation();\n\n var language = languages[l];\n\n if (typeof language === 'string') {\n try {\n // Try to load it with the original name\n languageData = Translation.loadPath(language);\n } catch (e) {\n try {\n // If we couldn't load it, check if it wasn't the full path\n language = this.defaults.amdLanguageBase + language;\n languageData = Translation.loadPath(language);\n } catch (ex) {\n // The translation could not be loaded at all. Sometimes this is\n // because of a configuration problem, other times this can be\n // because of how Select2 helps load all possible translation files\n if (debug && window.console && console.warn) {\n console.warn(\n 'Select2: The language file for \"' + language + '\" could ' +\n 'not be automatically loaded. A fallback will be used instead.'\n );\n }\n }\n }\n } else if ($.isPlainObject(language)) {\n languageData = new Translation(language);\n } else {\n languageData = language;\n }\n\n translations.extend(languageData);\n }\n\n return translations;\n };\n\n Defaults.prototype.set = function (key, value) {\n var camelKey = $.camelCase(key);\n\n var data = {};\n data[camelKey] = value;\n\n var convertedData = Utils._convertData(data);\n\n $.extend(true, this.defaults, convertedData);\n };\n\n var defaults = new Defaults();\n\n return defaults;\n});\n\nS2.define('select2/options',[\n 'require',\n 'jquery',\n './defaults',\n './utils'\n], function (require, $, Defaults, Utils) {\n function Options (options, $element) {\n this.options = options;\n\n if ($element != null) {\n this.fromElement($element);\n }\n\n if ($element != null) {\n this.options = Defaults.applyFromElement(this.options, $element);\n }\n\n this.options = Defaults.apply(this.options);\n\n if ($element && $element.is('input')) {\n var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n this.options.dataAdapter = Utils.Decorate(\n this.options.dataAdapter,\n InputCompat\n );\n }\n }\n\n Options.prototype.fromElement = function ($e) {\n var excludedData = ['select2'];\n\n if (this.options.multiple == null) {\n this.options.multiple = $e.prop('multiple');\n }\n\n if (this.options.disabled == null) {\n this.options.disabled = $e.prop('disabled');\n }\n\n if (this.options.dir == null) {\n if ($e.prop('dir')) {\n this.options.dir = $e.prop('dir');\n } else if ($e.closest('[dir]').prop('dir')) {\n this.options.dir = $e.closest('[dir]').prop('dir');\n } else {\n this.options.dir = 'ltr';\n }\n }\n\n $e.prop('disabled', this.options.disabled);\n $e.prop('multiple', this.options.multiple);\n\n if (Utils.GetData($e[0], 'select2Tags')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-select2-tags` attribute has been changed to ' +\n 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n 'removed in future versions of Select2.'\n );\n }\n\n Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n Utils.StoreData($e[0], 'tags', true);\n }\n\n if (Utils.GetData($e[0], 'ajaxUrl')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-ajax-url` attribute has been changed to ' +\n '`data-ajax--url` and support for the old attribute will be removed' +\n ' in future versions of Select2.'\n );\n }\n\n $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n }\n\n var dataset = {};\n\n function upperCaseLetter(_, letter) {\n return letter.toUpperCase();\n }\n\n // Pre-load all of the attributes which are prefixed with `data-`\n for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n var attributeName = $e[0].attributes[attr].name;\n var prefix = 'data-';\n\n if (attributeName.substr(0, prefix.length) == prefix) {\n // Get the contents of the attribute after `data-`\n var dataName = attributeName.substring(prefix.length);\n\n // Get the data contents from the consistent source\n // This is more than likely the jQuery data helper\n var dataValue = Utils.GetData($e[0], dataName);\n\n // camelCase the attribute name to match the spec\n var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n // Store the data attribute contents into the dataset since\n dataset[camelDataName] = dataValue;\n }\n }\n\n // Prefer the element's `dataset` attribute if it exists\n // jQuery 1.x does not correctly handle data attributes with multiple dashes\n if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n dataset = $.extend(true, {}, $e[0].dataset, dataset);\n }\n\n // Prefer our internal data cache if it exists\n var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n data = Utils._convertData(data);\n\n for (var key in data) {\n if ($.inArray(key, excludedData) > -1) {\n continue;\n }\n\n if ($.isPlainObject(this.options[key])) {\n $.extend(this.options[key], data[key]);\n } else {\n this.options[key] = data[key];\n }\n }\n\n return this;\n };\n\n Options.prototype.get = function (key) {\n return this.options[key];\n };\n\n Options.prototype.set = function (key, val) {\n this.options[key] = val;\n };\n\n return Options;\n});\n\nS2.define('select2/core',[\n 'jquery',\n './options',\n './utils',\n './keys'\n], function ($, Options, Utils, KEYS) {\n var Select2 = function ($element, options) {\n if (Utils.GetData($element[0], 'select2') != null) {\n Utils.GetData($element[0], 'select2').destroy();\n }\n\n this.$element = $element;\n\n this.id = this._generateId($element);\n\n options = options || {};\n\n this.options = new Options(options, $element);\n\n Select2.__super__.constructor.call(this);\n\n // Set up the tabindex\n\n var tabindex = $element.attr('tabindex') || 0;\n Utils.StoreData($element[0], 'old-tabindex', tabindex);\n $element.attr('tabindex', '-1');\n\n // Set up containers and adapters\n\n var DataAdapter = this.options.get('dataAdapter');\n this.dataAdapter = new DataAdapter($element, this.options);\n\n var $container = this.render();\n\n this._placeContainer($container);\n\n var SelectionAdapter = this.options.get('selectionAdapter');\n this.selection = new SelectionAdapter($element, this.options);\n this.$selection = this.selection.render();\n\n this.selection.position(this.$selection, $container);\n\n var DropdownAdapter = this.options.get('dropdownAdapter');\n this.dropdown = new DropdownAdapter($element, this.options);\n this.$dropdown = this.dropdown.render();\n\n this.dropdown.position(this.$dropdown, $container);\n\n var ResultsAdapter = this.options.get('resultsAdapter');\n this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n this.$results = this.results.render();\n\n this.results.position(this.$results, this.$dropdown);\n\n // Bind events\n\n var self = this;\n\n // Bind the container to all of the adapters\n this._bindAdapters();\n\n // Register any DOM event handlers\n this._registerDomEvents();\n\n // Register any internal event handlers\n this._registerDataEvents();\n this._registerSelectionEvents();\n this._registerDropdownEvents();\n this._registerResultsEvents();\n this._registerEvents();\n\n // Set the initial state\n this.dataAdapter.current(function (initialData) {\n self.trigger('selection:update', {\n data: initialData\n });\n });\n\n // Hide the original select\n $element.addClass('select2-hidden-accessible');\n $element.attr('aria-hidden', 'true');\n\n // Synchronize any monitored attributes\n this._syncAttributes();\n\n Utils.StoreData($element[0], 'select2', this);\n\n // Ensure backwards compatibility with $element.data('select2').\n $element.data('select2', this);\n };\n\n Utils.Extend(Select2, Utils.Observable);\n\n Select2.prototype._generateId = function ($element) {\n var id = '';\n\n if ($element.attr('id') != null) {\n id = $element.attr('id');\n } else if ($element.attr('name') != null) {\n id = $element.attr('name') + '-' + Utils.generateChars(2);\n } else {\n id = Utils.generateChars(4);\n }\n\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n id = 'select2-' + id;\n\n return id;\n };\n\n Select2.prototype._placeContainer = function ($container) {\n $container.insertAfter(this.$element);\n\n var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n if (width != null) {\n $container.css('width', width);\n }\n };\n\n Select2.prototype._resolveWidth = function ($element, method) {\n var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n if (method == 'resolve') {\n var styleWidth = this._resolveWidth($element, 'style');\n\n if (styleWidth != null) {\n return styleWidth;\n }\n\n return this._resolveWidth($element, 'element');\n }\n\n if (method == 'element') {\n var elementWidth = $element.outerWidth(false);\n\n if (elementWidth <= 0) {\n return 'auto';\n }\n\n return elementWidth + 'px';\n }\n\n if (method == 'style') {\n var style = $element.attr('style');\n\n if (typeof(style) !== 'string') {\n return null;\n }\n\n var attrs = style.split(';');\n\n for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n var attr = attrs[i].replace(/\\s/g, '');\n var matches = attr.match(WIDTH);\n\n if (matches !== null && matches.length >= 1) {\n return matches[1];\n }\n }\n\n return null;\n }\n\n if (method == 'computedstyle') {\n var computedStyle = window.getComputedStyle($element[0]);\n\n return computedStyle.width;\n }\n\n return method;\n };\n\n Select2.prototype._bindAdapters = function () {\n this.dataAdapter.bind(this, this.$container);\n this.selection.bind(this, this.$container);\n\n this.dropdown.bind(this, this.$container);\n this.results.bind(this, this.$container);\n };\n\n Select2.prototype._registerDomEvents = function () {\n var self = this;\n\n this.$element.on('change.select2', function () {\n self.dataAdapter.current(function (data) {\n self.trigger('selection:update', {\n data: data\n });\n });\n });\n\n this.$element.on('focus.select2', function (evt) {\n self.trigger('focus', evt);\n });\n\n this._syncA = Utils.bind(this._syncAttributes, this);\n this._syncS = Utils.bind(this._syncSubtree, this);\n\n if (this.$element[0].attachEvent) {\n this.$element[0].attachEvent('onpropertychange', this._syncA);\n }\n\n var observer = window.MutationObserver ||\n window.WebKitMutationObserver ||\n window.MozMutationObserver\n ;\n\n if (observer != null) {\n this._observer = new observer(function (mutations) {\n self._syncA();\n self._syncS(null, mutations);\n });\n this._observer.observe(this.$element[0], {\n attributes: true,\n childList: true,\n subtree: false\n });\n } else if (this.$element[0].addEventListener) {\n this.$element[0].addEventListener(\n 'DOMAttrModified',\n self._syncA,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeInserted',\n self._syncS,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeRemoved',\n self._syncS,\n false\n );\n }\n };\n\n Select2.prototype._registerDataEvents = function () {\n var self = this;\n\n this.dataAdapter.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerSelectionEvents = function () {\n var self = this;\n var nonRelayEvents = ['toggle', 'focus'];\n\n this.selection.on('toggle', function () {\n self.toggleDropdown();\n });\n\n this.selection.on('focus', function (params) {\n self.focus(params);\n });\n\n this.selection.on('*', function (name, params) {\n if ($.inArray(name, nonRelayEvents) !== -1) {\n return;\n }\n\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerDropdownEvents = function () {\n var self = this;\n\n this.dropdown.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerResultsEvents = function () {\n var self = this;\n\n this.results.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerEvents = function () {\n var self = this;\n\n this.on('open', function () {\n self.$container.addClass('select2-container--open');\n });\n\n this.on('close', function () {\n self.$container.removeClass('select2-container--open');\n });\n\n this.on('enable', function () {\n self.$container.removeClass('select2-container--disabled');\n });\n\n this.on('disable', function () {\n self.$container.addClass('select2-container--disabled');\n });\n\n this.on('blur', function () {\n self.$container.removeClass('select2-container--focus');\n });\n\n this.on('query', function (params) {\n if (!self.isOpen()) {\n self.trigger('open', {});\n }\n\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:all', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('query:append', function (params) {\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:append', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('keypress', function (evt) {\n var key = evt.which;\n\n if (self.isOpen()) {\n if (key === KEYS.ESC || key === KEYS.TAB ||\n (key === KEYS.UP && evt.altKey)) {\n self.close(evt);\n\n evt.preventDefault();\n } else if (key === KEYS.ENTER) {\n self.trigger('results:select', {});\n\n evt.preventDefault();\n } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n self.trigger('results:toggle', {});\n\n evt.preventDefault();\n } else if (key === KEYS.UP) {\n self.trigger('results:previous', {});\n\n evt.preventDefault();\n } else if (key === KEYS.DOWN) {\n self.trigger('results:next', {});\n\n evt.preventDefault();\n }\n } else {\n if (key === KEYS.ENTER || key === KEYS.SPACE ||\n (key === KEYS.DOWN && evt.altKey)) {\n self.open();\n\n evt.preventDefault();\n }\n }\n });\n };\n\n Select2.prototype._syncAttributes = function () {\n this.options.set('disabled', this.$element.prop('disabled'));\n\n if (this.isDisabled()) {\n if (this.isOpen()) {\n this.close();\n }\n\n this.trigger('disable', {});\n } else {\n this.trigger('enable', {});\n }\n };\n\n Select2.prototype._isChangeMutation = function (evt, mutations) {\n var changed = false;\n var self = this;\n\n // Ignore any mutation events raised for elements that aren't options or\n // optgroups. This handles the case when the select element is destroyed\n if (\n evt && evt.target && (\n evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n )\n ) {\n return;\n }\n\n if (!mutations) {\n // If mutation events aren't supported, then we can only assume that the\n // change affected the selections\n changed = true;\n } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n for (var n = 0; n < mutations.addedNodes.length; n++) {\n var node = mutations.addedNodes[n];\n\n if (node.selected) {\n changed = true;\n }\n }\n } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n changed = true;\n } else if ($.isArray(mutations)) {\n $.each(mutations, function(evt, mutation) {\n if (self._isChangeMutation(evt, mutation)) {\n // We've found a change mutation.\n // Let's escape from the loop and continue\n changed = true;\n return false;\n }\n });\n }\n return changed;\n };\n\n Select2.prototype._syncSubtree = function (evt, mutations) {\n var changed = this._isChangeMutation(evt, mutations);\n var self = this;\n\n // Only re-pull the data if we think there is a change\n if (changed) {\n this.dataAdapter.current(function (currentData) {\n self.trigger('selection:update', {\n data: currentData\n });\n });\n }\n };\n\n /**\n * Override the trigger method to automatically trigger pre-events when\n * there are events that can be prevented.\n */\n Select2.prototype.trigger = function (name, args) {\n var actualTrigger = Select2.__super__.trigger;\n var preTriggerMap = {\n 'open': 'opening',\n 'close': 'closing',\n 'select': 'selecting',\n 'unselect': 'unselecting',\n 'clear': 'clearing'\n };\n\n if (args === undefined) {\n args = {};\n }\n\n if (name in preTriggerMap) {\n var preTriggerName = preTriggerMap[name];\n var preTriggerArgs = {\n prevented: false,\n name: name,\n args: args\n };\n\n actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n if (preTriggerArgs.prevented) {\n args.prevented = true;\n\n return;\n }\n }\n\n actualTrigger.call(this, name, args);\n };\n\n Select2.prototype.toggleDropdown = function () {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n };\n\n Select2.prototype.open = function () {\n if (this.isOpen()) {\n return;\n }\n\n if (this.isDisabled()) {\n return;\n }\n\n this.trigger('query', {});\n };\n\n Select2.prototype.close = function (evt) {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', { originalEvent : evt });\n };\n\n /**\n * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n Select2.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n Select2.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n Select2.prototype.isOpen = function () {\n return this.$container.hasClass('select2-container--open');\n };\n\n Select2.prototype.hasFocus = function () {\n return this.$container.hasClass('select2-container--focus');\n };\n\n Select2.prototype.focus = function (data) {\n // No need to re-trigger focus events if we are already focused\n if (this.hasFocus()) {\n return;\n }\n\n this.$container.addClass('select2-container--focus');\n this.trigger('focus', {});\n };\n\n Select2.prototype.enable = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n ' instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n args = [true];\n }\n\n var disabled = !args[0];\n\n this.$element.prop('disabled', disabled);\n };\n\n Select2.prototype.data = function () {\n if (this.options.get('debug') &&\n arguments.length > 0 && window.console && console.warn) {\n console.warn(\n 'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n 'should consider setting the value instead using `$element.val()`.'\n );\n }\n\n var data = [];\n\n this.dataAdapter.current(function (currentData) {\n data = currentData;\n });\n\n return data;\n };\n\n Select2.prototype.val = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n ' removed in later Select2 versions. Use $element.val() instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n return this.$element.val();\n }\n\n var newVal = args[0];\n\n if ($.isArray(newVal)) {\n newVal = $.map(newVal, function (obj) {\n return obj.toString();\n });\n }\n\n this.$element.val(newVal).trigger('input').trigger('change');\n };\n\n Select2.prototype.destroy = function () {\n this.$container.remove();\n\n if (this.$element[0].detachEvent) {\n this.$element[0].detachEvent('onpropertychange', this._syncA);\n }\n\n if (this._observer != null) {\n this._observer.disconnect();\n this._observer = null;\n } else if (this.$element[0].removeEventListener) {\n this.$element[0]\n .removeEventListener('DOMAttrModified', this._syncA, false);\n this.$element[0]\n .removeEventListener('DOMNodeInserted', this._syncS, false);\n this.$element[0]\n .removeEventListener('DOMNodeRemoved', this._syncS, false);\n }\n\n this._syncA = null;\n this._syncS = null;\n\n this.$element.off('.select2');\n this.$element.attr('tabindex',\n Utils.GetData(this.$element[0], 'old-tabindex'));\n\n this.$element.removeClass('select2-hidden-accessible');\n this.$element.attr('aria-hidden', 'false');\n Utils.RemoveData(this.$element[0]);\n this.$element.removeData('select2');\n\n this.dataAdapter.destroy();\n this.selection.destroy();\n this.dropdown.destroy();\n this.results.destroy();\n\n this.dataAdapter = null;\n this.selection = null;\n this.dropdown = null;\n this.results = null;\n };\n\n Select2.prototype.render = function () {\n var $container = $(\n '<span class=\"select2 select2-container\">' +\n '<span class=\"selection\"></span>' +\n '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n '</span>'\n );\n\n $container.attr('dir', this.options.get('dir'));\n\n this.$container = $container;\n\n this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n Utils.StoreData($container[0], 'element', this.$element);\n\n return $container;\n };\n\n return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n 'jquery'\n], function ($) {\n // Used to shim jQuery.mousewheel for non-full builds.\n return $;\n});\n\nS2.define('jquery.select2',[\n 'jquery',\n 'jquery-mousewheel',\n\n './select2/core',\n './select2/defaults',\n './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n if ($.fn.select2 == null) {\n // All methods that should return the element\n var thisMethods = ['open', 'close', 'destroy'];\n\n $.fn.select2 = function (options) {\n options = options || {};\n\n if (typeof options === 'object') {\n this.each(function () {\n var instanceOptions = $.extend(true, {}, options);\n\n var instance = new Select2($(this), instanceOptions);\n });\n\n return this;\n } else if (typeof options === 'string') {\n var ret;\n var args = Array.prototype.slice.call(arguments, 1);\n\n this.each(function () {\n var instance = Utils.GetData(this, 'select2');\n\n if (instance == null && window.console && console.error) {\n console.error(\n 'The select2(\\'' + options + '\\') method was called on an ' +\n 'element that is not using Select2.'\n );\n }\n\n ret = instance[options].apply(instance, args);\n });\n\n // Check if we should be returning `this`\n if ($.inArray(options, thisMethods) > -1) {\n return this;\n }\n\n return ret;\n } else {\n throw new Error('Invalid arguments for Select2: ' + options);\n }\n };\n }\n\n if ($.fn.select2.defaults == null) {\n $.fn.select2.defaults = Defaults;\n }\n\n return Select2;\n});\n\n // Return the AMD loader configuration so it can be used outside of this file\n return {\n define: S2.define,\n require: S2.require\n };\n}());\n\n // Autoload the jQuery bindings\n // We know that all of the modules exist above this, so we're safe\n var select2 = S2.require('jquery.select2');\n\n // Hold the AMD module references on the jQuery function that was just loaded\n // This allows Select2 to use the internal loader outside of this file, such\n // as in the language files.\n jQuery.fn.select2.amd = S2;\n\n // Return the Select2 instance for anyone who is importing it.\n return select2;\n}));\n","/*! smooth-scroll v14.2.1 | (c) 2018 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\nwindow.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(e){var t,n=(this.document||this.ownerDocument).querySelectorAll(e),o=this;do{for(t=n.length;--t>=0&&n.item(t)!==o;);}while(t<0&&(o=o.parentElement));return o}),(function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}if(\"function\"==typeof window.CustomEvent)return!1;e.prototype=window.Event.prototype,window.CustomEvent=e})(),(function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],n=0;n<t.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[t[n]+\"RequestAnimationFrame\"],window.cancelAnimationFrame=window[t[n]+\"CancelAnimationFrame\"]||window[t[n]+\"CancelRequestAnimationFrame\"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,n){var o=(new Date).getTime(),i=Math.max(0,16-(o-e)),r=window.setTimeout((function(){t(o+i)}),i);return e=o+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(e){clearTimeout(e)})})(),(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype},o=function(){for(var e={},t=0;t<arguments.length;t++)!(function(t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(arguments[t]);return e},i=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)},r=function(t){return parseInt(e.getComputedStyle(t).height,10)},a=function(e){var t;try{t=decodeURIComponent(e)}catch(n){t=e}return t},u=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,r=\"\",a=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===a?r+=\"\\\\\"+t.toString(16)+\" \":r+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):\"\\\\\"+n.charAt(i)}var u;try{u=decodeURIComponent(\"#\"+r)}catch(e){u=\"#\"+r}return u},c=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,o,i){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),i&&(r=Math.min(r,s()-e.innerHeight)),r},m=function(e){return e?r(e)+e.offsetTop:0},d=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)},f=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},h=function(t,n,o,i){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(r)}};return function(r,p){var g,v,w,y,E,b,S,A={};A.cancelScroll=function(e){cancelAnimationFrame(S),S=null,e||h(\"scrollCancel\",g)},A.animateScroll=function(n,i,r){var a=o(g||t,r||{}),u=\"[object Number]\"===Object.prototype.toString.call(n),p=u||!n.tagName?null:n;if(u||p){var v=e.pageYOffset;a.header&&!y&&(y=document.querySelector(a.header)),E||(E=m(y));var w,b,C,O=u?n:l(p,E,parseInt(\"function\"==typeof a.offset?a.offset(n,i):a.offset,10),a.clip),I=O-v,q=s(),F=0,L=function(t,o){var r=e.pageYOffset;if(t==o||r==o||(v<o&&e.innerHeight+r)>=q)return A.cancelScroll(!0),f(n,o,u),h(\"scrollStop\",a,n,i),w=null,S=null,!0},H=function(t){w||(w=t),F+=t-w,b=F/parseInt(a.speed,10),b=b>1?1:b,C=v+I*c(a,b),e.scrollTo(0,Math.floor(C)),L(C,O)||(S=e.requestAnimationFrame(H),w=t)};0===e.pageYOffset&&e.scrollTo(0,0),d(n,u,a),h(\"scrollStart\",a,n,i),A.cancelScroll(!0),e.requestAnimationFrame(H)}};var C=function(t){if(!i()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&\"closest\"in t.target&&(w=t.target.closest(r))&&\"a\"===w.tagName.toLowerCase()&&!t.target.closest(g.ignore)&&w.hostname===e.location.hostname&&w.pathname===e.location.pathname&&/#/.test(w.href)){var n=u(a(w.hash)),o=g.topOnEmptyHash&&\"#\"===n?document.documentElement:document.querySelector(n);o=o||\"#top\"!==n?o:document.documentElement,o&&(t.preventDefault(),A.animateScroll(o,w))}},O=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(g)&&history.state.anchor){var t=document.querySelector(u(a(history.state.anchor)));t&&A.animateScroll(t,null,{updateURL:!1})}},I=function(e){b||(b=setTimeout((function(){b=null,E=m(y)}),66))};return A.destroy=function(){g&&(document.removeEventListener(\"click\",C,!1),e.removeEventListener(\"resize\",I,!1),e.removeEventListener(\"popstate\",O,!1),A.cancelScroll(),g=null,v=null,w=null,y=null,E=null,b=null,S=null)},A.init=function(i){if(!n())throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";A.destroy(),g=o(t,i||{}),y=g.header?document.querySelector(g.header):null,E=m(y),document.addEventListener(\"click\",C,!1),y&&e.addEventListener(\"resize\",I,!1),g.updateURL&&g.popstate&&e.addEventListener(\"popstate\",O,!1)},A.init(p),A}}));","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","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/font-awesome sync \\\\.(otf|eot|svg|ttf|woff|woff2)$\";","var map = {\n\t\"./bg.png\": \"./src/img/bg.png\",\n\t\"./photo1.png\": \"./src/img/photo1.png\",\n\t\"./photo2.jpg\": \"./src/img/photo2.jpg\",\n\t\"./photo3.svg\": \"./src/img/photo3.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/img sync \\\\.(png|jpe?g|svg)$\";","export default \"../img/bg.png\";","export default \"../img/photo1.png\";","export default \"../img/photo2.jpg\";","export default \"../fonts/photo3.svg\";","function _gaLt(event) {\n if (typeof ga !== 'function') {\n return;\n }\n\n var el = event.srcElement || event.target;\n\n /* Loop up the DOM tree through parent elements if clicked element is not a link (eg: an image inside a link) */\n while (\n el &&\n (typeof el.tagName == 'undefined' ||\n el.tagName.toLowerCase() != 'a' ||\n !el.href)\n ) {\n el = el.parentNode;\n }\n\n if (el && el.href) {\n /* link */\n var link = el.href;\n if (link.indexOf(location.host) == -1 && !link.match(/^javascript:/i)) {\n /* external link */\n /* HitCallback function to either open link in either same or new window */\n var hitBack = function(link, target) {\n target ? window.open(link, target) : (window.location.href = link);\n };\n /* Is target set and not _(self|parent|top)? */\n var target =\n el.target && !el.target.match(/^_(self|parent|top)$/i)\n ? el.target\n : false;\n /* send event with callback */\n ga(\n 'send',\n 'event',\n 'Outgoing Links',\n link,\n document.location.pathname + document.location.search,\n { hitCallback: hitBack(link, target) },\n );\n\n /* Prevent standard click */\n event.preventDefault ? event.preventDefault() : (event.returnValue = !1);\n }\n }\n}\n\n/* Attach the event to all clicks in the document after page has loaded */\nvar w = window;\nw.addEventListener\n ? w.addEventListener(\n 'load',\n () => {\n document.body.addEventListener('click', _gaLt, !1);\n },\n !1,\n )\n : w.attachEvent &&\n w.attachEvent('onload', () => {\n document.body.attachEvent('onclick', _gaLt);\n });\n","const Obj = {\n init: () => {\n class GoogleMapsHtmlOverlay extends google.maps.OverlayView {\n constructor(options) {\n super();\n const ui = this;\n\n ui.setMap(options.map);\n ui.position = options.position;\n ui.html = options.html\n ? options.html\n : '<div class=\"mapboxgl-marker\"><i class=\"marker-icon fas fa-map-marker-alt\"></i></div>';\n ui.divClass = options.divClass;\n ui.align = options.align;\n ui.isDebugMode = options.debug;\n ui.onClick = options.onClick;\n ui.onMouseOver = options.onMouseOver;\n\n ui.isBoolean = (arg) => {\n if (typeof arg === 'boolean') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isNotUndefined = (arg) => {\n if (typeof arg !== 'undefined') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.hasContent = (arg) => {\n if (arg.length > 0) {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isString = (arg) => {\n if (typeof arg === 'string') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isFunction = (arg) => {\n if (typeof arg === 'function') {\n return true;\n } else {\n return false;\n }\n };\n }\n onAdd() {\n const ui = this;\n\n // Create div element.\n ui.div = document.createElement('div');\n ui.div.style.position = 'absolute';\n\n // Validate and set custom div class\n if (ui.isNotUndefined(ui.divClass) && ui.hasContent(ui.divClass))\n ui.div.className = ui.divClass;\n\n // Validate and set custom HTML\n if (\n ui.isNotUndefined(ui.html) &&\n ui.hasContent(ui.html) &&\n ui.isString(ui.html)\n )\n ui.div.innerHTML = ui.html;\n\n // If debug mode is enabled custom content will be replaced with debug content\n if (ui.isBoolean(ui.isDebugMode) && ui.isDebugMode) {\n ui.div.className = 'debug-mode';\n ui.div.innerHTML =\n '<div style=\"height: 10px; width: 10px; background: red; border-radius: 100%;\"></div>' +\n '<div style=\"position: absolute; top: 5px; padding: 5px; width: 130px; text-align: center; font-size: 18px; text-transform: uppercase; font-weight: bolder; background: red; color: white; font-family: Arial;\">Debug mode</div>';\n ui.div.setAttribute(\n 'style',\n 'position: absolute;' +\n 'border: 5px dashed red;' +\n 'height: 150px;' +\n 'width: 150px;' +\n 'display: flex;' +\n 'justify-content: center;' +\n 'align-items: center;',\n );\n }\n\n // Add element to clickable layer\n ui.getPanes().overlayMouseTarget.appendChild(ui.div);\n\n // Add listeners to the element.\n google.maps.event.addDomListener(ui.div, 'click', (event) => {\n google.maps.event.trigger(ui, 'click');\n if (ui.isFunction(ui.onClick)) ui.onClick();\n event.stopPropagation();\n });\n\n google.maps.event.addDomListener(ui.div, 'mouseover', (event) => {\n google.maps.event.trigger(ui, 'mouseover');\n if (ui.isFunction(ui.onMouseOver)) ui.onMouseOver();\n event.stopPropagation();\n });\n }\n\n draw() {\n const ui = this;\n let $div = $(ui.div).find(\n '.mapboxgl-marker,.marker-pin,.mapboxgl-popup,.popup',\n );\n if (!$div.length) {\n $div = $(ui.div);\n }\n\n // Calculate position of div\n const positionInPixels = ui\n .getProjection()\n .fromLatLngToDivPixel(new google.maps.LatLng(ui.position));\n\n // Align HTML overlay relative to original position\n const offset = {\n y: undefined,\n x: undefined,\n };\n const divWidth = $div.outerWidth();\n const divHeight = $div.outerHeight();\n\n switch (Array.isArray(ui.align) ? ui.align.join(' ') : '') {\n case 'left top':\n offset.y = divHeight;\n offset.x = divWidth;\n break;\n case 'left center':\n offset.y = divHeight / 2;\n offset.x = divWidth;\n break;\n case 'left bottom':\n offset.y = 0;\n offset.x = divWidth;\n break;\n case 'center top':\n offset.y = divHeight;\n offset.x = divWidth / 2;\n break;\n case 'center center':\n offset.y = divHeight / 2;\n offset.x = divWidth / 2;\n break;\n case 'center bottom':\n offset.y = 0;\n offset.x = divWidth / 2;\n break;\n case 'right top':\n offset.y = divHeight;\n offset.x = 0;\n break;\n case 'right center':\n offset.y = divHeight / 2;\n offset.x = 0;\n break;\n case 'right bottom':\n offset.y = 0;\n offset.x = 0;\n break;\n default:\n offset.y = divHeight / 2;\n offset.x = divWidth / 2;\n break;\n }\n\n // Set position\n ui.div.style.top = `${positionInPixels.y - offset.y}px`;\n ui.div.style.left = `${positionInPixels.x - offset.x}px`;\n }\n\n getPosition() {\n const ui = this;\n return ui.position;\n }\n\n getDiv() {\n const ui = this;\n return ui.div;\n }\n\n setPosition(position, align) {\n const ui = this;\n ui.position = position;\n ui.align = align;\n ui.draw();\n }\n }\n return GoogleMapsHtmlOverlay;\n },\n};\n\nexport default Obj;\n","'use strict';\n\nimport $ from 'jquery';\nimport Events from '../../_events';\nimport MarkerUI from './_map.google.marker';\n\nconst GoogleMapsDriver = (($) => {\n class GoogleMapsDriver {\n getName() {\n return 'GoogleMapsDriver';\n }\n\n init($el, config = []) {\n const ui = this;\n const W = window;\n\n ui.$el = $el;\n ui.config = config;\n ui.markers = [];\n\n W[`init${ui.getName()}`] = () => {\n ui.googleApiLoaded();\n };\n\n $('body').append(\n `<script async defer src=\"https://maps.googleapis.com/maps/api/js?key=${\n config['key']\n }&callback=init${ui.getName()}\"></script>`,\n );\n }\n\n googleApiLoaded() {\n const ui = this;\n\n const $el = ui.$el;\n const config = ui.config;\n const $mapDiv = $el.find('.mapAPI-map');\n\n const zoom = config['mapZoom'] ? config['mapZoom'] : 10;\n const center = config['center']\n ? {\n lat: config['center'][1],\n lng: config['center'][0],\n }\n : {\n lat: 0,\n lng: 0,\n };\n const style = config['style'] ? config['style'] : null;\n\n console.log(`${ui.getName()}: API is loaded`);\n // init fontawesome icons\n ui.MarkerUI = MarkerUI.init($);\n\n ui.map = new google.maps.Map($mapDiv[0], {\n zoom,\n center,\n fullscreenControl: true,\n styles: style,\n });\n\n ui.default_zoom = zoom;\n\n $mapDiv.addClass('mapboxgl-map');\n\n ui.popup = new ui.MarkerUI({\n map: ui.map,\n align: ['center', 'top'],\n divClass: 'mapboxgl-popup popup mapboxgl-popup-anchor-bottom d-none',\n html:\n '<div class=\"mapboxgl-popup-tip\"></div><div class=\"mapboxgl-popup-content\">' +\n '<div class=\"mapboxgl-popup-close-button\" type=\"button\" aria-label=\"Close popup\">×</div>' +\n '<div class=\"html\"></div>' +\n '</div>',\n });\n\n ui.geocoder = new google.maps.Geocoder();\n\n $el.trigger(Events.MAPAPILOADED);\n }\n\n addMarker(crds, config) {\n const ui = this;\n\n const pos = {\n lat: crds[1],\n lng: crds[0],\n };\n\n const marker = new ui.MarkerUI({\n position: pos,\n map: ui.map,\n align: ['center', 'top'],\n html: `<div class=\"mapboxgl-marker\"><div id=\"Marker${config['id']}\" data-id=\"${config['id']}\" class=\"marker\">${config['icon']}</div></div>`,\n onClick: () => {\n const $el = $(`#Marker${config['id']}`);\n ui.showPopup(pos, config['content']);\n\n $el.trigger(Events.MAPMARKERCLICK);\n },\n });\n\n ui.markers.push(marker);\n\n return marker;\n }\n\n showPopup(pos, content) {\n const ui = this;\n const $popup = $(ui.popup.getDiv());\n\n if (ui.config['flyToMarker']) {\n ui.map.setCenter(pos); // panTo\n if (!ui.config['noZoom']) {\n ui.map.setZoom(18);\n }\n }\n\n // keep it hidden to render content\n $popup.css({\n opacity: '0',\n });\n $popup.removeClass('d-none');\n\n $popup.find('.mapboxgl-popup-content .html').html(content);\n\n $popup.find('.mapboxgl-popup-close-button').on('click', (e) => {\n e.preventDefault();\n ui.hidePopup();\n });\n\n // set position when content was rendered\n ui.popup.setPosition(pos, ['center', 'top']);\n\n // display popup\n $popup.css({\n 'margin-top': '-1rem',\n opacity: '1',\n });\n }\n\n hidePopup() {\n const ui = this;\n const $popup = $(ui.popup.getDiv());\n\n $popup.addClass('d-none');\n if (!ui.config['noRestoreBounds'] || ui.config['flyToBounds']) {\n ui.restoreBounds();\n }\n\n ui.$el.trigger(Events.MAPPOPUPCLOSE);\n }\n\n geocode(addr, callback) {\n const ui = this;\n\n ui.geocoder.geocode(\n {\n address: addr,\n },\n (results, status) => {\n if (status === 'OK') {\n //results[0].geometry.location;\n\n if (typeof callback === 'function') {\n callback(results);\n }\n\n return results;\n } else {\n console.error(\n `${ui.getName()}: Geocode was not successful for the following reason: ${status}`,\n );\n }\n },\n );\n }\n\n reverseGeocode(latLng, callback) {\n const ui = this;\n\n ui.geocoder.geocode(\n {\n location: latlng,\n },\n (results, status) => {\n if (status === 'OK') {\n //results[0].formatted_address;\n\n if (typeof callback === 'function') {\n callback(results);\n }\n\n return results;\n } else {\n console.error(\n `${ui.getName()}: Reverse Geocoding was not successful for the following reason: ${status}`,\n );\n }\n },\n );\n }\n\n addGeoJson(config) {\n const ui = this;\n\n const firstMarker = config['geojson'].features[0].geometry.coordinates;\n //Map.setCenter(firstMarker);\n const bounds = new google.maps.LatLngBounds();\n\n // add markers to map\n config['geojson'].features.forEach((marker) => {\n const id = marker.id;\n const crds = marker.geometry.coordinates;\n const content = marker.properties.content;\n\n ui.addMarker(crds, {\n id,\n content,\n icon: marker.icon,\n flyToMarker: config['flyToMarker'],\n });\n\n bounds.extend({\n lat: crds[1],\n lng: crds[0],\n });\n });\n\n if (ui.markers.length > 1) {\n ui.map.fitBounds(bounds, {\n padding: 30,\n }); //panToBounds\n } else if (ui.markers[0]) {\n ui.map.setCenter(ui.markers[0].getPosition());\n }\n\n ui.default_bounds = bounds;\n ui.default_zoom = ui.map.getZoom();\n }\n\n getMap() {\n const ui = this;\n return ui.map;\n }\n\n getPopup() {\n const ui = this;\n return ui.popup;\n }\n\n restoreBounds() {\n const ui = this;\n\n if (ui.default_bounds && ui.markers.length > 1) {\n ui.map.fitBounds(ui.default_bounds, {\n padding: 30,\n }); //panToBounds\n } else {\n if (ui.markers[0]) {\n ui.map.setCenter(ui.markers[0].getPosition());\n }\n\n ui.restoreZoom();\n }\n }\n\n restoreZoom() {\n const ui = this;\n\n ui.map.setZoom(ui.default_zoom);\n }\n }\n\n return GoogleMapsDriver;\n})($);\n\nexport default GoogleMapsDriver;\n","/**\n * Add your global events here\n */\n\nimport MAP_DRIVER from './_components/drivers/_map.google';\n//import MAP_DRIVER from './_components/drivers/_map.mapbox';\n\nconst CONSTS = {\n ENVS: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl', 'xxxl'],\n MAP_DRIVER,\n};\n\nexport default CONSTS;\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n TABHIDDEN: 'tab-hidden',\n TABFOCUSED: 'tab-focused',\n OFFLINE: 'offline',\n ONLINE: 'online',\n LOADED: 'load',\n SWIPELEFT: 'swipeleft panleft',\n SWIPERIGHT: 'swiperight panright',\n ALLERTAPPEARED: 'alert-appeared',\n ALERTREMOVED: 'alert-removed',\n LODEDANDREADY: 'load-ready',\n LAZYIMAGEREADY: 'image-lazy-bg-loaded',\n LAZYIMAGESREADY: 'images-lazy-loaded',\n MAPLOADED: 'map-loaded',\n MAPAPILOADED: 'map-api-loaded',\n MAPMARKERCLICK: 'map-marker-click',\n MAPPOPUPCLOSE: 'map-popup-close',\n SCROLL: 'scroll',\n RESIZE: 'resize',\n CAROUSEL_READY: 'bs.carousel.ready',\n SET_TARGET_UPDATE: 'set-target-update',\n RESTORE_FIELD: 'restore-field',\n FORM_INIT_BASICS: 'form-basics',\n FORM_INIT_STEPPED: 'form-init-stepped',\n FORM_INIT_VALIDATE: 'form-init-validate',\n FORM_INIT_VALIDATE_FIELD: 'form-init-validate-field',\n FORM_INIT_STORAGE: 'form-init-storage',\n FORM_VALIDATION_FAILED: 'form-validation-failed',\n FORM_STEPPED_NEW_STEP: 'form-new-step',\n FORM_STEPPED_FIRST_STEP: 'form-first-step',\n FORM_STEPPED_LAST_STEP: 'form-last-step',\n FORM_FIELDS: 'input,textarea,select',\n};\n","/*\n * Conflicts with 'bootstrap/js/dist/dropdown'\n */\n'use strict';\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport 'jquery-hoverintent/jquery.hoverIntent.js';\n\nconst HoverUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsHoverUI';\n const DATA_KEY = NAME;\n\n class HoverUI {\n // Constructor\n constructor(el) {\n const ui = this;\n const $el = $(el);\n ui.$el = $el;\n\n // find parent\n let $parent = $el.parents('.nav-item, .dropdown');\n $parent = $parent && $parent.length ? $parent.first() : null;\n //$parent = $parent ? $parent : $el.parent();\n ui.$parent = $parent;\n\n // find target\n let $target = $el.data('target');\n $target = $target && $target.length ? $target : null;\n $target = $target\n ? $target\n : $parent\n ? $parent.find('.dropdown-menu')\n : null;\n\n if (!$target || !$target.length) {\n console.warn(`${NAME}: Missing target for:`);\n console.warn($el);\n return;\n }\n\n ui.$target = $target;\n\n const $triger = $parent ? $parent : $el;\n ui.$triger = $triger;\n\n // integrate with dropdown-toggle\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n ui.hide();\n });\n\n if (!W.isTouch) {\n $triger.hoverIntent({\n sensitivity: 10,\n interval: 50,\n over: () => {\n ui.show();\n },\n out: () => {\n ui.hide();\n },\n });\n }\n\n $el.on('click touch', (e) => {\n if (\n !$el.data('allow-click') ||\n (W.IsTouchScreen && !$el.data('allow-touch-click'))\n ) {\n e.preventDefault();\n }\n\n if (ui.isShown()) {\n ui.hide();\n } else {\n ui.show();\n }\n });\n\n $el.data(NAME, ui);\n $triger.addClass(`${NAME}-active`);\n }\n\n isShown() {\n return this.$target.hasClass('show');\n }\n\n show() {\n const ui = this;\n ui.$el\n .parents('.dropdown')\n .not('.active')\n .each((i, el) => {\n const $el = $(el);\n $el.find('.dropdown').removeClass('show');\n $el.addClass('show');\n });\n\n ui.$target.addClass('show');\n }\n\n hide() {\n const ui = this;\n const $el = ui.$target;\n $el.removeClass('show');\n $el.find('.dropdown-menu').removeClass('show');\n $el.parent('.dropdown').removeClass('show');\n }\n\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n ui.$triger.removeClass(`${NAME}-active`);\n $.removeData($el, DATA_KEY);\n\n ui.$el = null;\n ui.$parent = null;\n ui.$target = null;\n ui.$triger = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new HoverUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = HoverUI._jQueryInterface;\n $.fn[NAME].Constructor = HoverUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return HoverUI._jQueryInterface;\n };\n\n // auto-apply\n $('[data-toggle=\"hover\"]').ready(() => {\n $('[data-toggle=\"hover\"]').jsHoverUI();\n });\n\n // rewrite 'bootstrap/js/dist/dropdown'\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n e.preventDefault();\n\n const $el = $(e.currentTarget);\n const $parent = $el.parent('.dropdown');\n\n // hide siblings\n $parent\n .parent()\n .find('.dropdown, .dropdown-menu')\n .removeClass('show');\n\n if ($parent.hasClass('show')) {\n $parent.removeClass('show');\n $parent.find('.dropdown-menu').removeClass('show');\n } else {\n $parent.addClass('show');\n $parent.find('.dropdown-menu').addClass('show');\n }\n });\n\n return HoverUI;\n})($);\n\nexport default HoverUI;\n","import $ from 'jquery';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\nimport Events from '../_events';\n\nconst CarouselUI = (($) => {\n // Constants\n const NAME = 'CarouselUI';\n\n class CarouselUI {\n // Static methods\n\n static each(callback) {\n $(`js${NAME}, .js-carousel`).each((i, e) => {\n callback(i, $(e));\n });\n }\n\n static init() {\n this.dispose();\n\n this.each((i, e) => {\n const $e = $(e),\n id = `Carousel${i}`;\n\n $e.attr('id', id);\n $e.data('id', i);\n\n const $items = $(e).find('.carousel-item'),\n count = $items.length;\n if (!count) {\n return;\n }\n\n // create carousel-controls\n if ($e.data('indicators')) {\n const $indicators = $('<ol class=\"carousel-indicators\"></ol>');\n $indicators.append(\n `<li data-target=\"#${id}\" data-slide-to=\"0\" class=\"active\"></li>`,\n );\n for (let i = 1; i < count; i++) {\n $indicators.append(\n `<li data-target=\"#${id}\" data-slide-to=\"${i}\"></li>`,\n );\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend(\n `<i class=\"carousel-control-prev\" data-target=\"#${id}\" role=\"button\" data-slide=\"prev\"><i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i><i class=\"sr-only\">Previous</i></i>`,\n );\n $e.prepend(\n `<i class=\"carousel-control-next\" data-target=\"#${id}\" role=\"button\" data-slide=\"next\"><i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i><i class=\"sr-only\">Next</i></i>`,\n );\n }\n\n // init carousel\n $e.carousel();\n\n const $youtubeSlides = $e.find(\n 'iframe[src^=\"https://www.youtube.com/embed/\"]',\n );\n\n $e.on('slide.bs.carousel', () => {\n if ($youtubeSlides.length) {\n $youtubeSlides.each((i, e) => {\n const $e = $(e);\n try {\n $e.data(\n 'player',\n new YT.Player(e, {\n events: {\n onReady: () => {\n $e.data('player').pauseVideo();\n },\n },\n }),\n );\n\n $e.data('player').pauseVideo();\n } catch (e) {}\n });\n }\n });\n\n $e.find('.carousel-control-prev').on('click', (e) => {\n e.preventDefault();\n $e.carousel('prev');\n });\n\n $e.find('.carousel-control-next').on('click', (e) => {\n e.preventDefault();\n $e.carousel('next');\n });\n\n // init touch swipes\n $e.hammer().bind(Events.SWIPELEFT, (e) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind(Events.SWIPERIGHT, (e) => {\n $(event.target).carousel('prev');\n });\n\n /*$e.find('.carousel-item').hammer().bind('tap', (event) => {\n $(event.target).carousel('next');\n });*/\n\n $e.addClass(`js${NAME}-active`);\n $e.trigger(Events.CAROUSEL_READY);\n });\n }\n\n static dispose() {\n this.each((i, e) => {\n $(e).carousel('dispose');\n });\n }\n }\n\n $(window).on(`${Events.LODEDANDREADY}`, () => {\n CarouselUI.init();\n });\n\n return CarouselUI;\n})($);\n\nexport default CarouselUI;\n","import $ from 'jquery';\n\nconst SlidingMenu = (($) => {\n // Constants\n const NAME = 'jsSlidingMenu';\n const DATA_KEY = NAME;\n\n class SlidingMenu {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n // esc button\n $(window).on('keyup',((e) => {\n if (e.which === 27) {\n $element.find('.is-open[data-toggle=\"offcanvas\"]').click();\n }\n }));\n }\n\n // Public methods\n dispose() {\n console.log(`Disposing: ${NAME} elements`);\n\n $(this._element).removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SlidingMenu(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SlidingMenu._jQueryInterface;\n $.fn[NAME].Constructor = SlidingMenu;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SlidingMenu._jQueryInterface;\n };\n\n // auto-apply\n $(`.ui.${NAME}`).ready(() => {\n $(`.ui.${NAME}`).jsSlidingMenu();\n });\n\n return SlidingMenu;\n})($);\n\nexport default SlidingMenu;\n","\"use strict\";\n\nconst CookieUI = (($) => {\n const D = document;\n const W = window;\n\n class CookieUI {\n static get(name) {\n return D.cookie.split(\"; \").reduce((r, v) => {\n const parts = v.split(\"=\");\n return parts[0] === name ? decodeURIComponent(parts[1]) : r;\n }, \"\");\n }\n\n static set(name, value, days = 7, path = \"/\") {\n const expires = new Date(Date.now() + days * 864e5).toUTCString();\n D.cookie =\n `${name \n }=${ \n encodeURIComponent(value) \n }; expires=${ \n expires \n }; path=${ \n path}`;\n }\n }\n\n //W.CookieUI = new CookieUI();\n\n return CookieUI;\n})($);\n\nexport default CookieUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport Events from '../_events';\nimport CookieUI from './_ui.cookie';\n\nconst FlyoutUI = (($) => {\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'FlyoutUI';\n const COOKIE = `${NAME}-hide`;\n const TIMEOUT = 2000;\n\n class FlyoutUI {\n static init() {\n const ui = this;\n\n ui.$modal = $(`.flyout-${NAME}`);\n\n if (!ui.$modal.length) {\n return false;\n }\n\n const $close = ui.$modal.find(`.flyout-${NAME}__close`);\n ui.$modal.data(NAME, ui);\n\n if ($close.length) {\n $close.on('click', () => {\n ui.hide();\n });\n }\n\n const hide = CookieUI.get(COOKIE);\n\n if (!$close.length || !hide || hide !== 'true') {\n setTimeout(() => {\n ui.show();\n }, TIMEOUT);\n }\n\n }\n\n static show(callback) {\n const ui = this;\n\n ui.$modal.addClass(`flyout-${NAME}__active`);\n }\n\n static hide(callback) {\n const ui = this;\n\n CookieUI.set(COOKIE, 'true', 1);\n ui.$modal.removeClass(`flyout-${NAME}__active`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n FlyoutUI.init();\n });\n\n W.FlyoutUI = FlyoutUI;\n\n return FlyoutUI;\n})($);\n\nexport default FlyoutUI;\n","/**\r\n * Sticky Sidebar JavaScript Plugin.\r\n * @version 3.3.1\r\n * @author Ahmed Bouhuolia <a.bouhuolia@gmail.com>\r\n * @license The MIT License (MIT)\r\n */\r\nconst StickySidebar = (() => {\r\n \r\n // ---------------------------------\r\n // # Define Constants\r\n // ---------------------------------\r\n //\r\n const EVENT_KEY = '.stickySidebar';\r\n const VERSION = '3.3.1';\r\n \r\n const DEFAULTS = {\r\n \r\n /**\r\n * Additional top spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n topSpacing: 0,\r\n \r\n /**\r\n * Additional bottom spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n bottomSpacing: 0,\r\n \r\n /**\r\n * Container sidebar selector to know what the beginning and end of sticky element.\r\n * @type {String|False}\r\n */\r\n containerSelector: false,\r\n \r\n /**\r\n * Inner wrapper selector.\r\n * @type {String}\r\n */\r\n innerWrapperSelector: '.inner-wrapper-sticky',\r\n \r\n /**\r\n * The name of CSS class to apply to elements when they have become stuck.\r\n * @type {String|False}\r\n */\r\n stickyClass: 'is-affixed',\r\n \r\n /**\r\n * Detect when sidebar and its container change height so re-calculate their dimensions.\r\n * @type {Boolean}\r\n */\r\n resizeSensor: true,\r\n \r\n /**\r\n * The sidebar returns to its normal position if its width below this value.\r\n * @type {Numeric}\r\n */\r\n minWidth: false\r\n };\r\n \r\n // ---------------------------------\r\n // # Class Definition\r\n // ---------------------------------\r\n //\r\n /**\r\n * Sticky Sidebar Class.\r\n * @public\r\n */\r\n class StickySidebar{\r\n \r\n /**\r\n * Sticky Sidebar Constructor.\r\n * @constructor\r\n * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector.\r\n * @param {Object} options - The options of sticky sidebar.\r\n */\r\n constructor(sidebar, options = {}){\r\n this.options = StickySidebar.extend(DEFAULTS, options);\r\n \r\n // Sidebar element query if there's no one, throw error.\r\n this.sidebar = ('string' === typeof sidebar ) ? document.querySelector(sidebar) : sidebar;\r\n if( 'undefined' === typeof this.sidebar )\r\n throw new Error(\"There is no specific sidebar element.\");\r\n \r\n this.sidebarInner = false;\r\n this.container = this.sidebar.parentElement;\r\n \r\n // Current Affix Type of sidebar element.\r\n this.affixedType = 'STATIC';\r\n this.direction = 'down';\r\n this.support = {\r\n transform: false,\r\n transform3d: false\r\n };\r\n \r\n this._initialized = false;\r\n this._reStyle = false;\r\n this._breakpoint = false;\r\n this._resizeListeners = [];\r\n \r\n // Dimensions of sidebar, container and screen viewport.\r\n this.dimensions = {\r\n translateY: 0,\r\n topSpacing: 0,\r\n lastTopSpacing: 0,\r\n bottomSpacing: 0,\r\n lastBottomSpacing: 0,\r\n sidebarHeight: 0,\r\n sidebarWidth: 0,\r\n containerTop: 0,\r\n containerHeight: 0,\r\n viewportHeight: 0,\r\n viewportTop: 0, \r\n lastViewportTop: 0,\r\n };\r\n \r\n // Bind event handlers for referencability.\r\n ['handleEvent'].forEach( (method) => {\r\n this[method] = this[method].bind(this);\r\n });\r\n \r\n // Initialize sticky sidebar for first time.\r\n this.initialize();\r\n }\r\n \r\n /**\r\n * Initializes the sticky sidebar by adding inner wrapper, define its container, \r\n * min-width breakpoint, calculating dimensions, adding helper classes and inline style.\r\n * @private\r\n */\r\n initialize(){\r\n this._setSupportFeatures();\r\n \r\n // Get sticky sidebar inner wrapper, if not found, will create one.\r\n if( this.options.innerWrapperSelector ){\r\n this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector);\r\n \r\n if( null === this.sidebarInner )\r\n this.sidebarInner = false;\r\n }\r\n \r\n if( ! this.sidebarInner ){\r\n let wrapper = document.createElement('div');\r\n wrapper.setAttribute('class', 'inner-wrapper-sticky');\r\n this.sidebar.appendChild(wrapper);\r\n \r\n while( this.sidebar.firstChild != wrapper )\r\n wrapper.appendChild(this.sidebar.firstChild);\r\n \r\n this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky');\r\n }\r\n \r\n // Container wrapper of the sidebar.\r\n if( this.options.containerSelector ){\r\n let containers = document.querySelectorAll(this.options.containerSelector);\r\n containers = Array.prototype.slice.call(containers);\r\n \r\n containers.forEach((container, item) => {\r\n if( ! container.contains(this.sidebar) ) return;\r\n this.container = container;\r\n });\r\n \r\n if( ! containers.length )\r\n throw new Error(\"The container does not contains on the sidebar.\");\r\n }\r\n \r\n // If top/bottom spacing is not function parse value to integer.\r\n if( 'function' !== typeof this.options.topSpacing )\r\n this.options.topSpacing = parseInt(this.options.topSpacing) || 0;\r\n \r\n if( 'function' !== typeof this.options.bottomSpacing )\r\n this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0;\r\n \r\n // Breakdown sticky sidebar if screen width below `options.minWidth`.\r\n this._widthBreakpoint();\r\n \r\n // Calculate dimensions of sidebar, container and viewport.\r\n this.calcDimensions();\r\n \r\n // Affix sidebar in proper position.\r\n this.stickyPosition();\r\n \r\n // Bind all events.\r\n this.bindEvents();\r\n \r\n // Inform other properties the sticky sidebar is initialized.\r\n this._initialized = true;\r\n }\r\n \r\n /**\r\n * Bind all events of sticky sidebar plugin.\r\n * @protected\r\n */\r\n bindEvents(){\r\n window.addEventListener('resize', this, {passive: true, capture: false});\r\n window.addEventListener('scroll', this, {passive: true, capture: false});\r\n \r\n this.sidebar.addEventListener('update' + EVENT_KEY, this);\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n new ResizeSensor(this.sidebarInner, this.handleEvent);\r\n new ResizeSensor(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Handles all events of the plugin.\r\n * @param {Object} event - Event object passed from listener.\r\n */\r\n handleEvent(event){\r\n this.updateSticky(event);\r\n }\r\n \r\n /**\r\n * Calculates dimensions of sidebar, container and screen viewpoint\r\n * @public\r\n */\r\n calcDimensions(){\r\n if( this._breakpoint ) return;\r\n var dims = this.dimensions;\r\n \r\n // Container of sticky sidebar dimensions.\r\n dims.containerTop = StickySidebar.offsetRelative(this.container).top;\r\n dims.containerHeight = this.container.clientHeight;\r\n dims.containerBottom = dims.containerTop + dims.containerHeight;\r\n \r\n // Sidebar dimensions.\r\n dims.sidebarHeight = this.sidebarInner.offsetHeight;\r\n dims.sidebarWidth = this.sidebar.offsetWidth;\r\n \r\n // Screen viewport dimensions.\r\n dims.viewportHeight = window.innerHeight;\r\n \r\n this._calcDimensionsWithScroll();\r\n }\r\n \r\n /**\r\n * Some dimensions values need to be up-to-date when scrolling the page.\r\n * @private\r\n */\r\n _calcDimensionsWithScroll(){\r\n var dims = this.dimensions;\r\n \r\n dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left;\r\n \r\n dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n dims.viewportBottom = dims.viewportTop + dims.viewportHeight;\r\n dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n \r\n dims.topSpacing = this.options.topSpacing;\r\n dims.bottomSpacing = this.options.bottomSpacing;\r\n \r\n if( 'function' === typeof dims.topSpacing )\r\n dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0;\r\n \r\n if( 'function' === typeof dims.bottomSpacing )\r\n dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0;\r\n \r\n if( 'VIEWPORT-TOP' === this.affixedType ){\r\n // Adjust translate Y in the case decrease top spacing value.\r\n if( dims.topSpacing < dims.lastTopSpacing ){\r\n dims.translateY += dims.lastTopSpacing - dims.topSpacing;\r\n this._reStyle = true; \r\n }\r\n \r\n } else if( 'VIEWPORT-BOTTOM' === this.affixedType ){\r\n // Adjust translate Y in the case decrease bottom spacing value.\r\n if( dims.bottomSpacing < dims.lastBottomSpacing ){\r\n dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing;\r\n this._reStyle = true;\r\n }\r\n }\r\n \r\n dims.lastTopSpacing = dims.topSpacing;\r\n dims.lastBottomSpacing = dims.bottomSpacing;\r\n }\r\n \r\n /**\r\n * Determine whether the sidebar is bigger than viewport.\r\n * @public\r\n * @return {Boolean}\r\n */\r\n isSidebarFitsViewport(){\r\n return this.dimensions.sidebarHeight < this.dimensions.viewportHeight;\r\n }\r\n \r\n /**\r\n * Observe browser scrolling direction top and down.\r\n */\r\n observeScrollDir(){\r\n var dims = this.dimensions;\r\n if( dims.lastViewportTop === dims.viewportTop ) return;\r\n \r\n var furthest = 'down' === this.direction ? Math.min : Math.max;\r\n \r\n // If the browser is scrolling not in the same direction.\r\n if( dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop) )\r\n this.direction = 'down' === this.direction ? 'up' : 'down';\r\n }\r\n \r\n /**\r\n * Gets affix type of sidebar according to current scrollTop and scrollLeft.\r\n * Holds all logical affix of the sidebar when scrolling up and down and when sidebar \r\n * is bigger than viewport and vice versa.\r\n * @public\r\n * @return {String|False} - Proper affix type.\r\n */\r\n getAffixType(){\r\n var dims = this.dimensions, affixType = false;\r\n \r\n this._calcDimensionsWithScroll();\r\n \r\n var sidebarBottom = dims.sidebarHeight + dims.containerTop;\r\n var colliderTop = dims.viewportTop + dims.topSpacing;\r\n var colliderBottom = dims.viewportBottom - dims.bottomSpacing;\r\n \r\n // When browser is scrolling top.\r\n if( 'up' === this.direction ){\r\n if( colliderTop <= dims.containerTop ){\r\n dims.translateY = 0;\r\n affixType = 'STATIC';\r\n \r\n } else if( colliderTop <= dims.translateY + dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n \r\n } else if( ! this.isSidebarFitsViewport() && dims.containerTop <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n // When browser is scrolling up.\r\n } else {\r\n // When sidebar element is not bigger than screen viewport.\r\n if( this.isSidebarFitsViewport() ){\r\n \r\n if( dims.sidebarHeight + colliderTop >= dims.containerBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom;\r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( colliderTop >= dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n }\r\n // When sidebar element is bigger than screen viewport.\r\n } else {\r\n \r\n if( dims.containerBottom <= colliderBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom; \r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( sidebarBottom + dims.translateY <= colliderBottom ){\r\n dims.translateY = colliderBottom - sidebarBottom;\r\n affixType = 'VIEWPORT-BOTTOM';\r\n \r\n } else if( dims.containerTop + dims.translateY <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n }\r\n }\r\n \r\n // Make sure the translate Y is not bigger than container height.\r\n dims.translateY = Math.max(0, dims.translateY);\r\n dims.translateY = Math.min(dims.containerHeight, dims.translateY);\r\n \r\n dims.lastViewportTop = dims.viewportTop;\r\n return affixType;\r\n }\r\n \r\n /**\r\n * Gets inline style of sticky sidebar wrapper and inner wrapper according \r\n * to its affix type.\r\n * @private\r\n * @param {String} affixType - Affix type of sticky sidebar.\r\n * @return {Object}\r\n */\r\n _getStyle(affixType){\r\n if( 'undefined' === typeof affixType ) return;\r\n \r\n var style = {inner: {}, outer: {}};\r\n var dims = this.dimensions;\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n style.inner = {position: 'fixed', top: dims.topSpacing,\r\n left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth};\r\n break;\r\n case 'VIEWPORT-BOTTOM':\r\n style.inner = {position: 'fixed', top: 'auto', left: dims.sidebarLeft,\r\n bottom: dims.bottomSpacing, width: dims.sidebarWidth};\r\n break;\r\n case 'CONTAINER-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n let translate = this._getTranslate(0, dims.translateY + 'px');\r\n \r\n if( translate )\r\n style.inner = {transform: translate};\r\n else \r\n style.inner = {position: 'absolute', top: dims.translateY, width: dims.sidebarWidth};\r\n break;\r\n }\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n case 'VIEWPORT-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n case 'CONTAINER-BOTTOM':\r\n style.outer = {height: dims.sidebarHeight, position: 'relative'};\r\n break;\r\n }\r\n \r\n style.outer = StickySidebar.extend({height: '', position: ''}, style.outer);\r\n style.inner = StickySidebar.extend({position: 'relative', top: '', left: '',\r\n bottom: '', width: '', transform: this._getTranslate()}, style.inner);\r\n \r\n return style;\r\n }\r\n \r\n /**\r\n * Cause the sidebar to be sticky according to affix type by adding inline\r\n * style, adding helper class and trigger events.\r\n * @function\r\n * @protected\r\n * @param {string} force - Update sticky sidebar position by force.\r\n */\r\n stickyPosition(force){\r\n if( this._breakpoint ) return;\r\n \r\n force = this._reStyle || force || false;\r\n \r\n var offsetTop = this.options.topSpacing;\r\n var offsetBottom = this.options.bottomSpacing;\r\n \r\n var affixType = this.getAffixType();\r\n var style = this._getStyle(affixType);\r\n \r\n if( (this.affixedType != affixType || force) && affixType ){\r\n let affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixEvent);\r\n \r\n if( 'STATIC' === affixType )\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n else\r\n StickySidebar.addClass(this.sidebar, this.options.stickyClass);\r\n \r\n for( let key in style.outer ){\r\n let _unit = ('number' === typeof style.outer[key]) ? 'px' : '';\r\n this.sidebar.style[key] = style.outer[key];\r\n }\r\n \r\n for( let key in style.inner ){\r\n let _unit = ('number' === typeof style.inner[key]) ? 'px' : '';\r\n this.sidebarInner.style[key] = style.inner[key] + _unit;\r\n }\r\n \r\n let affixedEvent = 'affixed.'+ affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixedEvent);\r\n } else {\r\n if( this._initialized ) this.sidebarInner.style.left = style.inner.left;\r\n }\r\n \r\n this.affixedType = affixType;\r\n }\r\n \r\n /**\r\n * Breakdown sticky sidebar when window width is below `options.minWidth` value.\r\n * @protected\r\n */\r\n _widthBreakpoint(){\r\n \r\n if( window.innerWidth <= this.options.minWidth ){\r\n this._breakpoint = true;\r\n this.affixedType = 'STATIC';\r\n \r\n this.sidebar.removeAttribute('style');\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n this.sidebarInner.removeAttribute('style');\r\n } else {\r\n this._breakpoint = false;\r\n }\r\n }\r\n \r\n /**\r\n * Switches between functions stack for each event type, if there's no \r\n * event, it will re-initialize sticky sidebar.\r\n * @public\r\n */\r\n updateSticky(event = {}){\r\n if( this._running ) return;\r\n this._running = true;\r\n \r\n ((eventType) => {\r\n\r\n requestAnimationFrame(() => {\r\n switch( eventType ){\r\n // When browser is scrolling and re-calculate just dimensions\r\n // within scroll. \r\n case 'scroll':\r\n this._calcDimensionsWithScroll();\r\n this.observeScrollDir();\r\n this.stickyPosition();\r\n break;\r\n \r\n // When browser is resizing or there's no event, observe width\r\n // breakpoint and re-calculate dimensions.\r\n case 'resize':\r\n default: \r\n this._widthBreakpoint();\r\n this.calcDimensions();\r\n this.stickyPosition(true);\r\n break;\r\n }\r\n this._running = false;\r\n });\r\n })(event.type);\r\n }\r\n \r\n /**\r\n * Set browser support features to the public property.\r\n * @private\r\n */\r\n _setSupportFeatures(){\r\n var support = this.support;\r\n \r\n support.transform = StickySidebar.supportTransform();\r\n support.transform3d = StickySidebar.supportTransform(true);\r\n }\r\n \r\n /**\r\n * Get translate value, if the browser supports transfrom3d, it will adopt it.\r\n * and the same with translate. if browser doesn't support both return false.\r\n * @param {Number} y - Value of Y-axis.\r\n * @param {Number} x - Value of X-axis.\r\n * @param {Number} z - Value of Z-axis.\r\n * @return {String|False}\r\n */\r\n _getTranslate(y = 0, x = 0, z = 0){\r\n if( this.support.transform3d ) return 'translate3d(' + y +', '+ x +', '+ z +')';\r\n else if( this.support.translate ) return 'translate('+ y +', '+ x +')';\r\n else return false;\r\n }\r\n \r\n /**\r\n * Destroy sticky sidebar plugin.\r\n * @public\r\n */\r\n destroy(){\r\n window.removeEventListener('resize', this, {caption: false});\r\n window.removeEventListener('scroll', this, {caption: false});\r\n \r\n this.sidebar.classList.remove(this.options.stickyClass);\r\n this.sidebar.style.minHeight = '';\r\n \r\n this.sidebar.removeEventListener('update' + EVENT_KEY, this);\r\n \r\n var styleReset = {inner: {}, outer: {}};\r\n \r\n styleReset.inner = {position: '', top: '', left: '', bottom: '', width: '', transform: ''};\r\n styleReset.outer = {height: '', position: ''};\r\n \r\n for( let key in styleReset.outer )\r\n this.sidebar.style[key] = styleReset.outer[key];\r\n \r\n for( let key in styleReset.inner )\r\n this.sidebarInner.style[key] = styleReset.inner[key];\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n ResizeSensor.detach(this.sidebarInner, this.handleEvent);\r\n ResizeSensor.detach(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Determine if the browser supports CSS transform feature.\r\n * @function\r\n * @static\r\n * @param {Boolean} transform3d - Detect transform with translate3d.\r\n * @return {String}\r\n */\r\n static supportTransform(transform3d){\r\n var result = false,\r\n property = (transform3d) ? 'perspective' : 'transform',\r\n upper = property.charAt(0).toUpperCase() + property.slice(1),\r\n prefixes = ['Webkit', 'Moz', 'O', 'ms'],\r\n support = document.createElement('support'),\r\n style = support.style;\r\n \r\n (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function(property, i) {\r\n if (style[property] !== undefined) {\r\n result = property;\r\n return false;\r\n }\r\n });\r\n return result;\r\n }\r\n \r\n /**\r\n * Trigger custom event.\r\n * @static\r\n * @param {DOMObject} element - Target element on the DOM.\r\n * @param {String} eventName - Event name.\r\n * @param {Object} data - \r\n */\r\n static eventTrigger(element, eventName, data){\r\n try{\r\n var event = new CustomEvent(eventName, {detail: data});\r\n } catch(e){\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n element.dispatchEvent(event);\r\n }\r\n \r\n /**\r\n * Extend options object with defaults.\r\n * @function\r\n * @static\r\n */\r\n static extend(defaults, options){\r\n var results = {};\r\n for( let key in defaults ){\r\n if( 'undefined' !== typeof options[key] ) results[key] = options[key];\r\n else results[key] = defaults[key];\r\n }\r\n return results;\r\n }\r\n \r\n /**\r\n * Get current coordinates left and top of specific element.\r\n * @static\r\n */\r\n static offsetRelative(element){\r\n var result = {left: 0, top: 0};\r\n\r\n do{\r\n let offsetTop = element.offsetTop;\r\n let offsetLeft = element.offsetLeft;\r\n \r\n if( ! isNaN(offsetTop) )\r\n result.top += offsetTop;\r\n \r\n if( ! isNaN(offsetLeft) )\r\n result.left += offsetLeft;\r\n\r\n element = ( 'BODY' === element.tagName ) ?\r\n element.parentElement : element.offsetParent;\r\n } while(element)\r\n return result;\r\n }\r\n \r\n /**\r\n * Add specific class name to specific element.\r\n * @static \r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static addClass(element, className){\r\n if( ! StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.add(className);\r\n else\r\n element.className += ' ' + className;\r\n }\r\n }\r\n \r\n /**\r\n * Remove specific class name to specific element\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static removeClass(element, className){\r\n if( StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.remove(className);\r\n else\r\n element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\r\n }\r\n }\r\n\r\n /**\r\n * Determine weather the element has specific class name.\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static hasClass(element, className){\r\n if (element.classList)\r\n return element.classList.contains(className);\r\n else\r\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\r\n }\r\n }\r\n \r\n return StickySidebar;\r\n })();\r\n \r\n export default StickySidebar;\r\n \r\n // Global\r\n // -------------------------\r\n window.StickySidebar = StickySidebar;","'use strict';\n\nimport StickySidebar from 'sticky-sidebar/src/sticky-sidebar';\nimport Events from '../_events';\n\nconst SidebarUI = (($) => {\n const D = document;\n const W = window;\n const $Body = $('html,body');\n const NAME = 'SidebarUI';\n const CLASSNAME = `js${NAME}`;\n\n class SidebarUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n if (!$(`.${CLASSNAME}`).length) {\n return;\n }\n\n console.log(`Initializing: ${NAME}`);\n\n const sticky = new StickySidebar(`.${CLASSNAME}`, {\n innerWrapperSelector: `.${CLASSNAME}__inner`,\n });\n\n $Body.on(`${Events.SCROLL} ${Events.RESIZE}`, (e) => {\n sticky.updateSticky(e);\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.LODEDANDREADY}`, () => {\n SidebarUI.init();\n });\n\n W.SidebarUI = new SidebarUI();\n\n return SidebarUI;\n})($);\n\nexport default SidebarUI;\n","import $ from 'jquery';\n\nconst SpinnerUI = (($) => {\n class SpinnerUI {\n static show(callback) {\n $('#PageLoading').show(0, callback);\n }\n\n static hide(callback) {\n $('#PageLoading').hide('slow', callback);\n }\n }\n\n return SpinnerUI;\n})($);\n\nexport default SpinnerUI;\n","\"use strict\";\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport Spinner from './_ui.spinner';\n\nconst AjaxUI = (($) => {\n // Constants\n const G = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsAjaxUI';\n const DATA_KEY = NAME;\n\n class AjaxUI {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n $element.bind('click', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $('.ajax').each(function() {\n const $this = $(this);\n $this.removeClass('active');\n $this.parents('.nav-item').removeClass('active');\n });\n\n $this.addClass('loading');\n\n AjaxUI.load($this.attr('href'), () => {\n $this.removeClass('loading');\n $this.parents('.nav-item').addClass('active');\n $this.addClass('active');\n });\n });\n }\n\n // Public methods\n static load(url, callback) {\n // show spinner\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n\n // update document location\n G.MainUI.updateLocation(url);\n\n const absoluteLocation = G.URLDetails['base'] + G.URLDetails['relative'].substring(1);\n if (absoluteLocation !== G.location.href) {\n G.history.pushState({\n ajax: true,\n page: absoluteLocation,\n }, document.title, absoluteLocation);\n }\n\n $.ajax({\n sync: false,\n async: true,\n url,\n dataType: 'json',\n method: 'GET',\n cache: false,\n error(jqXHR) {\n console.warn(`AJAX request failure: ${jqXHR.statusText}`);\n G.location.href = url;\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success(data, status, jqXHR) {\n AjaxUI.process(data, jqXHR, callback);\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('set', {\n page: G.URLDetails['relative'] + G.URLDetails['hash'],\n title: jqXHR.getResponseHeader('X-Title'),\n });\n G.ga('send', 'pageview');\n }\n },\n });\n }\n\n static process(data, jqXHR, callback) {\n const css = jqXHR.getResponseHeader('X-Include-CSS').split(',') || [];\n const js = jqXHR.getResponseHeader('X-Include-JS').split(',') || [];\n\n // Replace HTML regions\n if (typeof(data.regions) === 'object') {\n for (const key in data.regions) {\n if (typeof(data.regions[key]) === 'string') {\n AjaxUI.replaceRegion(data.regions[key], key);\n }\n }\n }\n\n // remove already loaded scripts\n $('link[type=\"text/css\"]').each(function() {\n const i = css.indexOf($(this).attr('href'));\n if (i > -1) {\n css.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('href')}`);\n $(this).remove();\n }\n });\n\n $('script[type=\"text/javascript\"]').each(function() {\n const i = js.indexOf($(this).attr('src'));\n if (i > -1) {\n js.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('src')}`);\n $(this).remove();\n }\n });\n\n // preload CSS\n this.preload(css).then(() => {\n const $head = $('head');\n css.forEach((el) => {\n $head.append(`<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" />`);\n });\n\n // preload JS\n this.preload(js, 'script').then(() => {\n\n js.forEach((el) => {\n $Body.append(`<script type=\"text/javascript\" charset=\"UTF-8\" src=\"${el}\"></script>`);\n });\n\n console.log('New page is loaded!');\n\n // trigger events\n if (typeof(data.events) === 'object') {\n for (const eventName in data.events) {\n $(D).trigger(eventName, [data.events[eventName]]);\n }\n }\n\n if (typeof callback !== 'undefined') {\n callback();\n }\n\n $(G).trigger(Events.AJAX);\n });\n });\n }\n\n static preload(items, type = 'text', cache = true, itemCallback = false) {\n if (!items.length) {\n return $.Deferred().resolve().promise();\n }\n\n const dfds = [];\n items.forEach((url, i) => {\n const dfd = $.Deferred();\n\n $.ajax({\n dataType: type,\n cache,\n url,\n }).always(() => {\n dfd.resolve();\n if (itemCallback) {\n itemCallback(i, url);\n }\n });\n\n dfds.push(dfd);\n });\n\n // return a master promise object which will resolve when all the deferred objects have resolved\n return $.when(...dfds);\n }\n\n static replaceRegion(html, key) {\n const $region = $(`[data-ajax-region=\"${key}\"]`);\n\n if ($region.length) {\n $region.empty().append(html);\n } else {\n console.warn('Region returned without class or id!');\n }\n }\n\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new AjaxUI(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = AjaxUI._jQueryInterface;\n $.fn[NAME].Constructor = AjaxUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return AjaxUI._jQueryInterface;\n };\n\n // auto-apply\n $('.ajax').ready(() => {\n $('.ajax').jsAjaxUI();\n });\n\n // AJAX update browser title\n $(D).on('layoutRefresh', (e, data) => {\n D.title = data.Title;\n\n $Html.attr('class', '');\n if (data.ClassName) {\n $Html.addClass(data.ClassName);\n }\n //data.Link = (data.Link === '/home/') ? '/' : data.Link;\n });\n\n // Back/Forward functionality\n G.onpopstate = function(event) {\n const $existingLink = $(`a[href^=\"${ D.location }\"]`);\n\n if (event.state !== null && event.state.ajax) {\n console.log('GOBACK (AJAX state)');\n AjaxUI.load(event.state.page);\n } else if ($existingLink.length && $existingLink.hasClass('ajax')) {\n console.log('GOBACK (AJAX link)');\n $existingLink.trigger('click');\n } else {\n console.log('GOBACK (HTTP)');\n G.location.href = D.location;\n }\n };\n\n return AjaxUI;\n})($);\n\nexport default AjaxUI;\n","import $ from 'jquery';\nimport Events from '../_events';\n\nconst FormFieldUI = (($) => {\n // Constants\n const NAME = 'jsFormFieldUI';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n\n class FormFieldUI {\n\n constructor(el) {\n const ui = this;\n\n ui.$el = $(el);\n ui.shown = true;\n\n ui.$el.data(DATA_KEY, ui);\n //ui.$actions = ui.$el.parents('form').children('.btn-toolbar,.form-actions');\n\n ui.vals = {\n 'val': ui.$el.val(),\n 'checked': ui.$el.is(':checked'),\n };\n\n // bootstrap collapse integration\n ui.$el.parents('.optionset').not('.field').removeClass('collapse');\n ui.$collapse = ui.$el.parents('.field.collapse').not('.composite').first();\n if (ui.$collapse.length) {\n ui.$el.removeClass('collapse');\n\n ui.$collapse.on('show.bs.collapse', (e) => {\n ui.show();\n });\n\n ui.$collapse.on('hidden.bs.collapse', (e) => {\n ui.hide();\n });\n }\n\n ui.$el.addClass(`${NAME}-active`);\n\n return ui;\n }\n\n // Public methods\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n $el.removeClass(`${NAME}-active`);\n $.removeData($el[0], DATA_KEY);\n }\n\n show() {\n const ui = this;\n const $el = ui.$el;\n\n ui.restore();\n ui.shown = true;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('show');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('show');\n }*/\n\n $el.trigger(`shown.${ NAME}`);\n }\n\n hide() {\n const ui = this;\n const $el = ui.$el;\n\n ui.wipe();\n ui.shown = false;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('hide');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('hide');\n }\n\n $el.trigger('change');*/\n $el.trigger(`hidden.${ NAME}`);\n }\n\n wipe() {\n const ui = this;\n const $el = ui.$el;\n\n ui.vals = {\n 'name': $el.attr('name'),\n 'val': $el.val(),\n 'checked': $el.is(':checked'),\n };\n\n $el.val('');\n $el.prop('checked', false);\n }\n\n restore() {\n const ui = this;\n const $el = ui.$el;\n const checked = ui.vals['checked'];\n\n $el.val(ui.vals['val']);\n $el.prop('checked', checked);\n }\n\n addMessage(msg, type = null, scrollTo = true) {\n const ui = this;\n const $field = ui.$el.closest('.field');\n\n\n $field.addClass('has-message');\n if (msg) {\n $field.append(`<div class=\"message alert ${ type }\">${ msg }</div>`);\n }\n\n if (scrollTo) {\n const pos = $field.offset().top;\n $field.focus();\n $Html.scrollTop(pos - 100);\n }\n }\n\n removeMessages() {\n const ui = this;\n const $field = ui.$el.closest('.field');\n\n $field.removeClass('has-message');\n $field.find('.message').remove();\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new FormFieldUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormFieldUI._jQueryInterface;\n $.fn[NAME].Constructor = FormFieldUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormFieldUI._jQueryInterface;\n };\n\n return FormFieldUI;\n})($);\n\nexport default FormFieldUI;\n","import $ from 'jquery';\n\n//import 'bootstrap-select/dist/js/bootstrap-select';\n//$.fn.selectpicker.Constructor.BootstrapVersion = '4';\nimport select2 from 'select2/dist/js/select2.js';\n//import Inputmask from 'inputmask';\n\n//import select2 from 'jquery.inputmask/dist/jquery.inputmask.bundle';\n\nimport Events from '../_events';\nimport SpinnerUI from './_ui.spinner';\nimport FormFieldUI from './_ui.form.fields';\n\nconst FormBasics = (($) => {\n // Constants\n const NAME = 'jsFormBasics';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n const W = window;\n const D = document;\n\n class FormBasics {\n constructor(el) {\n const ui = this;\n const $el = $(el);\n\n ui._el = el;\n $el.data(DATA_KEY, this);\n\n //$('[data-inputmask]').inputmask();\n\n const $fields = $el.find(Events.FORM_FIELDS);\n // init fields ui\n $fields.each((i, el) => {\n // skip some fields here\n new FormFieldUI(el);\n });\n\n const $selectFields = $el.find('select:not([readonly])');\n const $radioOptions = $el.find('input[type=\"radio\"]');\n\n $selectFields.each((i, el) => {\n $(el).select2();\n });\n\n $fields.each((e, el) => {\n const $el = $(el);\n\n if ($el.hasClass('required') || $el.attr('aria-required')) {\n $el.closest('.field').addClass('required');\n }\n });\n\n $radioOptions.each((e, el) => {\n const $el = $(el);\n\n if ($el.is(':checked')) {\n $el.parents('.radio').addClass('checked');\n }\n });\n\n $radioOptions.on('change', (e) => {\n const $el = $(e.currentTarget);\n const $parent = $el.parents('.radio');\n\n $parent.siblings('.radio').each((i, el) => {\n const $el = $(el);\n\n if (!$el.find('input').is(':checked')) {\n $el.removeClass('checked');\n }\n });\n\n if ($el.is(':checked')) {\n $parent.addClass('checked');\n }\n });\n\n $el.on('submit', (e) => {\n setTimeout(() => {\n if (!$el.find('.error').length) {\n SpinnerUI.show();\n }\n }, 100);\n });\n\n $el.addClass(`${NAME}-active`);\n $el.trigger(Events.FORM_INIT_BASICS);\n }\n\n // Public methods\n dispose() {\n const $el = $(this._el);\n\n const $selectFields = $el.find('select:not([readonly])');\n $selectFields.each((i, el) => {\n $(el).select2('destroy');\n });\n\n $el.removeClass(`${NAME}-active`);\n $.removeData(this._el, DATA_KEY);\n this._el = null;\n }\n\n static _jQueryInterface() {\n return this.each(() => {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new FormBasics(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormBasics._jQueryInterface;\n $.fn[NAME].Constructor = FormBasics;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormBasics._jQueryInterface;\n };\n\n const init = () => {\n $('form').jsFormBasics();\n };\n\n // auto-apply\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n init();\n });\n\n return FormBasics;\n})($);\n\nexport default FormBasics;\n","'use strict';\n\nimport Events from '../_events';\n\nconst HeaderUI = (($) => {\n const D = document;\n const W = window;\n const $Body = $('html,body');\n const NAME = 'HeaderUI';\n const CLASSNAME = `js${NAME}`;\n\n class HeaderUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n //console.log(`Initializing: ${NAME}`);\n\n const $header = $(`#Header,.js${NAME}`);\n const updateHeader = () => {\n const h = $header.height();\n const s = $Body.scrollTop();\n if (s > h) {\n $Body.addClass('shrink');\n } else {\n $Body.removeClass('shrink');\n }\n };\n\n updateHeader();\n $Body.on('scroll resize', () => {\n updateHeader();\n });\n\n const updateFooter = (i, el) => {\n const $el = $(el);\n const footerHeight = $el.height();\n $el.css('height', footerHeight);\n\n $el.css('margin-top', -footerHeight);\n $el.siblings('.wrapper').css('padding-bottom', footerHeight);\n };\n\n $('.footer,.jsFooterUI').css('height', 'auto');\n setTimeout(() => {\n $('.footer,.jsFooterUI').each(updateFooter);\n }, 500);\n\n $Body.on('resize', () => {\n $('.footer,.jsFooterUI').css('height', 'auto');\n setTimeout(() => {\n $('.footer,.jsFooterUI').each(updateFooter);\n }, 500);\n });\n\n }\n\n static dispose() {\n $Body.removeClass('shrink');\n $(`#Header,.js${NAME},.footer,.jsFooterUI,.wrapper`).attr('css', '');\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n HeaderUI.init();\n });\n\n W.HeaderUI = new HeaderUI();\n\n return HeaderUI;\n})($);\n\nexport default HeaderUI;\n","'use strict';\n\nimport $ from 'jquery';\n\nimport Events from './_events';\nimport Consts from './_consts';\n\nimport Spinner from './_components/_ui.spinner';\n\n// AJAX functionality\nimport AjaxUI from './_components/_ui.ajax';\n\nimport FormBasics from './_components/_ui.form.basics';\nimport HeaderUI from './_components/_ui.header-footer';\n\nimport SmoothScroll from 'smooth-scroll';\nconst smoothScroll = SmoothScroll();\n\nconst MainUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'MainUI';\n\n console.clear();\n console.info(\n '%cUI Kit: https://github.com/a2nt/webpack-bootstrap-ui-kit by Tony Air (tony@twma.pro)',\n 'color:yellow;font-size:16px',\n );\n console.groupCollapsed('Events');\n Object.keys(Events).forEach((k) => {\n console.info(`${k}: ${Events[k]}`);\n });\n console.groupEnd('Events');\n\n console.groupCollapsed('Consts');\n Object.keys(Consts).forEach((k) => {\n console.info(`${k}: ${Consts[k]}`);\n });\n console.groupEnd('Events');\n\n console.groupCollapsed('Init');\n console.time('init');\n $(W).on(`${Events.LODEDANDREADY}`, () => {\n console.groupEnd('Init');\n console.timeEnd('init');\n });\n\n // get browser locale\n //const Locale = $('html').attr('lang').substring(0, 2);\n\n const $AlertNotify = $('#AlertNotify');\n const $SiteWideMessage = $('#SiteWideMessage');\n\n // get browser window visibility preferences\n // Opera 12.10, Firefox >=18, Chrome >=31, IE11\n const HiddenName = 'hidden';\n const VisibilityChangeEvent = 'visibilitychange';\n\n // update visibility state\n D.addEventListener(VisibilityChangeEvent, () => {\n if (D.visibilityState === HiddenName) {\n console.log('Tab: hidden');\n $Body.addClass('is-hidden');\n $Body.trigger(Events.TABHIDDEN);\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger(Events.TABFOCUSED);\n }\n });\n\n // update online/offline state\n const updateOnlineStatus = () => {\n if (typeof navigator.onLine === 'undefined') {\n return;\n }\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger(Events.OFFLINE);\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger(Events.ONLINE);\n }\n };\n\n W.addEventListener(\n 'offline',\n () => {\n updateOnlineStatus();\n },\n false,\n );\n\n W.addEventListener(\n 'online',\n () => {\n updateOnlineStatus();\n },\n false,\n );\n\n W.addEventListener('load', () => {\n updateOnlineStatus();\n });\n\n $(W).on(`${Events.AJAX}`, () => {\n updateOnlineStatus();\n });\n\n // scrollTo\n const ScrollTo = (trigger, selector) => {\n smoothScroll.animateScroll(D.querySelector(selector), trigger, {\n speed: 500,\n offset: -20,\n //easing: 'easeInOutCubic',\n // Callback API\n //before: (anchor, toggle) => {}, // Callback to run before scroll\n //`after: (anchor, toggle) => {} // Callback to run after scroll\n });\n };\n\n // session ping\n const pingInterval = setInterval(() => {\n if ($Body.hasClass('is-offline')) {\n return;\n }\n\n $.ajax({\n sync: false,\n async: true,\n cache: false,\n url: '/Security/ping',\n global: false,\n type: 'POST',\n complete(data, datastatus) {\n if (datastatus !== 'success') {\n clearInterval(pingInterval);\n\n $Body.addClass('is-offline');\n //W.location.reload(false);\n } else {\n $Body.removeClass('is-offline');\n }\n },\n });\n }, 300000); // 5 min in ms\n\n W.URLDetails = {\n base: $('base').attr('href'),\n relative: '/',\n hash: '',\n };\n\n let eventFired = false;\n const setTouchScreen = (bool) => {\n if (W.IsTouchScreen === bool || eventFired) {\n return;\n }\n\n eventFired = true;\n\n W.IsTouchScreen = bool;\n $.support.touch = W.IsTouchScreen;\n\n if (bool) {\n console.log(`${NAME}: Touch screen enabled`);\n } else {\n console.log(`${NAME}: Touch screen disabled`);\n }\n\n // prevent firing touch and mouse events together\n setTimeout(() => {\n eventFired = false;\n }, 200);\n };\n\n setTouchScreen('ontouchstart' in window || navigator.msMaxTouchPoints > 0);\n\n // disable touch on mouse events\n /*D.addEventListener('mousemove', () => {\n setTouchScreen(false);\n });\n\n D.addEventListener('mousedown', () => {\n setTouchScreen(false);\n });*/\n\n // enable touch screen on touch events\n D.addEventListener('touchmove', () => {\n setTouchScreen(true);\n });\n D.addEventListener('touchstart', () => {\n setTouchScreen(true);\n });\n\n class MainUI {\n // Static methods\n\n static init() {\n this.dispose();\n\n console.log(`Initializing: ${NAME}`);\n\n // update location details\n this.updateLocation();\n\n // mark available offline areas\n if ('caches' in W) {\n $('a.offline').addClass('offline-available');\n }\n\n this.loadImages();\n\n // detect bootstrap screen size\n this.detectBootstrapScreenSize();\n\n // mark external links\n $('a.external,a[rel=\"external\"]').attr('target', '_blank');\n\n // show encoded emails\n /*$(D).find('.obm').each(() => {\n if ($(this).attr('data-val') !== undefined) {\n const email = $(this).attr('data-val').split('')\n .reverse()\n .join('')\n .slice(0, -8)\n .replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))\n .replace('#AT#', '@');\n const attr = $(this).attr('data-val-append');\n if (attr !== undefined && attr !== false) {\n $(this).append(email);\n }\n if ($(this).find('.sr-only').length > 0) {\n $(this).find('.sr-only').append(email);\n }\n if ($(this).attr('href') !== undefined) {\n $(this).attr('href', `mailto:${email}`);\n }\n }\n });*/\n //\n\n // scroll links\n $('.js-scrollTo').on('click', (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const $el = $(e.currentTarget);\n\n ScrollTo(el, $el.attr('data-target'));\n });\n\n // load external fonts\n if ($('[data-extfont]').length) {\n $.getScript(\n '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js',\n () => {\n const fonts = [];\n\n $('[data-extfont]').each((i, el) => {\n fonts[i] = $(el).attr('data-extfont');\n });\n\n W.WebFont.load({\n google: {\n families: fonts,\n },\n });\n },\n );\n }\n\n // data-set links\n $('[data-set-target]').on('click', (e) => {\n const $el = $(e.currentTarget);\n const $target = $($el.data('set-target'));\n\n if (!$target.length) {\n return;\n }\n\n $target.each((i, targetEl) => {\n const $targetEl = $(targetEl);\n const tag = $targetEl.prop('tagName').toLowerCase();\n\n if (tag === 'input' || tag === 'select') {\n $targetEl.val($el.data('set-val'));\n } else if (!$targetEl.hasClass('field')) {\n $targetEl.text($el.data('set-val'));\n }\n });\n\n $el.trigger(Events.SET_TARGET_UPDATE);\n $target.closest('form').trigger(Events.SET_TARGET_UPDATE);\n });\n\n // emulate links\n $('.a[data-href]').on('click', (e) => {\n const $el = $(e.currentTarget);\n const href = $el.data('href');\n if (!href.length) {\n console.warn('Missing data-href');\n console.warn($el);\n }\n\n W.location.assign(href);\n });\n\n // hide spinner\n Spinner.hide(() => {\n $Body.addClass('loaded');\n });\n\n // fire page printing\n if (W.URLDetails['hash'].indexOf('printpage') > -1) {\n W.print();\n }\n\n $Body.data(NAME, this);\n }\n\n static detectBootstrapScreenSize() {\n const $el = $('<div class=\"env-test\"></div>');\n let envs = [...Consts.ENVS];\n $Body.append($el);\n\n let curEnv = envs.shift();\n envs = envs.reverse();\n\n for (let i = 0; i < envs.length; ++i) {\n const env = envs[i];\n $el.addClass(`d-${env}-none`);\n if ($el.is(':hidden')) {\n curEnv = env;\n break;\n }\n }\n\n $el.remove();\n $Body.removeClass(envs);\n $Body.addClass(curEnv);\n\n return curEnv;\n }\n\n static updateLocation(url) {\n let location = url || W.location.href;\n location = location.replace(W.URLDetails['base'], '/');\n const hash = location.indexOf('#');\n\n W.URLDetails.relative = location.split('#')[0];\n W.URLDetails.hash =\n hash >= 0 ? location.substr(location.indexOf('#')) : '';\n }\n\n // show site-wide alert\n static alert(msg, cls) {\n $SiteWideMessage.fadeOut('fast');\n\n $SiteWideMessage.html(\n `<div class=\"page-alert\"><div class=\"alert alert-${cls}\"><i class=\"close\" data-dismiss=\"alert\">×</i>${msg}</div></div>`,\n );\n $SiteWideMessage.find('.page-alert').alert();\n\n $SiteWideMessage.find('.close[data-dismiss=\"alert\"]').click(() => {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.page-alert').alert('close');\n });\n });\n\n $SiteWideMessage.fadeIn('slow');\n\n if ($AlertNotify.length) {\n $AlertNotify[0].play();\n }\n\n $(W).trigger(`${Events.ALLERTAPPEARED}`);\n }\n\n // hide site-wide alert\n static alertHide() {\n if ($SiteWideMessage.length !== 0) {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.alert').alert('close');\n });\n }\n\n if ($AlertNotify.length && typeof $AlertNotify[0].stop !== 'undefined') {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger(`${Events.ALLERTREMOVED}`);\n }\n\n // load all images\n static loadImages() {\n const $imgs = $Body.find('img');\n const $imgUrls = [];\n const $imgLazyUrls = [];\n\n // collect image details\n $imgs.each((i, el) => {\n const $el = $(el);\n const src = $el.attr('src');\n const lazySrc = $el.data('lazy-src');\n\n if (src && src.length) {\n $imgUrls.push(src);\n }\n if (lazySrc && lazySrc.length) {\n $imgLazyUrls.push(lazySrc);\n $el.addClass('loading');\n\n AjaxUI.preload([lazySrc]).then(() => {\n $el.attr('src', lazySrc);\n\n $el.addClass('loaded');\n $el.removeClass('loading');\n\n $el.trigger(`${Events.LAZYIMAGEREADY}`);\n });\n }\n });\n\n // load lazy backgrounds\n $Body.find('[data-lazy-bg]').each((i, el) => {\n const $el = $(el);\n const lazySrc = $el.data('lazy-bg');\n\n if (lazySrc && lazySrc.length) {\n $imgLazyUrls.push(lazySrc);\n $el.addClass('loading');\n\n AjaxUI.preload([lazySrc]).then(() => {\n $el.css({ 'background-image': `url(${lazySrc})` });\n\n $el.addClass('loaded');\n $el.removeClass('loading');\n\n $el.trigger(`${Events.LAZYIMAGEREADY}`);\n });\n }\n });\n\n // load defined images\n AjaxUI.preload($imgUrls).then(() => {\n $(W).trigger('images-loaded');\n\n // load lazy images\n AjaxUI.preload($imgLazyUrls).then(() => {\n console.log('All images are loaded!');\n\n setTimeout(() => {\n $(W).trigger(`${Events.LAZYIMAGESREADY}`);\n }, 100);\n });\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n MainUI.init();\n });\n\n $(W).on('resize', () => {\n MainUI.detectBootstrapScreenSize();\n });\n\n $(W).on('beforeunload unload', () => {\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n });\n\n // hide spinner on target _blank\n $('[target=\"_blank\"],.external').on('click submit', () => {\n setTimeout(() => {\n Spinner.hide(() => {\n $Body.addClass('loaded');\n });\n }, 1000);\n });\n\n W.MainUI = MainUI;\n\n return MainUI;\n})($);\n\nexport default MainUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport MainUI from \"../_main\";\nimport Events from '../_events';\nimport SpinnerUI from './_ui.spinner';\n\nconst VideoPreviewUI = (($) => {\n\n const NAME = 'jsVideoPreviewUI';\n const DATA_KEY = NAME;\n\n const G = window;\n const D = document;\n\n class VideoPreviewUI {\n\n constructor(el) {\n console.log(`Initializing: ${NAME}`);\n\n const ui = this;\n ui.$_el = $(el);\n ui.innerHTML = ui.$_el[0].innerHTML;\n\n ui.$_el.data(DATA_KEY, this);\n const href = ui.$_el.attr('href') || ui.$_el.data('href');\n const YouTubeGetID = (url) => {\n parsedURL = url.split(/(vi\\/|v%3D|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n return undefined !== parsedURL[2] ? parsedURL[2].split(/[^0-9a-z_-]/i)[0] : parsedURL[0];\n };\n\n\n let video;\n\n if (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n let video_id;\n\n if (video[1] === 'youtube' || video[1] === 'youtube-nocookie' || video[1] === 'youtu') {\n video_id = YouTubeGetID(href);\n }\n\n if (video[1] == 'vimeo') {\n video_id = video[3];\n ui.$_el.addClass('loading');\n $.ajax({\n type: 'GET',\n url: `https://vimeo.com/api/v2/video/${ video_id }.json`,\n jsonp: 'callback',\n dataType: 'jsonp',\n success: function(data) {\n const thumbnail_src = data[0].thumbnail_large;\n ui.show(thumbnail_src);\n ui.$_el.removeClass('loading');\n },\n });\n\n return;\n }\n\n if (video_id) {\n ui.show(`//i3.ytimg.com/vi/${video_id}/0.jpg`);\n }\n }\n }\n\n show(src) {\n const ui = this;\n ui.$_el[0].innerHTML = '';\n ui.$_el.append(`<img src=\"${src}\" alt=\"Video\" />`);\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n ui.$_el[0].innerHTML = ui.innerHTML;\n }\n\n static _jQueryInterface() {\n return this.each((i, el) => {\n // attach functionality to element\n const $el = $(el);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new VideoPreviewUI(el);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = VideoPreviewUI._jQueryInterface;\n $.fn[NAME].Constructor = VideoPreviewUI;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return VideoPreviewUI._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('[data-video-preview=\"true\"]').jsVideoPreviewUI();\n });\n\n return VideoPreviewUI;\n})($);\n\nexport default VideoPreviewUI;\n","'use strict';\n\nimport $ from 'jquery';\n\nimport Events from './_events';\n\nconst LayoutUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'LayoutUI';\n\n const datepickerOptions = {\n autoclose: true,\n startDate: 0,\n //todayBtn: true,\n todayHighlight: true,\n clearBtn: true,\n };\n\n class LayoutUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n console.log(`Initializing: ${NAME}`);\n // your custom UI\n\n // Custom fonts\n $Body.append(\n '<link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,400i,700,700i&display=swap\" rel=\"stylesheet\">',\n );\n\n /*google analytics */\n\n /*$.getScript('https://www.google-analytics.com/analytics.js', () => {\n ga('create', 'UA-********-*', 'auto');\n ga('send', 'pageview');\n });*/\n\n\n // Fire further js when layout is ready\n $(W).trigger(Events.LODEDANDREADY);\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n LayoutUI.init();\n });\n\n W.LayoutUI = LayoutUI;\n\n return LayoutUI;\n})($);\n\nexport default LayoutUI;\n","'use strict';\n\nimport '../scss/app.scss';\n\n// import Bootstrap\nimport 'popper.js';\nimport 'bootstrap/js/dist/util';\nimport 'bootstrap/js/dist/alert';\nimport 'bootstrap/js/dist/button';\nimport 'bootstrap/js/dist/carousel';\nimport 'bootstrap/js/dist/collapse';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\n// Routie\n//import 'pouchdb/dist/pouchdb';\n//import './_components/routes/index';\n\n// conflicts with _components/_ui.hover.js (shows dropdown on hover)\n//import 'bootstrap/js/dist/dropdown';\nimport './_components/_ui.hover';\n\nimport './_components/_ui.carousel';\nimport './_components/_ui.menu';\n\nimport 'bootstrap/js/dist/modal';\nimport 'bootstrap/js/dist/tooltip';\nimport 'bootstrap/js/dist/popover';\nimport 'bootstrap/js/dist/scrollspy';\nimport 'bootstrap/js/dist/tab';\n//\n\n// Offcanvas menu\n//import 'offcanvas-bootstrap/dist/js/bootstrap.offcanvas';\n\n// Uncomment it to enable meta-lightbox zooming on hover\n//import 'jquery-zoom/jquery.zoom';\n\n// FlyoutUI\nimport FlyoutUI from './_components/_ui.flyout';\n\n// Sticky sidebar\nimport SidebarUI from './_components/_ui.sidebar';\n\n// Toggle bootstrap form fields\n//import FormToggleUI from './_components/_ui.form.fields.toggle';\n\n// Bootstrap Date & Time fields\n//import FormDatetime from './_components/_ui.form.datetime';\n\n// Stepped forms functionality\n//import FormStepped from './_components/_ui.form.stepped';\n\n// Forms validation functionality\n//import FormValidate from './_components/_ui.form.validate';\n\n// Store forms data into localStorage\n//import FormStorage from './_components/_ui.form.storage';\n\n// client-side images cropping\n//import FormCroppie from './_components/_ui.form.croppie';\n\n// Google NoCaptcha fields\n//import NoCaptcha from './_components/_ui.nocaptcha';\n\n// youtube video preview image\nimport './_components/_ui.video.preview';\n\n// Meta Lightbox\nimport '@a2nt/meta-lightbox/src/js/app';\n\n//import Confirmation from 'bootstrap-confirmation2/dist/bootstrap-confirmation';\n//import Table from 'bootstrap-table/dist/bootstrap-table';\n\n// Map UI\n//import MapApi from './_components/_ui.map.api';\n\nimport './_main';\nimport './_layout';\n\n// Google Analytics\nimport './_components/drivers/_google.track.external.links';\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nconst images = importAll(\n require.context('../img/', false, /\\.(png|jpe?g|svg)$/),\n);\nconst fontAwesome = importAll(\n require.context('font-awesome', false, /\\.(otf|eot|svg|ttf|woff|woff2)$/),\n);\n","module.exports = jQuery;"],"sourceRoot":""} |