webpack-bootstrap-ui-kit/dist/js/app.js.map

1 line
1.2 MiB

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/bootstrap-timepicker/js/bootstrap-timepicker.js","webpack:///./node_modules/bootstrap/js/dist/alert.js","webpack:///./node_modules/bootstrap/js/dist/button.js","webpack:///./node_modules/bootstrap/js/dist/carousel.js","webpack:///./node_modules/bootstrap/js/dist/collapse.js","webpack:///./node_modules/bootstrap/js/dist/modal.js","webpack:///./node_modules/bootstrap/js/dist/popover.js","webpack:///./node_modules/bootstrap/js/dist/scrollspy.js","webpack:///./node_modules/bootstrap/js/dist/tab.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js","webpack:///./node_modules/bootstrap/js/dist/util.js","webpack:///./node_modules/font-awesome sync nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./node_modules/jquery-hammerjs/jquery.hammer.js","webpack:///./node_modules/jquery-hoverintent/jquery.hoverIntent.js","webpack:///./node_modules/jquery.inputmask/dist/jquery.inputmask.bundle.js","webpack:///./node_modules/meta-lightbox/meta-lightbox.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js","webpack:///(webpack)/buildin/global.js","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/_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.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/_main.js","webpack:///./src/js/_components/_ui.video.preview.js","webpack:///./src/js/_components/_ui.form.datetime.js","webpack:///./src/js/_components/_ui.form.validate.field.js","webpack:///./src/js/_components/_ui.form.stepped.js","webpack:///./src/js/_layout.js","webpack:///./src/js/app.js","webpack:///./src/js/lang/_en.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","$","undefined","UTCDate","Date","UTC","apply","arguments","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","method","deprecationMsg","fn","datepicker","deprecated","this","extras","DateArray","slice","contains","val","valueOf","length","remove","splice","replace","new_array","isArray","clear","push","copy","a","extend","Datepicker","element","options","data","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","is","inputField","find","component","hasClass","isInline","picker","DPGlobal","template","_check_template","templates","leftArrow","html","rightArrow","_buildEvents","_attachEvents","addClass","appendTo","rtl","calendarWeeks","attr","Number","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","update","show","constructor","_resolveViewName","view","each","viewModes","viewMode","inArray","names","_resolveDaysOfWeek","daysOfWeek","split","map","tmp","match","ex","opts","lang","language","defaults","minViewMode","maxViewMode","Math","max","min","multidate","multidateSeparator","String","weekStart","weekEnd","format","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","Infinity","plc","orientation","toLowerCase","_plc","grep","word","test","x","y","year","month","day","_applyEvents","evs","el","ch","ev","on","_unapplyEvents","off","events","keyup","proxy","e","keyCode","keydown","paste","showOnFocus","focus","click","blur","_focused_from","target","immediateUpdates","date","navArrowsClick","dayCellClick","window","resize","place","document","hide","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","event","altdate","local_date","_utc_to_local","trigger","type","ix","formatDate","prop","enableOnReadonly","container","navigator","msMaxTouchPoints","disableTouchKeyboard","detach","forceParse","setValue","destroy","dateString","originalEvent","clipboardData","types","getData","setDate","preventDefault","utc","local","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","args","setUTCDates","setUTCDate","formatted","getFormattedDate","join","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","windowWidth","width","scrollTop","appendOffset","offset","parentsZindex","parents","itemZIndex","css","zIndex","zIndexOffset","parent","height","left","top","removeClass","yorient","parseInt","right","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","append","localDate","monthsShort","setRange","range","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","selector","cssClass","factor","startYear","endYear","beforeFn","classes","tooltip","before","step","startVal","floor","endVal","focusedVal","selected","currVal","noop","enabled","concat","text","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","isNaN","clearBtn","title","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","th","yth","calWeek","content","beforeShowDay","isFunction","uniqueSort","unique","toString","monthsTitle","months","end","eq","beforeShowMonth","that","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","toggleClass","stopPropagation","_setDate","index","setUTCMonth","timestamp","currentTarget","dir","navStep","moveMonth","_toggle_multidate","toggleActive","which","moveDay","newDate","moveWeek","new_month","new_date","mag","abs","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","ctrlKey","shiftKey","children","filter","DateRangePicker","inputs","jquery","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","prefix","out","RegExp","re_lower","_","opts_from_locale","locale_opts","k","updateRanges","updating","dp","keep_empty_values","j","old","option","internal_return","Array","shift","$this","elopts","locopts","toArray","Error","Constructor","en","days","daysShort","validParts","nonpunctuation","toValue","toDisplay","separators","parts","assumeNearby","part","fn_map","w","dateAliases","yesterday","tomorrow","filtered","parsed","setters_order","setters_map","yyyy","v","threshold","fparts","match_part","cnt","_date","D","DD","M","MM","yy","substring","dd","mm","seps","headTemplate","contTemplate","footTemplate","noConflict","version","msg","console","warn","Timepicker","widget","$element","defaultTime","disableFocus","disableMousewheel","isOpen","minuteStep","modalBackdrop","secondStep","snapToStep","showInputs","showMeridian","showSeconds","appendWidgetTo","showWidgetOnAddonClick","icons","maxHours","explicitMode","handleDocumentClick","self","scope","$widget","hideWidget","_init","showWidget","highlightUnit","elementKeydown","blurElement","mousewheel","getTemplate","widgetClick","select","widgetKeydown","widgetKeyup","setDefaultTime","highlightedUnit","updateFromElementVal","hour","minute","second","meridian","decrementHour","toggleMeridian","decrementMinute","newVal","decrementSecond","highlightPrevUnit","highlightNextUnit","incrementHour","highlightHour","incrementMinute","highlightMinute","incrementSecond","highlightSecond","highlightMeridian","getCursorPosition","input","selectionStart","selection","sel","createRange","selLen","moveStart","hourTemplate","minuteTemplate","secondTemplate","meridianTemplate","templateContent","up","down","modal","position","setSelectionRange","setTimeout","delta","wheelDelta","detail","scrollTo","changeToNearestStep","segment","round","widgetWidth","widgetHeight","windowHeight","first","topOverflow","bottomOverflow","timepicker","dTime","hours","getHours","minutes","getMinutes","seconds","getSeconds","ceil","setTime","time","ignoreWidget","timeMode","timeArray","updateElement","updateWidget","updateFromWidgetInputs","$input","action","closest","jQuery","Util","_defineProperties","props","descriptor","configurable","writable","JQUERY_NO_CONFLICT","Event","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","protoProps","staticProps","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","getSelectorFromElement","querySelector","closeEvent","_this","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","_destroyElement","emulateTransitionEnd","_jQueryInterface","config","_handleDismiss","alertInstance","factory","NAME","Selector","FOCUS_BLUR_DATA_API","Button","toggle","triggerChangeEvent","addAriaPressed","checked","classList","activeElement","hasAttribute","setAttribute","button","_defineProperty","obj","_objectSpread","source","ownKeys","keys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","forEach","DATA_KEY","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","documentElement","maxTouchPoints","_pointerEvent","Boolean","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","triggerTransitionEnd","cycle","clearInterval","setInterval","visibilityState","to","activeIndex","_getItemIndex","direction","typeCheckConfig","_handleSwipe","absDeltax","_this2","_keydown","_addTouchEventListeners","_this3","start","pointerType","toUpperCase","clientX","touches","clearTimeout","querySelectorAll","add","move","tagName","parentNode","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","reflow","nextElementInterval","getAttribute","defaultInterval","TypeError","ride","_dataApiClickHandler","slideIndex","carousels","len","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","ACTIVES","DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","not","startEvent","dimension","_getDimension","style","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","isElement","_getTargetFromElement","triggerArray","$trigger","selectors","$target","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","DIALOG","MODAL_BODY","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","showEvent","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","hideEvent","transition","_hideModal","htmlElement","handleUpdate","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","_enforceFocus","shownEvent","transitionComplete","has","_this5","_this6","_this7","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this8","animate","createElement","className","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","innerWidth","_getScrollbarWidth","_this9","fixedContent","stickyContent","actualPadding","calculatedPadding","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","clientWidth","removeChild","_this10","Tooltip","BSCLS_PREFIX_REGEX","placement","INSERTED","CLICK","FOCUSOUT","Popover","_Tooltip","subClass","superClass","__proto__","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","CLASS_PREFIX","tip","setContent","$tip","setElementContent","_cleanTipClass","tabClass","ACTIVATE","SCROLL","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","sort","b","getUID","pageYOffset","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","nodeName","makeArray","complete","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","Popper","uriAttrs","DefaultWhitelist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","attributes","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","DISALLOWED_ATTRIBUTES","animation","delay","fallbackPlacement","boundary","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HoverState","Trigger","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_setListeners","enable","disable","toggleEnabled","dataKey","context","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","shadowRoot","findShadowRoot","isInTheDom","ownerDocument","tipId","_getAttachment","_getContainer","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","_fixTransition","prevHoverState","scheduleUpdate","empty","offsets","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","popperData","popperInstance","instance","popper","initConfigAnimation","transitionEndEmulator","duration","called","random","getElementById","hrefAttr","trim","err","transitionDelay","floatTransitionDuration","floatTransitionDelay","offsetHeight","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","attachShadow","getRootNode","root","ShadowRoot","special","bindType","delegateType","handle","handleObj","handler","webpackEmptyContext","req","resolve","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","now","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","iterator","deprecate","message","deprecationMessage","stack","log","output","nextKey","dest","src","merge","inherit","child","base","properties","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","findByKey","uniqueArray","results","values","prefixed","camelProp","_uniqueId","getWindowForElement","doc","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","userAgent","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","init","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","deltaX","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","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","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","all","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","DEDUP_TIMEOUT","DEDUP_DISTANCE","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","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","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","existing","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","originalEmit","hammer","$el","hammerify","cX","cY","_cfg","sensitivity","INSTANCE_COUNT","track","pageX","pageY","compare","cfg","timeoutId","isActive","over","hoverIntent","handlerIn","handlerOut","instanceId","isPlainObject","handleHover","hoverIntentData","Inputmask","maskset","noMasksCache","definitions","userOptions","dataAttribute","isRTL","numericInput","resolveAlias","aliasStr","aliasDefinition","aliases","mask","generateMaskSet","nocache","generateMask","metadata","greedy","repeat","placeholder","repeatStart","groupmarker","quantifiermarker","masksetDefinition","masksCache","maskToken","analyseMask","validPositions","_buffer","buffer","tests","maskLength","reverse","ms","keepStatic","altMask","ndx","msk","alternatormarker","pop","maskScope","actionObj","getMaskTemplate","baseOnInput","minimalPos","includeMode","ndxIntlzr","testPos","maskTemplate","pos","lvp","getLastValidPosition","maxLength","getMaskSet","locator","nativeDef","getPlaceholder","getTestTemplate","jitMasking","isFinite","def","resetMaskSet","soft","closestTo","strict","after","valids","posNdx","psNdx","stripValidPositions","nocheck","IsEnclosedStatic","posMatch","prevMatch","nextMatch","startPos","positionsClone","needsValidation","optionality","canClearPosition","isMask","positionCanMatchDefinition","determineTestTemplate","guessNextBest","testPositions","lvTest","getTests","lvTestAltArr","alternation","optionalQuantifier","newBlockMarker","checkAlternationMatch","tstPs","getTest","valid","tndx","resolveTestFromToken","ndxInitializer","loopNdx","quantifierRecurse","handleMatch","isFirstMatch","latestMatch","tokenGroup","firstMatch","matches","isQuantifier","resolveNdxInitializer","alternateNdx","targetAlternation","bestMatch","indexPos","lmnt","ndxPos","cd","cacheDependency","isGroup","isOptional","optionalToken","insertStop","isAlternator","maltMatches","alternateToken","malternateMatches","currentMatches","loopNdxCnt","altIndex","amndx","currentPos","ndxInitializerClone","altIndexArr","ntndx","ndx1","altMatch","hasMatch","ndx2","altMatch2","na","altLocArr","alndx","qt","qndx","quantifier","filterTests","maskTokens","previousPos","tst","mtndx","cardinality","casing","getBufferTemplate","getBuffer","noCache","refreshFromBuffer","skipOptionalPartCharacter","posBefore","fromCharCode","SPACE","altArr1","altArr2","altArrC","isMatch","fromSetValid","fromAlternate","isSelection","posObj","begin","insertMode","_isValid","rslt","loopend","chrs","getBufferElement","validatedPos","possibleModifiedBuffer","insert","setValidPosition","trackbackAlternations","originalPos","newPos","vp","targetLocator","tll","ps","equality","validTest","vps","initialLength","fillMissingNonMask","result","caret","generatedInput","maskPos","pndx","testTemplate","testsFromPos","radixPointDefinitionSymbol","radixPoint","handleRemove","DELETE","currentPosValid","seekNext","staticChar","nPos","snPos","lastAlt","altPos","prevAltPos","validPos","altNdxs","decisionPos","validPsClone","isValidRslt","lAltPos","decisionTaker","possibilityPos","prevPos","mndx","validInputs","staticInputsBeforePos","staticInputsBeforePosAlternate","verifyValidInput","possibilities","targetLvp","alternate","postValidation","newBlock","maskL","seekPrevious","writeBuffer","caretPos","triggerInputEvent","onBeforeWrite","inputmask","_valueSet","renderColorMask","skipInputEvent","prevTest","staticAlternations","charAt","checkVal","writeOut","nptvl","initiatingEvent","stickyCaret","inputValue","charCodes","initialNdx","autoUnmask","staticInput","escapeRegex","charCode","keypress","charCodeAt","nextTest","charCodeNdx","bufferTemplateArr","isTemplateMatch","EventHandlers","keypressEvent","forwardPosition","unmaskedvalue","umValue","unmaskedValue","onUnMask","bufferValue","notranslate","translatePosition","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","duplicate","_valueGet","scrollCalc","getComputedStyle","currentStyle","fontSize","scrollLeft","scrollWidth","mobile","firstChild","textNode","createTextNode","setStart","setEnd","collapse","removeAllRanges","addRange","createTextRange","moveEnd","determineLastRequiredPosition","returnDefinition","bl","positions","lvTestAlt","clearOptionalTail","rl","lmib","isComplete","lrp","aml","BACKSPACE","pend","groupSeparator","generalize","initializeColorMask","colorMask","offsetWidth","computedStyle","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","lineHeight","webkitAppearance","mozAppearance","Appearance","backgroundColor","color","clientx","textTransform","letterSpacing","visibility","whiteSpace","itl","inputText","previousWidth","offset1","offset2","findCaretPos","clickEvent","handleStatic","static","undoValue","valueBuffer","skipKeyPressEvent","ignorable","mouseEnter","EventRuler","eventName","eventHandler","imOpts","disabled","readOnly","tabThrough","TAB","iemobile","iphone","returnVal","form","evArr","keydownEvent","BACKSPACE_SAFARI","X","evName","isSupported","isInputEventSupported","END","PAGE_DOWN","HOME","PAGE_UP","undoOnEscape","ESCAPE","altKey","INSERT","onKeyDown","ignorables","checkval","metaKey","ENTER","writeOutBuffer","valResult","onKeyValidation","pasteEvent","tempValue","valueBeforeCaret","substr","valueAfterCaret","pasteValue","onBeforePaste","inputFallBackEvent","inputChar","bufferTemplate","setValueEvent","onBeforeMask","clearMaskOnLostFocus","clearIncomplete","focusEvent","nptValue","showMaskOnFocus","showMaskOnHover","positionCaretOnTab","mouseleaveEvent","tabbed","selectedCaret","positionCaretOnClick","clickPos","radixPos","doRadixFocus","clickPosition","lastPosition","dblclickEvent","cutEvent","clipData","setData","execCommand","blurEvent","mouseenterEvent","submitEvent","removeMaskOnSubmit","resetEvent","elementType","supportsInputType","isContentEditable","npt","nullable","valueGet","setter","valueSet","__valueGet","noValuePatching","getPrototypeOf","valueProperty","textContent","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","__valueSet","overruleRTL","valHooks","inputmaskpatch","valhookGet","valhookSet","$elem","patchValhook","installNativeValueSetFallback","patchValueProperty","isElementTypeSupported","rightAlign","textAlign","android","inputmode","androidHack","oncomplete","onincomplete","oncleared","inputEventOnly","initialValue","maskTarget","mtdt","ua","optionalmarker","escapeChar","pastedValue","validator","definitionSymbol","staticDefinitionSymbol","elems","scopedOpts","importOption","optionData","dataoptions","attrOptions","JSON","parse","importAttributeOptions","noremask","getemptymask","hasMaskedValue","getmetadata","MaskToken","openGroup","insertTestDefinition","mtoken","maskdef","escaped","prevalidators","prevalidator","prevalidatorsL","defaultCase","openenings","currentOpeningToken","alternator","currentToken","openingToken","lastMatch","groupToken","tokenizer","exec","mq","mq0","mq1","verifyGroupMarker","token","nextToken","reverseTokens","intMatch","st","extendDefaults","extendDefinitions","definition","extendAliases","unmask","ALT","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DOWN","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","SHIFT","UP","WINDOWS","nptmask","triggerHandler","regex","val1pre","val2pre","separator","escapedSeparator","leapday","yearrange","minyear","maxyear","isInYearRange","enteredyear","enteredyear2","determinebaseyear","hint","currentyear","maxYearPrefix","maxYearPostfix","maxxYear","currentYearPrefix","currentYearAndHint","getFrontValue","currentResult","dayMonthValue","bufferStr","isLeapYear","pchrs","frontValue","yearPrefix","datetime","hrspre","hrs24","hrs","ampm","mspre","timeseparator","hourFormat","h","datetime12","shamsi","A","url","ip","maskedValue","email","mac","vin","V","numeric","autoEscape","txt","escapedTxt","integerDigits","autoGroup","groupSize","mod","integerOptional","digitsOptional","digits","decimalProtect","dq","suffix","allowPlus","allowMinus","negationSymbol","front","back","unmaskAsNumber","postFormat","charAtPos","cbuf","isNegative","bufVal","bufValOrigin","escapedGroupSeparator","radixSplit","reg","needsRefresh","processValue","floatValue","signedFloatValue","radixPosition","rpb","unshift","integerPart","integerNPart","signHandler","matchRslt","radixHandler","integerValue","leadingZeroHandler","decimalPart","radix","bufClone","vs","kommaMatches","dotMatches","decPart","digitsFactor","pow","positionInput","currency","decimal","integer","percentage","maskSort","maska","maskb","maskas","maskbs","localeCompare","analyseMaskBase","maskGroups","phoneCodes","reduceVariations","masks","previousVariation","previousmaskGroup","variation","maskGroup","rebuild","submasks","abstractphone","countrycode","processedValue","Regex","regexTokens","quantifierFilter","RegexToken","repeaterPart","validateRegexToken","fromGroup","isvalid","regexPart","openGroupCount","matchToken","crrntndx","matchGroup","regexPartBak","qm","testExp","tl","cbuffer","opengroups","quantifierToken","analyseRegex","regexToken","pluginName","effect","theme","keyboardNav","clickOverlayToClose","onInit","beforeShowLightbox","afterShowLightbox","lightbox","beforeHideLightbox","afterHideLightbox","onPrev","onNext","errorMessage","MetaLightbox","_defaults","_name","$html","ajaxLoaded","showLightbox","destructLightbox","currentLink","galleryItems","constructLightbox","processContent","link","video","classTerm","iframe","href","isHidpi","$content","imgwrapper","zoom","contentLoaded","setTitle","ga","frameborder","vspace","hspace","scrolling","clone","ajax","sync","async","dataType","cache","statusCode","404","location","302","error","jqXHR","statusText","success","status","parseJSON","getResponseHeader","localStorage","setItem","URL","history","pushState","page","imagesLoaded","then","titleWrap","overlay","nav","$overlay","replaceState","devicePixelRatio","matchMedia","metaLightbox","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","axis","sideA","sideB","getSize","getWindowSizes","classCallCheck","createClass","defineProperties","_extends","getClientRect","bottom","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","getBoundaries","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","runModifiers","ends","findIndex","cur","isDestroyed","arrowStyles","flipped","positionFixed","isCreated","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","cancelAnimationFrame","isNumeric","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","Defaults","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","requestAnimationFrame","Utils","global","PopperUtils","S2","select2","amd","requirejs","require","define","undef","main","makeMap","defined","waiting","defining","hasOwn","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","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","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","params","_type","invoke","generateChars","chars","func","_convertData","originalKey","dataLevel","hasScroll","escapeMarkup","markup","replaceMap","'","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","render","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","current","selectedIds","showLoading","loading","loadingMore","$loading","prepend","attrs","Element","msMatchesSelector","webkitMatchesSelector","_resultId","role","label","$children","$child","$childrenContainer","$container","removeAttr","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","isAtTop","isAtBottom","evt","CTRL","ESC","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","path","translations","BaseAdapter","query","generateResultId","SelectAdapter","currentData","unselect","addOptions","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","dropdown","tokenData","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","parentOffset","minWidth","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","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","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","resolvedLanguages","baseLanguage","languageData","camelCase","convertedData","Options","fromElement","InputCompat","excludedData","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","open","addedNodes","removedNodes","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","detachEvent","disconnect","thisMethods","instanceOptions","bubbles","cancelable","initCustomEvent","CustomEvent","ignore","header","topOnEmptyHash","speed","clip","easing","customEasing","updateURL","popstate","emitEvents","decodeURIComponent","InvalidCharacterError","offsetTop","anchor","g","E","S","C","O","I","F","L","cancelScroll","outline","H","smoothScroll","stringify","hostname","pathname","animateScroll","Function","webpackContext","webpackContextResolve","ENVS","AJAX","LOADED","MAPLOADED","MAPMARKERCLICK","MAPPOPUPCLOSE","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","W","HoverUI","ui","$parent","$triger","isShown","ready","jsHoverUI","CarouselUI","$indicators","carousel","$youtubeSlides","YT","Player","pauseVideo","Events","SlidingMenu","jsSlidingMenu","SpinnerUI","AjaxUI","G","$Html","$Body","Spinner","MainUI","updateLocation","absoluteLocation","URLDetails","js","regions","replaceRegion","preload","$head","items","itemCallback","Deferred","promise","dfds","dfd","always","when","$region","jsAjaxUI","Title","onpopstate","$existingLink","FormFieldUI","shown","vals","$collapse","_el","restore","wipe","FormBasics","$fields","$selectFields","$radioOptions","siblings","jsFormBasics","SmoothScroll","$AlertNotify","$SiteWideMessage","updateOnlineStatus","onLine","datastatus","reload","loadImages","detectBootstrapScreenSize","getScript","fonts","WebFont","google","families","targetEl","$targetEl","print","envs","Consts","curEnv","env","relative","fadeOut","alert","fadeIn","play","$imgs","$imgUrls","$imgLazyUrls","lazySrc","VideoPreviewUI","$_el","video_id","YouTubeGetID","jsonp","thumbnail_src","thumbnail_large","jsVideoPreviewUI","datepickerOptions","DatetimeUI","defaultDate","jsDatetimeUI","FormValidateField","_actions","validate","extraChecks","checkValidity","isHtml","valideURL","removeError","setError","childNodes","$field","SteppedForm","LANG","_currentStepCounter","_totalStepsCounter","_steps","_stepNext","_stepPrev","_currentStep","_totalSteps","_stepsOrder","$hasError","$modal","targetStep","currentStep","fieldUI","jsSteppedForm","LayoutUI","importAll","STEPCOUNTER","STEPBUTTONS"],"mappings":"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IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,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","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 = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/js/app.js\");\n","/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\t\tthis.isInline = !this.component && this.element.is('div');\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!$.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!$.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n var events = {\n keyup: $.proxy(function(e){\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) { // single input\n this._events = [\n [this.element, events]\n ];\n }\n // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [\n // For components that are not readonly, allow keyboard nav\n [this.inputField, events],\n [this.component, {\n click: $.proxy(this.show, this)\n }]\n ];\n }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis.update();\n\t\t\tthis._trigger('changeDate');\n\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += '<th class=\"cw\">&#160;</th>';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow';\n if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n html += ' disabled';\n html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n }\n\t\t},\n\n\t\tfillMonths: function(){\n var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n cls.push('range-start');\n }\n if (date.valueOf() === this.range[this.range.length-1]){\n cls.push('range-end');\n }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t classes.push('focused');\n }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif ($.isFunction($.uniqueSort)) {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n if (this.viewMode === 0) {\n \t\t\t\t\tif (e.ctrlKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n \t\t\t\t\t} else if (e.shiftKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n \t\t\t\t\t}\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j]){\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k]){\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '&#x00AB;',\n\t\t\trightArrow: '&#x00BB;'\n\t\t},\n showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n return format;\n // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n return format.toDisplay(date, format, language);\n var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t '<tr>'+\n\t\t\t '<th colspan=\"7\" class=\"datepicker-title\"></th>'+\n\t\t\t '</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-decades\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-centuries\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.9.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n","/*!\n * Timepicker Component for Twitter Bootstrap\n *\n * Copyright 2013 Joris de Wit and bootstrap-timepicker contributors\n *\n * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n(function($, window, document) {\n 'use strict';\n\n // TIMEPICKER PUBLIC CLASS DEFINITION\n var Timepicker = function(element, options) {\n this.widget = '';\n this.$element = $(element);\n this.defaultTime = options.defaultTime;\n this.disableFocus = options.disableFocus;\n this.disableMousewheel = options.disableMousewheel;\n this.isOpen = options.isOpen;\n this.minuteStep = options.minuteStep;\n this.modalBackdrop = options.modalBackdrop;\n this.orientation = options.orientation;\n this.secondStep = options.secondStep;\n this.snapToStep = options.snapToStep;\n this.showInputs = options.showInputs;\n this.showMeridian = options.showMeridian;\n this.showSeconds = options.showSeconds;\n this.template = options.template;\n this.appendWidgetTo = options.appendWidgetTo;\n this.showWidgetOnAddonClick = options.showWidgetOnAddonClick;\n this.icons = options.icons;\n this.maxHours = options.maxHours;\n this.explicitMode = options.explicitMode; // If true 123 = 1:23, 12345 = 1:23:45, else invalid.\n\n this.handleDocumentClick = function (e) {\n var self = e.data.scope;\n // This condition was inspired by bootstrap-datepicker.\n // The element the timepicker is invoked on is the input but it has a sibling for addon/button.\n if (!(self.$element.parent().find(e.target).length ||\n self.$widget.is(e.target) ||\n self.$widget.find(e.target).length)) {\n self.hideWidget();\n }\n };\n\n this._init();\n };\n\n Timepicker.prototype = {\n\n constructor: Timepicker,\n _init: function() {\n var self = this;\n\n if (this.showWidgetOnAddonClick && (this.$element.parent().hasClass('input-group') && this.$element.parent().hasClass('bootstrap-timepicker'))) {\n this.$element.parent('.input-group.bootstrap-timepicker').find('.input-group-addon').on({\n 'click.timepicker': $.proxy(this.showWidget, this)\n });\n this.$element.on({\n 'focus.timepicker': $.proxy(this.highlightUnit, this),\n 'click.timepicker': $.proxy(this.highlightUnit, this),\n 'keydown.timepicker': $.proxy(this.elementKeydown, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n } else {\n if (this.template) {\n this.$element.on({\n 'focus.timepicker': $.proxy(this.showWidget, this),\n 'click.timepicker': $.proxy(this.showWidget, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n } else {\n this.$element.on({\n 'focus.timepicker': $.proxy(this.highlightUnit, this),\n 'click.timepicker': $.proxy(this.highlightUnit, this),\n 'keydown.timepicker': $.proxy(this.elementKeydown, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n }\n }\n\n if (this.template !== false) {\n this.$widget = $(this.getTemplate()).on('click', $.proxy(this.widgetClick, this));\n } else {\n this.$widget = false;\n }\n\n if (this.showInputs && this.$widget !== false) {\n this.$widget.find('input').each(function() {\n $(this).on({\n 'click.timepicker': function() { $(this).select(); },\n 'keydown.timepicker': $.proxy(self.widgetKeydown, self),\n 'keyup.timepicker': $.proxy(self.widgetKeyup, self)\n });\n });\n }\n\n this.setDefaultTime(this.defaultTime);\n },\n\n blurElement: function() {\n this.highlightedUnit = null;\n this.updateFromElementVal();\n },\n\n clear: function() {\n this.hour = '';\n this.minute = '';\n this.second = '';\n this.meridian = '';\n\n this.$element.val('');\n },\n\n decrementHour: function() {\n if (this.showMeridian) {\n if (this.hour === 1) {\n this.hour = 12;\n } else if (this.hour === 12) {\n this.hour--;\n\n return this.toggleMeridian();\n } else if (this.hour === 0) {\n this.hour = 11;\n\n return this.toggleMeridian();\n } else {\n this.hour--;\n }\n } else {\n if (this.hour <= 0) {\n this.hour = this.maxHours - 1;\n } else {\n this.hour--;\n }\n }\n },\n\n decrementMinute: function(step) {\n var newVal;\n\n if (step) {\n newVal = this.minute - step;\n } else {\n newVal = this.minute - this.minuteStep;\n }\n\n if (newVal < 0) {\n this.decrementHour();\n this.minute = newVal + 60;\n } else {\n this.minute = newVal;\n }\n },\n\n decrementSecond: function() {\n var newVal = this.second - this.secondStep;\n\n if (newVal < 0) {\n this.decrementMinute(true);\n this.second = newVal + 60;\n } else {\n this.second = newVal;\n }\n },\n\n elementKeydown: function(e) {\n switch (e.which) {\n case 9: //tab\n if (e.shiftKey) {\n if (this.highlightedUnit === 'hour') {\n this.hideWidget();\n break;\n }\n this.highlightPrevUnit();\n } else if ((this.showMeridian && this.highlightedUnit === 'meridian') || (this.showSeconds && this.highlightedUnit === 'second') || (!this.showMeridian && !this.showSeconds && this.highlightedUnit ==='minute')) {\n this.hideWidget();\n break;\n } else {\n this.highlightNextUnit();\n }\n e.preventDefault();\n this.updateFromElementVal();\n break;\n case 27: // escape\n this.updateFromElementVal();\n break;\n case 37: // left arrow\n e.preventDefault();\n this.highlightPrevUnit();\n this.updateFromElementVal();\n break;\n case 38: // up arrow\n e.preventDefault();\n switch (this.highlightedUnit) {\n case 'hour':\n this.incrementHour();\n this.highlightHour();\n break;\n case 'minute':\n this.incrementMinute();\n this.highlightMinute();\n break;\n case 'second':\n this.incrementSecond();\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n }\n this.update();\n break;\n case 39: // right arrow\n e.preventDefault();\n this.highlightNextUnit();\n this.updateFromElementVal();\n break;\n case 40: // down arrow\n e.preventDefault();\n switch (this.highlightedUnit) {\n case 'hour':\n this.decrementHour();\n this.highlightHour();\n break;\n case 'minute':\n this.decrementMinute();\n this.highlightMinute();\n break;\n case 'second':\n this.decrementSecond();\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n }\n\n this.update();\n break;\n }\n },\n\n getCursorPosition: function() {\n var input = this.$element.get(0);\n\n if ('selectionStart' in input) {// Standard-compliant browsers\n\n return input.selectionStart;\n } else if (document.selection) {// IE fix\n input.focus();\n var sel = document.selection.createRange(),\n selLen = document.selection.createRange().text.length;\n\n sel.moveStart('character', - input.value.length);\n\n return sel.text.length - selLen;\n }\n },\n\n getTemplate: function() {\n var template,\n hourTemplate,\n minuteTemplate,\n secondTemplate,\n meridianTemplate,\n templateContent;\n\n if (this.showInputs) {\n hourTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-hour\" maxlength=\"2\"/>';\n minuteTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-minute\" maxlength=\"2\"/>';\n secondTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-second\" maxlength=\"2\"/>';\n meridianTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-meridian\" maxlength=\"2\"/>';\n } else {\n hourTemplate = '<span class=\"bootstrap-timepicker-hour\"></span>';\n minuteTemplate = '<span class=\"bootstrap-timepicker-minute\"></span>';\n secondTemplate = '<span class=\"bootstrap-timepicker-second\"></span>';\n meridianTemplate = '<span class=\"bootstrap-timepicker-meridian\"></span>';\n }\n\n templateContent = '<table>'+\n '<tr>'+\n '<td><a href=\"#\" data-action=\"incrementHour\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"incrementMinute\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n (this.showSeconds ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"incrementSecond\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td class=\"meridian-column\"><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n : '') +\n '</tr>'+\n '<tr>'+\n '<td>'+ hourTemplate +'</td> '+\n '<td class=\"separator\">:</td>'+\n '<td>'+ minuteTemplate +'</td> '+\n (this.showSeconds ?\n '<td class=\"separator\">:</td>'+\n '<td>'+ secondTemplate +'</td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td>'+ meridianTemplate +'</td>'\n : '') +\n '</tr>'+\n '<tr>'+\n '<td><a href=\"#\" data-action=\"decrementHour\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n '<td class=\"separator\"></td>'+\n '<td><a href=\"#\" data-action=\"decrementMinute\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n (this.showSeconds ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"decrementSecond\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n : '') +\n '</tr>'+\n '</table>';\n\n switch(this.template) {\n case 'modal':\n template = '<div class=\"bootstrap-timepicker-widget modal hide fade in\" data-backdrop=\"'+ (this.modalBackdrop ? 'true' : 'false') +'\">'+\n '<div class=\"modal-header\">'+\n '<a href=\"#\" class=\"close\" data-dismiss=\"modal\">&times;</a>'+\n '<h3>Pick a Time</h3>'+\n '</div>'+\n '<div class=\"modal-content\">'+\n templateContent +\n '</div>'+\n '<div class=\"modal-footer\">'+\n '<a href=\"#\" class=\"btn btn-primary\" data-dismiss=\"modal\">OK</a>'+\n '</div>'+\n '</div>';\n break;\n case 'dropdown':\n template = '<div class=\"bootstrap-timepicker-widget dropdown-menu\">'+ templateContent +'</div>';\n break;\n }\n\n return template;\n },\n\n getTime: function() {\n if (this.hour === '') {\n return '';\n }\n\n return this.hour + ':' + (this.minute.toString().length === 1 ? '0' + this.minute : this.minute) + (this.showSeconds ? ':' + (this.second.toString().length === 1 ? '0' + this.second : this.second) : '') + (this.showMeridian ? ' ' + this.meridian : '');\n },\n\n hideWidget: function() {\n if (this.isOpen === false) {\n return;\n }\n\n this.$element.trigger({\n 'type': 'hide.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n\n if (this.template === 'modal' && this.$widget.modal) {\n this.$widget.modal('hide');\n } else {\n this.$widget.removeClass('open');\n }\n\n $(document).off('mousedown.timepicker, touchend.timepicker', this.handleDocumentClick);\n\n this.isOpen = false;\n // show/hide approach taken by datepicker\n this.$widget.detach();\n },\n\n highlightUnit: function() {\n this.position = this.getCursorPosition();\n if (this.position >= 0 && this.position <= 2) {\n this.highlightHour();\n } else if (this.position >= 3 && this.position <= 5) {\n this.highlightMinute();\n } else if (this.position >= 6 && this.position <= 8) {\n if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMeridian();\n }\n } else if (this.position >= 9 && this.position <= 11) {\n this.highlightMeridian();\n }\n },\n\n highlightNextUnit: function() {\n switch (this.highlightedUnit) {\n case 'hour':\n this.highlightMinute();\n break;\n case 'minute':\n if (this.showSeconds) {\n this.highlightSecond();\n } else if (this.showMeridian){\n this.highlightMeridian();\n } else {\n this.highlightHour();\n }\n break;\n case 'second':\n if (this.showMeridian) {\n this.highlightMeridian();\n } else {\n this.highlightHour();\n }\n break;\n case 'meridian':\n this.highlightHour();\n break;\n }\n },\n\n highlightPrevUnit: function() {\n switch (this.highlightedUnit) {\n case 'hour':\n if(this.showMeridian){\n this.highlightMeridian();\n } else if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMinute();\n }\n break;\n case 'minute':\n this.highlightHour();\n break;\n case 'second':\n this.highlightMinute();\n break;\n case 'meridian':\n if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMinute();\n }\n break;\n }\n },\n\n highlightHour: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'hour';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(0,1);\n } else {\n $element.setSelectionRange(0,2);\n }\n }, 0);\n }\n },\n\n highlightMinute: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'minute';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(2,4);\n } else {\n $element.setSelectionRange(3,5);\n }\n }, 0);\n }\n },\n\n highlightSecond: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'second';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(5,7);\n } else {\n $element.setSelectionRange(6,8);\n }\n }, 0);\n }\n },\n\n highlightMeridian: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'meridian';\n\n if ($element.setSelectionRange) {\n if (this.showSeconds) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(8,10);\n } else {\n $element.setSelectionRange(9,11);\n }\n }, 0);\n } else {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(5,7);\n } else {\n $element.setSelectionRange(6,8);\n }\n }, 0);\n }\n }\n },\n\n incrementHour: function() {\n if (this.showMeridian) {\n if (this.hour === 11) {\n this.hour++;\n return this.toggleMeridian();\n } else if (this.hour === 12) {\n this.hour = 0;\n }\n }\n if (this.hour === this.maxHours - 1) {\n this.hour = 0;\n\n return;\n }\n this.hour++;\n },\n\n incrementMinute: function(step) {\n var newVal;\n\n if (step) {\n newVal = this.minute + step;\n } else {\n newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep);\n }\n\n if (newVal > 59) {\n this.incrementHour();\n this.minute = newVal - 60;\n } else {\n this.minute = newVal;\n }\n },\n\n incrementSecond: function() {\n var newVal = this.second + this.secondStep - (this.second % this.secondStep);\n\n if (newVal > 59) {\n this.incrementMinute(true);\n this.second = newVal - 60;\n } else {\n this.second = newVal;\n }\n },\n\n mousewheel: function(e) {\n if (this.disableMousewheel) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail,\n scrollTo = null;\n\n if (e.type === 'mousewheel') {\n scrollTo = (e.originalEvent.wheelDelta * -1);\n }\n else if (e.type === 'DOMMouseScroll') {\n scrollTo = 40 * e.originalEvent.detail;\n }\n\n if (scrollTo) {\n e.preventDefault();\n $(this).scrollTop(scrollTo + $(this).scrollTop());\n }\n\n switch (this.highlightedUnit) {\n case 'minute':\n if (delta > 0) {\n this.incrementMinute();\n } else {\n this.decrementMinute();\n }\n this.highlightMinute();\n break;\n case 'second':\n if (delta > 0) {\n this.incrementSecond();\n } else {\n this.decrementSecond();\n }\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n default:\n if (delta > 0) {\n this.incrementHour();\n } else {\n this.decrementHour();\n }\n this.highlightHour();\n break;\n }\n\n return false;\n },\n\n /**\n * Given a segment value like 43, will round and snap the segment\n * to the nearest \"step\", like 45 if step is 15. Segment will\n * \"overflow\" to 0 if it's larger than 59 or would otherwise\n * round up to 60.\n */\n changeToNearestStep: function (segment, step) {\n if (segment % step === 0) {\n return segment;\n }\n if (Math.round((segment % step) / step)) {\n return (segment + (step - segment % step)) % 60;\n } else {\n return segment - segment % step;\n }\n },\n\n // This method was adapted from bootstrap-datepicker.\n place : function() {\n if (this.isInline) {\n return;\n }\n var widgetWidth = this.$widget.outerWidth(), widgetHeight = this.$widget.outerHeight(), visualPadding = 10, windowWidth =\n $(window).width(), windowHeight = $(window).height(), scrollTop = $(window).scrollTop();\n\n var zIndex = parseInt(this.$element.parents().filter(function() { return $(this).css('z-index') !== 'auto'; }).first().css('z-index'), 10) + 10;\n var offset = this.component ? this.component.parent().offset() : this.$element.offset();\n var height = this.component ? this.component.outerHeight(true) : this.$element.outerHeight(false);\n var width = this.component ? this.component.outerWidth(true) : this.$element.outerWidth(false);\n var left = offset.left, top = offset.top;\n\n this.$widget.removeClass('timepicker-orient-top timepicker-orient-bottom timepicker-orient-right timepicker-orient-left');\n\n if (this.orientation.x !== 'auto') {\n this.$widget.addClass('timepicker-orient-' + this.orientation.x);\n if (this.orientation.x === 'right') {\n left -= widgetWidth - width;\n }\n } else{\n // auto x orientation is best-placement: if it crosses a window edge, fudge it sideways\n // Default to left\n this.$widget.addClass('timepicker-orient-left');\n if (offset.left < 0) {\n left -= offset.left - visualPadding;\n } else if (offset.left + widgetWidth > windowWidth) {\n left = windowWidth - widgetWidth - visualPadding;\n }\n }\n // auto y orientation is best-situation: top or bottom, no fudging, decision based on which shows more of the widget\n var yorient = this.orientation.y, topOverflow, bottomOverflow;\n if (yorient === 'auto') {\n topOverflow = -scrollTop + offset.top - widgetHeight;\n bottomOverflow = scrollTop + windowHeight - (offset.top + height + widgetHeight);\n if (Math.max(topOverflow, bottomOverflow) === bottomOverflow) {\n yorient = 'top';\n } else {\n yorient = 'bottom';\n }\n }\n this.$widget.addClass('timepicker-orient-' + yorient);\n if (yorient === 'top'){\n top += height;\n } else{\n top -= widgetHeight + parseInt(this.$widget.css('padding-top'), 10);\n }\n\n this.$widget.css({\n top : top,\n left : left,\n zIndex : zIndex\n });\n },\n\n remove: function() {\n $('document').off('.timepicker');\n if (this.$widget) {\n this.$widget.remove();\n }\n delete this.$element.data().timepicker;\n },\n\n setDefaultTime: function(defaultTime) {\n if (!this.$element.val()) {\n if (defaultTime === 'current') {\n var dTime = new Date(),\n hours = dTime.getHours(),\n minutes = dTime.getMinutes(),\n seconds = dTime.getSeconds(),\n meridian = 'AM';\n\n if (seconds !== 0) {\n seconds = Math.ceil(dTime.getSeconds() / this.secondStep) * this.secondStep;\n if (seconds === 60) {\n minutes += 1;\n seconds = 0;\n }\n }\n\n if (minutes !== 0) {\n minutes = Math.ceil(dTime.getMinutes() / this.minuteStep) * this.minuteStep;\n if (minutes === 60) {\n hours += 1;\n minutes = 0;\n }\n }\n\n if (this.showMeridian) {\n if (hours === 0) {\n hours = 12;\n } else if (hours >= 12) {\n if (hours > 12) {\n hours = hours - 12;\n }\n meridian = 'PM';\n } else {\n meridian = 'AM';\n }\n }\n\n this.hour = hours;\n this.minute = minutes;\n this.second = seconds;\n this.meridian = meridian;\n\n this.update();\n\n } else if (defaultTime === false) {\n this.hour = 0;\n this.minute = 0;\n this.second = 0;\n this.meridian = 'AM';\n } else {\n this.setTime(defaultTime);\n }\n } else {\n this.updateFromElementVal();\n }\n },\n\n setTime: function(time, ignoreWidget) {\n if (!time) {\n this.clear();\n return;\n }\n\n var timeMode,\n timeArray,\n hour,\n minute,\n second,\n meridian;\n\n if (typeof time === 'object' && time.getMonth){\n // this is a date object\n hour = time.getHours();\n minute = time.getMinutes();\n second = time.getSeconds();\n\n if (this.showMeridian){\n meridian = 'AM';\n if (hour > 12){\n meridian = 'PM';\n hour = hour % 12;\n }\n\n if (hour === 12){\n meridian = 'PM';\n }\n }\n } else {\n timeMode = ((/a/i).test(time) ? 1 : 0) + ((/p/i).test(time) ? 2 : 0); // 0 = none, 1 = AM, 2 = PM, 3 = BOTH.\n if (timeMode > 2) { // If both are present, fail.\n this.clear();\n return;\n }\n\n timeArray = time.replace(/[^0-9\\:]/g, '').split(':');\n\n hour = timeArray[0] ? timeArray[0].toString() : timeArray.toString();\n\n if(this.explicitMode && hour.length > 2 && (hour.length % 2) !== 0 ) {\n this.clear();\n return;\n }\n\n minute = timeArray[1] ? timeArray[1].toString() : '';\n second = timeArray[2] ? timeArray[2].toString() : '';\n\n // adaptive time parsing\n if (hour.length > 4) {\n second = hour.slice(-2);\n hour = hour.slice(0, -2);\n }\n\n if (hour.length > 2) {\n minute = hour.slice(-2);\n hour = hour.slice(0, -2);\n }\n\n if (minute.length > 2) {\n second = minute.slice(-2);\n minute = minute.slice(0, -2);\n }\n\n hour = parseInt(hour, 10);\n minute = parseInt(minute, 10);\n second = parseInt(second, 10);\n\n if (isNaN(hour)) {\n hour = 0;\n }\n if (isNaN(minute)) {\n minute = 0;\n }\n if (isNaN(second)) {\n second = 0;\n }\n\n // Adjust the time based upon unit boundary.\n // NOTE: Negatives will never occur due to time.replace() above.\n if (second > 59) {\n second = 59;\n }\n\n if (minute > 59) {\n minute = 59;\n }\n\n if (hour >= this.maxHours) {\n // No day/date handling.\n hour = this.maxHours - 1;\n }\n\n if (this.showMeridian) {\n if (hour > 12) {\n // Force PM.\n timeMode = 2;\n hour -= 12;\n }\n if (!timeMode) {\n timeMode = 1;\n }\n if (hour === 0) {\n hour = 12; // AM or PM, reset to 12. 0 AM = 12 AM. 0 PM = 12 PM, etc.\n }\n meridian = timeMode === 1 ? 'AM' : 'PM';\n } else if (hour < 12 && timeMode === 2) {\n hour += 12;\n } else {\n if (hour >= this.maxHours) {\n hour = this.maxHours - 1;\n } else if ((hour < 0) || (hour === 12 && timeMode === 1)){\n hour = 0;\n }\n }\n }\n\n this.hour = hour;\n if (this.snapToStep) {\n this.minute = this.changeToNearestStep(minute, this.minuteStep);\n this.second = this.changeToNearestStep(second, this.secondStep);\n } else {\n this.minute = minute;\n this.second = second;\n }\n this.meridian = meridian;\n\n this.update(ignoreWidget);\n },\n\n showWidget: function() {\n if (this.isOpen) {\n return;\n }\n\n if (this.$element.is(':disabled')) {\n return;\n }\n\n // show/hide approach taken by datepicker\n this.$widget.appendTo(this.appendWidgetTo);\n $(document).on('mousedown.timepicker, touchend.timepicker', {scope: this}, this.handleDocumentClick);\n\n this.$element.trigger({\n 'type': 'show.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n\n this.place();\n if (this.disableFocus) {\n this.$element.blur();\n }\n\n // widget shouldn't be empty on open\n if (this.hour === '') {\n if (this.defaultTime) {\n this.setDefaultTime(this.defaultTime);\n } else {\n this.setTime('0:0:0');\n }\n }\n\n if (this.template === 'modal' && this.$widget.modal) {\n this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this));\n } else {\n if (this.isOpen === false) {\n this.$widget.addClass('open');\n }\n }\n\n this.isOpen = true;\n },\n\n toggleMeridian: function() {\n this.meridian = this.meridian === 'AM' ? 'PM' : 'AM';\n },\n\n update: function(ignoreWidget) {\n this.updateElement();\n if (!ignoreWidget) {\n this.updateWidget();\n }\n\n this.$element.trigger({\n 'type': 'changeTime.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n },\n\n updateElement: function() {\n this.$element.val(this.getTime()).change();\n },\n\n updateFromElementVal: function() {\n this.setTime(this.$element.val());\n },\n\n updateWidget: function() {\n if (this.$widget === false) {\n return;\n }\n\n var hour = this.hour,\n minute = this.minute.toString().length === 1 ? '0' + this.minute : this.minute,\n second = this.second.toString().length === 1 ? '0' + this.second : this.second;\n\n if (this.showInputs) {\n this.$widget.find('input.bootstrap-timepicker-hour').val(hour);\n this.$widget.find('input.bootstrap-timepicker-minute').val(minute);\n\n if (this.showSeconds) {\n this.$widget.find('input.bootstrap-timepicker-second').val(second);\n }\n if (this.showMeridian) {\n this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian);\n }\n } else {\n this.$widget.find('span.bootstrap-timepicker-hour').text(hour);\n this.$widget.find('span.bootstrap-timepicker-minute').text(minute);\n\n if (this.showSeconds) {\n this.$widget.find('span.bootstrap-timepicker-second').text(second);\n }\n if (this.showMeridian) {\n this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian);\n }\n }\n },\n\n updateFromWidgetInputs: function() {\n if (this.$widget === false) {\n return;\n }\n\n var t = this.$widget.find('input.bootstrap-timepicker-hour').val() + ':' +\n this.$widget.find('input.bootstrap-timepicker-minute').val() +\n (this.showSeconds ? ':' + this.$widget.find('input.bootstrap-timepicker-second').val() : '') +\n (this.showMeridian ? this.$widget.find('input.bootstrap-timepicker-meridian').val() : '')\n ;\n\n this.setTime(t, true);\n },\n\n widgetClick: function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n var $input = $(e.target),\n action = $input.closest('a').data('action');\n\n if (action) {\n this[action]();\n }\n this.update();\n\n if ($input.is('input')) {\n $input.get(0).setSelectionRange(0,2);\n }\n },\n\n widgetKeydown: function(e) {\n var $input = $(e.target),\n name = $input.attr('class').replace('bootstrap-timepicker-', '');\n\n switch (e.which) {\n case 9: //tab\n if (e.shiftKey) {\n if (name === 'hour') {\n return this.hideWidget();\n }\n } else if ((this.showMeridian && name === 'meridian') || (this.showSeconds && name === 'second') || (!this.showMeridian && !this.showSeconds && name === 'minute')) {\n return this.hideWidget();\n }\n break;\n case 27: // escape\n this.hideWidget();\n break;\n case 38: // up arrow\n e.preventDefault();\n switch (name) {\n case 'hour':\n this.incrementHour();\n break;\n case 'minute':\n this.incrementMinute();\n break;\n case 'second':\n this.incrementSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n break;\n }\n this.setTime(this.getTime());\n $input.get(0).setSelectionRange(0,2);\n break;\n case 40: // down arrow\n e.preventDefault();\n switch (name) {\n case 'hour':\n this.decrementHour();\n break;\n case 'minute':\n this.decrementMinute();\n break;\n case 'second':\n this.decrementSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n break;\n }\n this.setTime(this.getTime());\n $input.get(0).setSelectionRange(0,2);\n break;\n }\n },\n\n widgetKeyup: function(e) {\n if ((e.which === 65) || (e.which === 77) || (e.which === 80) || (e.which === 46) || (e.which === 8) || (e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105)) {\n this.updateFromWidgetInputs();\n }\n }\n };\n\n //TIMEPICKER PLUGIN DEFINITION\n $.fn.timepicker = function(option) {\n var args = Array.apply(null, arguments);\n args.shift();\n return this.each(function() {\n var $this = $(this),\n data = $this.data('timepicker'),\n options = typeof option === 'object' && option;\n\n if (!data) {\n $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data()))));\n }\n\n if (typeof option === 'string') {\n data[option].apply(data, args);\n }\n });\n };\n\n $.fn.timepicker.defaults = {\n defaultTime: 'current',\n disableFocus: false,\n disableMousewheel: false,\n isOpen: false,\n minuteStep: 15,\n modalBackdrop: false,\n orientation: { x: 'auto', y: 'auto'},\n secondStep: 15,\n snapToStep: false,\n showSeconds: false,\n showInputs: true,\n showMeridian: true,\n template: 'dropdown',\n appendWidgetTo: 'body',\n showWidgetOnAddonClick: true,\n icons: {\n up: 'glyphicon glyphicon-chevron-up',\n down: 'glyphicon glyphicon-chevron-down'\n },\n maxHours: 24,\n explicitMode: false\n };\n\n $.fn.timepicker.Constructor = Timepicker;\n\n $(document).on(\n 'focus.timepicker.data-api click.timepicker.data-api',\n '[data-provide=\"timepicker\"]',\n function(e){\n var $this = $(this);\n if ($this.data('timepicker')) {\n return;\n }\n e.preventDefault();\n // component click requires us to explicitly show it\n $this.timepicker();\n }\n );\n\n})(jQuery, window, document);\n","/*!\n * Bootstrap alert.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Alert = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n\n}));\n//# sourceMappingURL=alert.js.map\n","/*!\n * Bootstrap button.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Button = factory(global.jQuery));\n}(this, function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'button';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\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 _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector.BUTTON)[0];\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface;\n $.fn[NAME].Constructor = Button;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n\n}));\n//# sourceMappingURL=button.js.map\n","/*!\n * Bootstrap carousel.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Carousel = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'carousel';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHSTART: \"touchstart\" + EVENT_KEY,\n TOUCHMOVE: \"touchmove\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n POINTERDOWN: \"pointerdown\" + EVENT_KEY,\n POINTERUP: \"pointerup\" + EVENT_KEY,\n DRAG_START: \"dragstart\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item',\n POINTER_EVENT: 'pointer-event'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n ITEM_IMG: '.carousel-item img',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY);\n $.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName.POINTER_EVENT);\n } else {\n $(this._element).on(Event.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event.TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));\n $(indicators).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE);\n $(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface;\n $.fn[NAME].Constructor = Carousel;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n\n}));\n//# sourceMappingURL=carousel.js.map\n","/*!\n * Bootstrap collapse.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Collapse = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'collapse';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(ClassName.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\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\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 var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n\n}));\n//# sourceMappingURL=collapse.js.map\n","/*!\n * Bootstrap modal.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Modal = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'modal';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLABLE: 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n MODAL_BODY: '.modal-body',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $.Event(Event.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event.FOCUSIN);\n $(this._element).removeClass(ClassName.SHOW);\n $(this._element).off(Event.CLICK_DISMISS);\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $(htmlElement).off(EVENT_KEY);\n });\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n\n $(document).off(Event.FOCUSIN);\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});\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\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface;\n $.fn[NAME].Constructor = Modal;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n\n}));\n//# sourceMappingURL=modal.js.map\n","/*!\n * Bootstrap popover.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :\n (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));\n}(this, function ($, Tooltip) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'popover';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var 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 * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n\n}));\n//# sourceMappingURL=popover.js.map\n","/*!\n * Bootstrap scrollspy.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'scrollspy';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n return node.classList.contains(ClassName.ACTIVE);\n }).forEach(function (node) {\n return node.classList.remove(ClassName.ACTIVE);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _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\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface;\n $.fn[NAME].Constructor = ScrollSpy;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n\n}));\n//# sourceMappingURL=scrollspy.js.map\n","/*!\n * Bootstrap tab.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Tab = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tab';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var 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() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n\n if (element.classList.contains(ClassName.FADE)) {\n element.classList.add(ClassName.SHOW);\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));\n $(dropdownToggleList).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\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\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface;\n $.fn[NAME].Constructor = Tab;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n\n}));\n//# sourceMappingURL=tab.js.map\n","/*!\n * Bootstrap tooltip.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :\n (global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));\n}(this, function ($, Popper, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n };\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = allowedAttributeList.filter(function (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i, len);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tooltip';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType = {\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 };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var 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 var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\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: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getOffset = function _getOffset() {\n var _this3 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this4 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n return _this4.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n return _this4._enter(event);\n }).on(eventOut, _this4.config.selector, function (event) {\n return _this4._leave(event);\n });\n }\n });\n $(this.element).closest('.modal').on('hide.bs.modal', function () {\n if (_this4.element) {\n _this4.hide();\n }\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $(this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n\n}));\n//# sourceMappingURL=tooltip.js.map\n","/*!\n * Bootstrap util.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Util = factory(global.jQuery));\n}(this, function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var transitionDelay = $(element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n }\n };\n setTransitionEndSupport();\n\n return Util;\n\n}));\n//# sourceMappingURL=util.js.map\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)$\";","/*! 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","/*!\n* jquery.inputmask.bundle.js\n* https://github.com/RobinHerbots/jquery.inputmask\n* Copyright (c) 2010 - 2016 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 3.3.4\n*/\n!function($) {\n function Inputmask(alias, options) {\n return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, \n options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), \n this.maskset = void 0, this.noMasksCache = options && void 0 !== options.definitions, \n this.userOptions = options || {}, this.events = {}, this.dataAttribute = \"data-inputmask\", \n this.isRTL = this.opts.numericInput, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);\n }\n function resolveAlias(aliasStr, options, opts) {\n var aliasDefinition = opts.aliases[aliasStr];\n return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), \n $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), \n !1);\n }\n function generateMaskSet(opts, nocache) {\n function generateMask(mask, metadata, opts) {\n if (null !== mask && \"\" !== mask) {\n if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = \"\"), \n opts.repeat > 0 || \"*\" === opts.repeat || \"+\" === opts.repeat) {\n var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\n mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + \",\" + opts.repeat + opts.quantifiermarker.end;\n }\n var masksetDefinition;\n return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {\n mask: mask,\n maskToken: Inputmask.prototype.analyseMask(mask, opts),\n validPositions: {},\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n metadata: metadata,\n maskLength: void 0\n }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask] = masksetDefinition, \n masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]), \n masksetDefinition;\n }\n }\n var ms;\n if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\n if (opts.mask.length > 1) {\n opts.keepStatic = null === opts.keepStatic || opts.keepStatic;\n var altMask = opts.groupmarker.start;\n return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\n altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), \n altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask;\n }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);\n }\n opts.mask = opts.mask.pop();\n }\n return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), \n ms;\n }\n function maskScope(actionObj, maskset, opts) {\n function getMaskTemplate(baseOnInput, minimalPos, includeMode) {\n minimalPos = minimalPos || 0;\n var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();\n maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0);\n do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), \n pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || minimalPos > pos);\n return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, \n maskTemplate;\n }\n function getMaskSet() {\n return maskset;\n }\n function resetMaskSet(soft) {\n var maskset = getMaskSet();\n maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, \n maskset.p = 0);\n }\n function getLastValidPosition(closestTo, strict, validPositions) {\n var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;\n void 0 === closestTo && (closestTo = -1);\n for (var posNdx in valids) {\n var psNdx = parseInt(posNdx);\n valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (psNdx <= closestTo && (before = psNdx), \n psNdx >= closestTo && (after = psNdx));\n }\n return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after;\n }\n function stripValidPositions(start, end, nocheck, strict) {\n function IsEnclosedStatic(pos) {\n var posMatch = getMaskSet().validPositions[pos];\n if (void 0 !== posMatch && null === posMatch.match.fn) {\n var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];\n return void 0 !== prevMatch && void 0 !== nextMatch;\n }\n return !1;\n }\n var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;\n for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]);\n for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {\n for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;\n if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else {\n var t = getTestTemplate(i);\n needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), \n getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], \n i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], \n i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;\n }\n }\n resetMaskSet(!0);\n }\n function determineTestTemplate(tests, guessNextBest) {\n for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(\",\") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], \n !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;\n return testPos;\n }\n function getTestTemplate(pos, ndxIntlzr, tstPs) {\n return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\n }\n function getTest(pos) {\n return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];\n }\n function positionCanMatchDefinition(pos, def) {\n for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {\n valid = !0;\n break;\n }\n return valid;\n }\n function getTests(pos, ndxIntlzr, tstPs) {\n function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\n function handleMatch(match, loopNdx, quantifierRecurse) {\n function isFirstMatch(latestMatch, tokenGroup) {\n var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\n return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\n if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;\n }), firstMatch;\n }\n function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\n var bestMatch, indexPos;\n return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {\n var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\n (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, \n indexPos = ndxPos);\n }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\n }\n function staticCanMatchDefinition(source, target) {\n return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);\n }\n if (testPos > 1e4) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + getMaskSet().mask;\n if (testPos === pos && void 0 === match.matches) return matches.push({\n match: match,\n locator: loopNdx.reverse(),\n cd: cacheDependency\n }), !0;\n if (void 0 !== match.matches) {\n if (match.isGroup && quantifierRecurse !== match) {\n if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;\n } else if (match.isOptional) {\n var optionalToken = match;\n if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {\n if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;\n insertStop = !0, testPos = pos;\n }\n } else if (match.isAlternator) {\n var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\n if (altIndex === -1 || \"string\" == typeof altIndex) {\n var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];\n if (\"string\" == typeof altIndex) altIndexArr = altIndex.split(\",\"); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);\n for (var ndx = 0; ndx < altIndexArr.length; ndx++) {\n if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), \n match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, \n match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {\n var ntndx = $.inArray(match, maskToken.matches) + 1;\n maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), \n match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {\n lmnt.alternation = loopNdx.length - 1;\n })));\n }\n maltMatches = matches.slice(), testPos = currentPos, matches = [];\n for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\n var altMatch = maltMatches[ndx1], hasMatch = !1;\n altMatch.alternation = altMatch.alternation || loopNdxCnt;\n for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\n var altMatch2 = malternateMatches[ndx2];\n if ((\"string\" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) {\n hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + \",\" + altMatch.locator[altMatch.alternation], \n altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), \n altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + \",\" + altMatch.locator[altMatch.alternation])));\n break;\n }\n }\n hasMatch || malternateMatches.push(altMatch);\n }\n }\n \"string\" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {\n if (isFinite(ndx)) {\n var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(\",\");\n lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;\n for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, \n mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += \",\", \n lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), \n lmnt.alternation = alternation);\n if (void 0 !== lmnt.locator[alternation]) return lmnt;\n }\n })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, \n ndxInitializer = ndxInitializerClone.slice();\n } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);\n if (match) return !0;\n } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\n var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\n if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {\n if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, \n isFirstMatch(latestMatch, tokenGroup)) {\n if (qndx > qt.quantifier.min - 1) {\n insertStop = !0, testPos = pos;\n break;\n }\n return !0;\n }\n return !0;\n }\n } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;\n } else testPos++;\n }\n for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {\n var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);\n if (match && testPos === pos) return match;\n if (testPos > pos) break;\n }\n }\n function mergeLocators(tests) {\n var locator = [];\n return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), \n 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\n if (\"\" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += \",\" + tst.locator[i]);\n })), locator;\n }\n function filterTests(tests) {\n return opts.keepStatic && pos > 0 && tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests;\n }\n var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n if (pos > -1) {\n if (void 0 === ndxIntlzr) {\n for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;\n void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(\"\"), \n testPos = previousPos);\n }\n if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);\n for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\n var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);\n if (match && testPos === pos || testPos > pos) break;\n }\n }\n return (0 === matches.length || insertStop) && matches.push({\n match: {\n fn: null,\n cardinality: 0,\n optionality: !0,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n cd: cacheDependency\n }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), \n filterTests(getMaskSet().tests[pos]));\n }\n function getBufferTemplate() {\n return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), \n void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer;\n }\n function getBuffer(noCache) {\n return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), \n getMaskSet().buffer;\n }\n function refreshFromBuffer(start, end, buffer) {\n var i;\n if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];\n for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);\n }\n function casing(elem, test, pos) {\n switch (opts.casing || test.casing) {\n case \"upper\":\n elem = elem.toUpperCase();\n break;\n\n case \"lower\":\n elem = elem.toLowerCase();\n break;\n\n case \"title\":\n var posBefore = getMaskSet().validPositions[pos - 1];\n elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\n }\n return elem;\n }\n function checkAlternationMatch(altArr1, altArr2) {\n for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) {\n isMatch = !0;\n break;\n }\n return isMatch;\n }\n function isValid(pos, c, strict, fromSetValid, fromAlternate) {\n function isSelection(posObj) {\n var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;\n return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? \"full\" : selection;\n }\n function _isValid(position, c, strict) {\n var rslt = !1;\n return $.each(getTests(position), function(ndx, tst) {\n for (var test = tst.match, loopend = c ? 1 : 0, chrs = \"\", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));\n if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\n c: test.placeholder || test.def,\n pos: position\n }, rslt !== !1) {\n var elem = void 0 !== rslt.c ? rslt.c : c;\n elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;\n var validatedPos = position, possibleModifiedBuffer = getBuffer();\n if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), \n $.each(rslt.remove.sort(function(a, b) {\n return b - a;\n }), function(ndx, lmnt) {\n stripValidPositions(lmnt, lmnt + 1, !0);\n })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), \n $.each(rslt.insert.sort(function(a, b) {\n return a - b;\n }), function(ndx, lmnt) {\n isValid(lmnt.pos, lmnt.c, !0, fromSetValid);\n })), rslt.refreshFromBuffer) {\n var refresh = rslt.refreshFromBuffer;\n if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), \n void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), \n !1;\n if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), \n !1;\n } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, \n refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), \n !1;\n return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), \n setValidPosition(validatedPos, $.extend({}, tst, {\n input: casing(elem, test, validatedPos)\n }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);\n }\n }), rslt;\n }\n function alternate(pos, c, strict) {\n var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();\n for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], \n altPos && void 0 !== altPos.alternation) {\n if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, \n prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n if (void 0 !== alternation) {\n decisionPos = parseInt(lastAlt);\n var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];\n decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(\",\")[0]);\n var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];\n $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) {\n altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(\",\") : [];\n for (var mndx = 0; mndx < altNdxs.length; mndx++) {\n var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;\n if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(\",\")) === -1)) {\n getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);\n var possibilities = getMaskSet().validPositions[decisionPos].locator;\n for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), \n null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, \n possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), \n staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), \n getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, \n i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], \n validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, \n delete getMaskSet().validPositions[i];\n for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), \n resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {\n var input = validInputs.shift();\n if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break;\n }\n if (isValidRslt) {\n getMaskSet().validPositions[decisionPos].locator = possibilities;\n var targetLvp = getLastValidPosition(pos) + 1;\n for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], \n (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;\n pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);\n }\n if (isValidRslt) return !1;\n resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);\n }\n }\n });\n }\n return isValidRslt;\n }\n function trackbackAlternations(originalPos, newPos) {\n var vp = getMaskSet().validPositions[newPos];\n if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {\n var tests = getTests(ps), bestMatch = tests[0], equality = -1;\n $.each(tests, function(ndx, tst) {\n for (var i = 0; i < tll && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(\",\"), targetLocator[i].toString().split(\",\"))); i++) equality < i && (equality = i, \n bestMatch = tst);\n }), setValidPosition(ps, $.extend({}, bestMatch, {\n input: bestMatch.match.placeholder || bestMatch.match.def\n }), !0);\n }\n }\n function setValidPosition(pos, validTest, fromSetValid, isSelection) {\n if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {\n var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0);\n for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];\n getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;\n for (i = j = pos; i <= lvp; i++) {\n var t = positionsClone[i];\n if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {\n if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), \n getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), \n j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {\n var result = isValid(posMatch, t.input, !0, !0);\n valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, \n needsValidation = !0;\n } else valid = t.generatedInput === !0;\n if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), \n valid) break;\n }\n if (!valid) break;\n }\n if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), \n resetMaskSet(!0), !1;\n } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n return resetMaskSet(!0), !0;\n }\n function fillMissingNonMask(maskPos) {\n for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;\n var testTemplate, testsFromPos;\n for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), \n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), \n testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : \"\" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), \n result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0)));\n }\n strict = strict === !0;\n var maskPos = pos;\n void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);\n var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);\n if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), \n maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), \n (!strict || fromSetValid === !0) && result === !1)) {\n var currentPosValid = getMaskSet().validPositions[maskPos];\n if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\n if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {\n var testsFromPos = getTests(maskPos).slice();\n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop();\n var staticChar = determineTestTemplate(testsFromPos, !0);\n staticChar && null === staticChar.match.fn && (staticChar = staticChar.match.placeholder || staticChar.match.def, \n _isValid(maskPos, staticChar, strict), getMaskSet().validPositions[maskPos].generatedInput = !0);\n for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), \n result !== !1) {\n trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos;\n break;\n }\n }\n } else result = {\n caret: seekNext(maskPos)\n };\n }\n return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), \n result === !0 && (result = {\n pos: maskPos\n }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), \n void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), \n getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;\n }\n function isMask(pos, strict) {\n var test;\n if (strict ? (test = getTestTemplate(pos).match, \"\" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, \n null != test.fn) return test.fn;\n if (strict !== !0 && pos > -1) {\n var tests = getTests(pos);\n return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\n }\n return !1;\n }\n function seekNext(pos, newBlock) {\n var maskL = getMaskSet().maskLength;\n if (pos >= maskL) return maskL;\n for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ;\n return position;\n }\n function seekPrevious(pos, newBlock) {\n var tests, position = pos;\n if (position <= 0) return 0;\n for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), \n tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def)); ) ;\n return position;\n }\n function getBufferElement(position) {\n return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;\n }\n function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {\n if (event && $.isFunction(opts.onBeforeWrite)) {\n var result = opts.onBeforeWrite(event, buffer, caretPos, opts);\n if (result) {\n if (result.refreshFromBuffer) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), \n buffer = getBuffer(!0);\n }\n void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\n }\n }\n input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), \n triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger(\"input\"));\n }\n function getPlaceholder(pos, test) {\n if (test = test || getTest(pos).match, void 0 !== test.placeholder) return test.placeholder;\n if (null === test.fn) {\n if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) {\n var prevTest, tests = getTests(pos), staticAlternations = [];\n if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), \n null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n return test.def;\n }\n return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) {\n function isTemplateMatch() {\n var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join(\"\").indexOf(charCodes);\n if (charCodeNdx !== -1 && !isMask(initialNdx)) {\n isMatch = !0;\n for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (\" \" !== bufferTemplateArr[i]) {\n isMatch = !1;\n break;\n }\n }\n return isMatch;\n }\n var inputValue = nptvl.slice(), charCodes = \"\", initialNdx = 0, result = void 0;\n if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {\n var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"), matches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\n matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), \n initialNdx = seekNext(initialNdx));\n } else initialNdx = seekNext(initialNdx);\n if ($.each(inputValue, function(ndx, charCode) {\n if (void 0 !== charCode) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = charCode.charCodeAt(0), charCodes += charCode;\n var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);\n if (!isTemplateMatch() || strict || opts.autoUnmask) {\n var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;\n result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), \n initialNdx = pos + 1, charCodes = \"\";\n } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);\n if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), \n result && result.refreshFromBuffer)) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), \n resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);\n }\n }\n }), writeOut) {\n var caretPos = void 0, lvp = getLastValidPosition();\n document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, \n initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), \n result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), \n writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event(\"checkval\"));\n }\n }\n function unmaskedvalue(input) {\n if (input && void 0 === input.inputmask) return input.value;\n var umValue = [], vps = getMaskSet().validPositions;\n for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);\n var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\n if ($.isFunction(opts.onUnMask)) {\n var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\n unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue;\n }\n return unmaskedValue;\n }\n function caret(input, begin, end, notranslate) {\n function translatePosition(pos) {\n if (notranslate !== !0 && isRTL && \"number\" == typeof pos && (!opts.greedy || \"\" !== opts.placeholder)) {\n var bffrLght = getBuffer().join(\"\").length;\n pos = bffrLght - pos;\n }\n return pos;\n }\n var range;\n if (\"number\" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, \n end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), \n range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, \n end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), \n begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length), \n end = begin + range.text.length), {\n begin: translatePosition(begin),\n end: translatePosition(end)\n };\n begin = translatePosition(begin), end = translatePosition(end), end = \"number\" == typeof end ? end : begin;\n var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\n if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, \n input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {\n if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\n var textNode = document.createTextNode(\"\");\n input.appendChild(textNode);\n }\n range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), \n range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), \n range.collapse(!0);\n var sel = window.getSelection();\n sel.removeAllRanges(), sel.addRange(range);\n } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), \n range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\n renderColorMask(input, void 0, {\n begin: begin,\n end: end\n });\n }\n function determineLastRequiredPosition(returnDefinition) {\n var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;\n for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\n var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\n for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;\n return returnDefinition ? {\n l: bl,\n def: positions[bl] ? positions[bl].match : void 0\n } : bl;\n }\n function clearOptionalTail(buffer) {\n for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), buffer;\n }\n function isComplete(buffer) {\n if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\n if (\"*\" !== opts.repeat) {\n var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\n if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\n complete = !0;\n for (var i = 0; i <= aml; i++) {\n var test = getTestTemplate(i).match;\n if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {\n complete = !1;\n break;\n }\n }\n }\n return complete;\n }\n }\n function handleRemove(input, k, pos, strict) {\n function generalize() {\n if (opts.keepStatic) {\n for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {\n var altPos = getMaskSet().validPositions[lastAlt];\n if (altPos) {\n if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), \n delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n }\n if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);\n } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);\n }\n }\n if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), \n isRTL)) {\n var pend = pos.end;\n pos.end = pos.begin, pos.begin = pend;\n }\n k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), \n stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();\n var lvp = getLastValidPosition(pos.begin, !0);\n lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin);\n }\n function initializeColorMask(input) {\n function findCaretPos(clientx) {\n var caretPos, e = document.createElement(\"span\");\n for (var style in computedStyle) isNaN(style) && style.indexOf(\"font\") !== -1 && (e.style[style] = computedStyle[style]);\n e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, \n e.style.position = \"absolute\", e.style.height = \"auto\", e.style.width = \"auto\", \n e.style.visibility = \"hidden\", e.style.whiteSpace = \"nowrap\", document.body.appendChild(e);\n var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;\n for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {\n if (e.innerHTML += inputText.charAt(caretPos) || \"_\", e.offsetWidth >= clientx) {\n var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;\n e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;\n break;\n }\n previousWidth = e.offsetWidth;\n }\n return document.body.removeChild(e), caretPos;\n }\n function position() {\n colorMask.style.position = \"absolute\", colorMask.style.top = offset.top + \"px\", \n colorMask.style.left = offset.left + \"px\", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + \"px\", \n colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + \"px\", \n colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, \n colorMask.style.webkitAppearance = \"textfield\", colorMask.style.mozAppearance = \"textfield\", \n colorMask.style.Appearance = \"textfield\";\n }\n var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);\n input.parentNode;\n colorMask = document.createElement(\"div\"), document.body.appendChild(colorMask);\n for (var style in computedStyle) isNaN(style) && \"cssText\" !== style && style.indexOf(\"webkit\") == -1 && (colorMask.style[style] = computedStyle[style]);\n input.style.backgroundColor = \"transparent\", input.style.color = \"transparent\", \n input.style.webkitAppearance = \"caret\", input.style.mozAppearance = \"caret\", input.style.Appearance = \"caret\", \n position(), $(window).on(\"resize\", function(e) {\n offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), \n position();\n }), $(input).on(\"click\", function(e) {\n return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]);\n }), $(input).on(\"keydown\", function(e) {\n e.shiftKey || opts.insertMode === !1 || setTimeout(function() {\n renderColorMask(input);\n }, 0);\n });\n }\n function renderColorMask(input, buffer, caretPos) {\n function handleStatic() {\n static || null !== test.fn && void 0 !== testPos.input ? static && null !== test.fn && void 0 !== testPos.input && (static = !1, \n maskTemplate += \"</span>\") : (static = !0, maskTemplate += \"<span class='im-static''>\");\n }\n if (void 0 !== colorMask) {\n buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = {\n begin: caretPos,\n end: caretPos\n });\n var maskTemplate = \"\", static = !1;\n if (\"\" != buffer) {\n var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition();\n do pos === caretPos.begin && document.activeElement === input && (maskTemplate += \"<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>\"), \n getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), \n maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || lvp > pos);\n }\n colorMask.innerHTML = maskTemplate;\n }\n }\n function mask(elem) {\n function isElementTypeSupported(input, opts) {\n function patchValueProperty(npt) {\n function patchValhook(type) {\n if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {\n var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\n return elem.value;\n }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\n return elem.value = value, elem;\n };\n $.valHooks[type] = {\n get: function(elem) {\n if (elem.inputmask) {\n if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();\n var result = valhookGet(elem);\n return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : \"\";\n }\n return valhookGet(elem);\n },\n set: function(elem, value) {\n var result, $elem = $(elem);\n return result = valhookSet(elem, value), elem.inputmask && $elem.trigger(\"setvalue\"), \n result;\n },\n inputmaskpatch: !0\n };\n }\n }\n function getter() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\n }\n function setter(value) {\n valueSet.call(this, value), this.inputmask && $(this).trigger(\"setvalue\");\n }\n function installNativeValueSetFallback(npt) {\n EventRuler.on(npt, \"mouseenter\", function(event) {\n var $input = $(this), input = this, value = input.inputmask._valueGet();\n value !== getBuffer().join(\"\") && $input.trigger(\"setvalue\");\n });\n }\n var valueGet, valueSet;\n if (!npt.inputmask.__valueGet) {\n if (opts.noValuePatching !== !0) {\n if (Object.getOwnPropertyDescriptor) {\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" == typeof \"test\".__proto__ ? function(object) {\n return object.__proto__;\n } : function(object) {\n return object.constructor.prototype;\n });\n var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\n valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, \n valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n })) : \"INPUT\" !== npt.tagName && (valueGet = function() {\n return this.textContent;\n }, valueSet = function(value) {\n this.textContent = value;\n }, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n }));\n } else document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"), \n valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter), \n npt.__defineSetter__(\"value\", setter));\n npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\n }\n npt.inputmask._valueGet = function(overruleRTL) {\n return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\n }, npt.inputmask._valueSet = function(value, overruleRTL) {\n valueSet.call(this.el, null === value || void 0 === value ? \"\" : overruleRTL !== !0 && isRTL ? value.split(\"\").reverse().join(\"\") : value);\n }, void 0 === valueGet && (valueGet = function() {\n return this.value;\n }, valueSet = function(value) {\n this.value = value;\n }, patchValhook(npt.type), installNativeValueSetFallback(npt));\n }\n }\n var elementType = input.getAttribute(\"type\"), isSupported = \"INPUT\" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || \"TEXTAREA\" === input.tagName;\n if (!isSupported) if (\"INPUT\" === input.tagName) {\n var el = document.createElement(\"input\");\n el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\n } else isSupported = \"partial\";\n return isSupported !== !1 && patchValueProperty(input), isSupported;\n }\n var isSupported = isElementTypeSupported(elem, opts);\n if (isSupported !== !1 && (el = elem, $el = $(el), (\"rtl\" === el.dir || opts.rightAlign) && (el.style.textAlign = \"right\"), \n (\"rtl\" === el.dir || opts.numericInput) && (el.dir = \"ltr\", el.removeAttribute(\"dir\"), \n el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), \n android && (el.hasOwnProperty(\"inputmode\") && (el.inputmode = opts.inputmode, el.setAttribute(\"inputmode\", opts.inputmode)), \n \"rtfm\" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), \n el.type = \"password\")), EventRuler.off(el), isSupported === !0 && (EventRuler.on(el, \"submit\", EventHandlers.submitEvent), \n EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), \n EventRuler.on(el, \"blur\", EventHandlers.blurEvent), EventRuler.on(el, \"focus\", EventHandlers.focusEvent), \n EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, \"click\", EventHandlers.clickEvent), \n EventRuler.on(el, \"dblclick\", EventHandlers.dblclickEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"dragdrop\", EventHandlers.pasteEvent), EventRuler.on(el, \"drop\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete), \n EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared), \n opts.inputEventOnly !== !0 && (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent), \n EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"compositionstart\", $.noop), \n EventRuler.on(el, \"compositionupdate\", $.noop), EventRuler.on(el, \"compositionend\", $.noop), \n EventRuler.on(el, \"keyup\", $.noop), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent)), \n EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent), getBufferTemplate(), \n \"\" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) {\n var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();\n checkVal(el, !0, !1, initialValue.split(\"\"));\n var buffer = getBuffer().slice();\n undoValue = buffer.join(\"\"), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), \n opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), \n writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));\n }\n }\n maskset = maskset || this.maskset, opts = opts || this.opts;\n var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {\n on: function(input, eventName, eventHandler) {\n var ev = function(e) {\n if (void 0 === this.inputmask && \"FORM\" !== this.nodeName) {\n var imOpts = $.data(this, \"_inputmask_opts\");\n imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);\n } else {\n if (\"setvalue\" === e.type || !(this.disabled || this.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {\n switch (e.type) {\n case \"input\":\n if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();\n break;\n\n case \"keydown\":\n skipKeyPressEvent = !1, skipInputEvent = !1;\n break;\n\n case \"keypress\":\n if (skipKeyPressEvent === !0) return e.preventDefault();\n skipKeyPressEvent = !0;\n break;\n\n case \"click\":\n if (iemobile || iphone) {\n var that = this, args = arguments;\n return setTimeout(function() {\n eventHandler.apply(that, args);\n }, 0), !1;\n }\n }\n var returnVal = eventHandler.apply(this, arguments);\n return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;\n }\n e.preventDefault();\n }\n };\n input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), \n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\n },\n off: function(input, event) {\n if (input.inputmask && input.inputmask.events) {\n var events;\n event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, \n $.each(events, function(eventName, evArr) {\n for (;evArr.length > 0; ) {\n var ev = evArr.pop();\n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\n }\n delete input.inputmask.events[eventName];\n });\n }\n }\n }, EventHandlers = {\n keydownEvent: function(e) {\n function isInputEventSupported(eventName) {\n var el = document.createElement(\"input\"), evName = \"on\" + eventName, isSupported = evName in el;\n return isSupported || (el.setAttribute(evName, \"return;\"), isSupported = \"function\" == typeof el[evName]), \n el = null, isSupported;\n }\n var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\n if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported(\"cut\")) e.preventDefault(), \n handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {\n e.preventDefault();\n var caretPos = seekNext(getLastValidPosition());\n opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, \n caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\n } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), \n caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split(\"\")), \n $input.trigger(\"click\")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), \n pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), \n pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), \n pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {\n var caretPos = caret(input);\n caret(input, caretPos.begin);\n }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {\n var caretPos = caret(input);\n caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);\n }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));\n opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1;\n },\n keypressEvent: function(e, checkval, writeOut, strict, ndx) {\n var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\n if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"), \n setTimeout(function() {\n $input.trigger(\"change\");\n }, 0)), !0;\n if (k) {\n 46 === k && e.shiftKey === !1 && \",\" === opts.radixPoint && (k = 44);\n var forwardPosition, pos = checkval ? {\n begin: ndx,\n end: ndx\n } : caret(input), c = String.fromCharCode(k);\n getMaskSet().writeOutBuffer = !0;\n var valResult = isValid(pos, c, strict);\n if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), \n getMaskSet().p = forwardPosition), writeOut !== !1) {\n var self = this;\n if (setTimeout(function() {\n opts.onKeyValidation.call(self, k, valResult, opts);\n }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {\n var buffer = getBuffer();\n writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), \n checkval !== !0 && setTimeout(function() {\n isComplete(buffer) === !0 && $input.trigger(\"complete\");\n }, 0);\n }\n }\n if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, \n valResult;\n }\n },\n pasteEvent: function(e) {\n var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);\n isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\n var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\n if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\") && (valueBeforeCaret = \"\"), \n valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"), \n isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), \n window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret; else {\n if (!ev.clipboardData || !ev.clipboardData.getData) return !0;\n inputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\n }\n var pasteValue = inputValue;\n if ($.isFunction(opts.onBeforePaste)) {\n if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();\n pasteValue || (pasteValue = inputValue);\n }\n return checkVal(input, !1, !1, isRTL ? pasteValue.split(\"\").reverse() : pasteValue.toString().split(\"\")), \n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")), \n isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var input = this, inputValue = input.inputmask._valueGet();\n if (getBuffer().join(\"\") !== inputValue) {\n var caretPos = caret(input);\n if (inputValue = inputValue.replace(new RegExp(\"(\" + Inputmask.escapeRegex(getBufferTemplate().join(\"\")) + \")*\"), \"\"), \n iemobile) {\n var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\n if (1 === inputChar.length) {\n var keypress = new $.Event(\"keypress\");\n return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), \n !1;\n }\n }\n if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), \n getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {\n for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(\"\"); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\"); ) bufferTemplate = bufferTemplate.slice(1);\n inputValue = inputValue.replace(bufferTemplate, \"\"), inputValue = inputValue.split(\"\"), \n checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger(\"complete\");\n } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e);\n e.preventDefault();\n }\n },\n setValueEvent: function(e) {\n var input = this, value = input.inputmask._valueGet();\n checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split(\"\")), \n undoValue = getBuffer().join(\"\"), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && input.inputmask._valueSet(\"\");\n },\n focusEvent: function(e) {\n var input = this, nptValue = input.inputmask._valueGet();\n opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && \"\" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join(\"\") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), \n opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), \n undoValue = getBuffer().join(\"\");\n },\n mouseleaveEvent: function(e) {\n var input = this;\n if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {\n var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();\n nptValue !== input.getAttribute(\"placeholder\") && \"\" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer), \n writeBuffer(input, buffer));\n }\n },\n clickEvent: function(e, tabbed) {\n function doRadixFocus(clickPos) {\n if (\"\" !== opts.radixPoint) {\n var vps = getMaskSet().validPositions;\n if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\n if (clickPos < seekNext(-1)) return !0;\n var radixPos = $.inArray(opts.radixPoint, getBuffer());\n if (radixPos !== -1) {\n for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }\n var input = this;\n setTimeout(function() {\n if (document.activeElement === input) {\n var selectedCaret = caret(input);\n if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"radixFocus\":\n if (doRadixFocus(selectedCaret.begin)) {\n var radixPos = $.inArray(opts.radixPoint, getBuffer().join(\"\"));\n caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);\n break;\n }\n\n default:\n var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);\n if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {\n var placeholder = getPlaceholder(lastPosition);\n (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), \n caret(input, lastPosition);\n }\n }\n }\n }, 0);\n },\n dblclickEvent: function(e) {\n var input = this;\n setTimeout(function() {\n caret(input, 0, seekNext(getLastValidPosition()));\n }, 0);\n },\n cutEvent: function(e) {\n var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\n clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\")), \n document.execCommand && document.execCommand(\"copy\"), handleRemove(input, Inputmask.keyCode.DELETE, pos), \n writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") && $input.trigger(\"cleared\");\n },\n blurEvent: function(e) {\n var $input = $(this), input = this;\n if (input.inputmask) {\n var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();\n undoValue !== buffer.join(\"\") && setTimeout(function() {\n $input.trigger(\"change\"), undoValue = buffer.join(\"\");\n }, 0), \"\" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)), \n isComplete(buffer) === !1 && (setTimeout(function() {\n $input.trigger(\"incomplete\");\n }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), \n writeBuffer(input, buffer, void 0, e));\n }\n },\n mouseenterEvent: function(e) {\n var input = this;\n mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join(\"\") && writeBuffer(input, getBuffer());\n },\n submitEvent: function(e) {\n undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"), \n opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), \n setTimeout(function() {\n writeBuffer(el, getBuffer());\n }, 0));\n },\n resetEvent: function(e) {\n setTimeout(function() {\n $el.trigger(\"setvalue\");\n }, 0);\n }\n };\n if (void 0 !== actionObj) switch (actionObj.action) {\n case \"isComplete\":\n return el = actionObj.el, isComplete(getBuffer());\n\n case \"unmaskedvalue\":\n return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, \n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), \n unmaskedvalue(el);\n\n case \"mask\":\n mask(el);\n break;\n\n case \"format\":\n return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), \n actionObj.metadata ? {\n value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\n metadata: maskScope.call(this, {\n action: \"getmetadata\"\n }, maskset, opts)\n } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\n\n case \"isValid\":\n actionObj.value ? (valueBuffer = actionObj.value.split(\"\"), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(\"\");\n for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\n\n case \"getemptymask\":\n return getBufferTemplate().join(\"\");\n\n case \"remove\":\n if (el) {\n $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);\n var valueProperty;\n Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"), \n valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\n get: el.inputmask.__valueGet,\n set: el.inputmask.__valueSet,\n configurable: !0\n })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet), \n el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\n }\n return el;\n\n case \"getmetadata\":\n if ($.isArray(maskset.metadata)) {\n var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\n return $.each(maskset.metadata, function(ndx, mtdt) {\n if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;\n }), maskTarget;\n }\n return maskset.metadata;\n }\n }\n var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;\n return Inputmask.prototype = {\n defaults: {\n placeholder: \"_\",\n optionalmarker: {\n start: \"[\",\n end: \"]\"\n },\n quantifiermarker: {\n start: \"{\",\n end: \"}\"\n },\n groupmarker: {\n start: \"(\",\n end: \")\"\n },\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n oncomplete: $.noop,\n onincomplete: $.noop,\n oncleared: $.noop,\n repeat: 0,\n greedy: !0,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n clearIncomplete: !1,\n aliases: {},\n alias: null,\n onKeyDown: $.noop,\n onBeforeMask: null,\n onBeforePaste: function(pastedValue, opts) {\n return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: $.noop,\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n radixPointDefinitionSymbol: void 0,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"password\" ],\n definitions: {\n \"9\": {\n validator: \"[0-9]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1\n }\n },\n ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ],\n isComplete: null,\n canClearPosition: $.noop,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"verbatim\",\n colorMask: !1,\n androidHack: !1\n },\n masksCache: {},\n mask: function(elems) {\n function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\n function importOption(option, optionData) {\n optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option), \n null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)), \n userOptions[option] = optionData);\n }\n var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);\n if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"'), \n dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (\"alias\" === p.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);\n for (option in opts) {\n if (dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(option, optionData);\n }\n return $.extend(!0, opts, userOptions), opts;\n }\n var that = this;\n return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), \n elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {\n var scopedOpts = $.extend(!0, {}, that.opts);\n importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);\n var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\n void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), \n el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), \n el.inputmask.el = el, el.inputmask.maskset = maskset, $.data(el, \"_inputmask_opts\", scopedOpts), \n maskScope.call(el.inputmask, {\n action: \"mask\"\n }));\n }), elems && elems[0] ? elems[0].inputmask || this : this;\n },\n option: function(options, noremask) {\n return \"string\" == typeof options ? this.opts[options] : \"object\" == typeof options ? ($.extend(this.userOptions, options), \n this.el && noremask !== !0 && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"unmaskedvalue\",\n value: value\n });\n },\n remove: function() {\n return maskScope.call(this, {\n action: \"remove\"\n });\n },\n getemptymask: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getemptymask\"\n });\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isComplete\"\n });\n },\n getmetadata: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getmetadata\"\n });\n },\n isValid: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isValid\",\n value: value\n });\n },\n format: function(value, metadata) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"format\",\n value: value,\n metadata: metadata\n });\n },\n analyseMask: function(mask, opts) {\n function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\n this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, \n this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n }\n function insertTestDefinition(mtoken, element, position) {\n var maskdef = opts.definitions[element];\n position = void 0 !== position ? position : mtoken.matches.length;\n var prevMatch = mtoken.matches[position - 1];\n if (maskdef && !escaped) {\n maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;\n for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {\n var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;\n mtoken.matches.splice(position++, 0, {\n fn: validator ? \"string\" == typeof validator ? new RegExp(validator) : new function() {\n this.test = validator;\n }() : new RegExp(\".\"),\n cardinality: cardinality ? cardinality : 1,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n }), prevMatch = mtoken.matches[position - 1];\n }\n mtoken.matches.splice(position++, 0, {\n fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {\n this.test = maskdef.validator;\n }() : new RegExp(\".\"),\n cardinality: maskdef.cardinality,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n });\n } else mtoken.matches.splice(position++, 0, {\n fn: null,\n cardinality: 0,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,\n casing: null,\n def: opts.staticDefinitionSymbol || element,\n placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\n nativeDef: element\n }), escaped = !1;\n }\n function verifyGroupMarker(maskToken) {\n maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\n var nextToken = maskToken.matches[ndx + 1];\n (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, \n insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), \n verifyGroupMarker(token);\n });\n }\n function defaultCase() {\n if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else insertTestDefinition(currentToken, m);\n }\n function reverseTokens(maskToken) {\n function reverseStatic(st) {\n return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), \n st;\n }\n maskToken.matches = maskToken.matches.reverse();\n for (var match in maskToken.matches) {\n var intMatch = parseInt(match);\n if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\n var qt = maskToken.matches[match];\n maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);\n }\n void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\n }\n return maskToken;\n }\n for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], \n escaped) defaultCase(); else switch (m.charAt(0)) {\n case opts.escapeChar:\n escaped = !0;\n break;\n\n case opts.optionalmarker.end:\n case opts.groupmarker.end:\n if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else currentToken.matches.push(openingToken); else defaultCase();\n break;\n\n case opts.optionalmarker.start:\n openenings.push(new MaskToken((!1), (!0)));\n break;\n\n case opts.groupmarker.start:\n openenings.push(new MaskToken((!0)));\n break;\n\n case opts.quantifiermarker.start:\n var quantifier = new MaskToken((!1), (!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (\"*\" !== mq1 && \"+\" !== mq1 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\n min: mq0,\n max: mq1\n }, openenings.length > 0) {\n var matches = openenings[openenings.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifier);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifier);\n break;\n\n case opts.alternatormarker:\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), \n lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), \n alternator.matches.push(lastMatch), openenings.push(alternator));\n break;\n\n default:\n defaultCase();\n }\n for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);\n return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), \n opts.numericInput && reverseTokens(maskTokens[0]), maskTokens;\n }\n }, Inputmask.extendDefaults = function(options) {\n $.extend(!0, Inputmask.prototype.defaults, options);\n }, Inputmask.extendDefinitions = function(definition) {\n $.extend(!0, Inputmask.prototype.defaults.definitions, definition);\n }, Inputmask.extendAliases = function(alias) {\n $.extend(!0, Inputmask.prototype.defaults.aliases, alias);\n }, Inputmask.format = function(value, options, metadata) {\n return Inputmask(options).format(value, metadata);\n }, Inputmask.unmask = function(value, options) {\n return Inputmask(options).unmaskedvalue(value);\n }, Inputmask.isValid = function(value, options) {\n return Inputmask(options).isValid(value);\n }, Inputmask.remove = function(elems) {\n $.each(elems, function(ndx, el) {\n el.inputmask && el.inputmask.remove();\n });\n }, Inputmask.escapeRegex = function(str) {\n var specials = [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ];\n return str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\n }, Inputmask.keyCode = {\n ALT: 18,\n BACKSPACE: 8,\n BACKSPACE_SAFARI: 127,\n CAPS_LOCK: 20,\n COMMA: 188,\n COMMAND: 91,\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n CONTROL: 17,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n MENU: 93,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SHIFT: 16,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n WINDOWS: 91,\n X: 88\n }, window.Inputmask = Inputmask, Inputmask;\n}(jQuery), function($, Inputmask) {\n return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {\n var nptmask, input = this[0];\n if (void 0 === options && (options = {}), \"string\" == typeof fn) switch (fn) {\n case \"unmaskedvalue\":\n return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();\n\n case \"remove\":\n return this.each(function() {\n this.inputmask && this.inputmask.remove();\n });\n\n case \"getemptymask\":\n return input && input.inputmask ? input.inputmask.getemptymask() : \"\";\n\n case \"hasMaskedValue\":\n return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();\n\n case \"isComplete\":\n return !input || !input.inputmask || input.inputmask.isComplete();\n\n case \"getmetadata\":\n return input && input.inputmask ? input.inputmask.getmetadata() : void 0;\n\n case \"setvalue\":\n $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler(\"setvalue\");\n break;\n\n case \"option\":\n if (\"string\" != typeof options) return this.each(function() {\n if (void 0 !== this.inputmask) return this.inputmask.option(options);\n });\n if (input && void 0 !== input.inputmask) return input.inputmask.option(options);\n break;\n\n default:\n return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {\n nptmask.mask(this);\n });\n } else {\n if (\"object\" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {\n return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);\n }) : this.each(function() {\n nptmask.mask(this);\n });\n if (void 0 === fn) return this.each(function() {\n nptmask = new Inputmask(options), nptmask.mask(this);\n });\n }\n }), $.fn.inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {}(jQuery, Inputmask), function($, Inputmask) {\n function isLeapYear(year) {\n return isNaN(year) || 29 === new Date(year, 2, 0).getDate();\n }\n return Inputmask.extendAliases({\n \"dd/mm/yyyy\": {\n mask: \"1/2/y\",\n placeholder: \"dd/mm/yyyy\",\n regex: {\n val1pre: new RegExp(\"[0-3]\"),\n val1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"),\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\");\n }\n },\n leapday: \"29/02/\",\n separator: \"/\",\n yearrange: {\n minyear: 1900,\n maxyear: 2099\n },\n isInYearRange: function(chrs, minyear, maxyear) {\n if (isNaN(chrs)) return !1;\n var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\n return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);\n },\n determinebaseyear: function(minyear, maxyear, hint) {\n var currentyear = new Date().getFullYear();\n if (minyear > currentyear) return minyear;\n if (maxyear < currentyear) {\n for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;\n var maxxYear = maxYearPrefix + maxYearPostfix;\n return minyear > maxxYear ? minyear : maxxYear;\n }\n if (minyear <= currentyear && currentyear <= maxyear) {\n for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;\n var currentYearAndHint = currentYearPrefix + hint;\n return currentYearAndHint < minyear ? minyear : currentYearAndHint;\n }\n return currentyear;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n },\n getFrontValue: function(mask, buffer, opts) {\n for (var start = 0, length = 0, i = 0; i < mask.length && \"2\" !== mask.charAt(i); i++) {\n var definition = opts.definitions[mask.charAt(i)];\n definition ? (start += length, length = definition.cardinality) : length++;\n }\n return buffer.join(\"\").substr(start, length);\n },\n postValidation: function(buffer, currentResult, opts) {\n var dayMonthValue, year, bufferStr = buffer.join(\"\");\n return 0 === opts.mask.indexOf(\"y\") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), \n dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));\n },\n definitions: {\n \"1\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.val1.test(chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test(\"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var pchrs = chrs;\n isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);\n var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);\n if (!strict && !isValid) {\n if (isValid = opts.regex.val1.test(chrs + \"0\")) return maskset.buffer[pos] = chrs, \n maskset.buffer[++pos] = \"0\", {\n pos: pos,\n c: \"0\"\n };\n if (isValid = opts.regex.val1.test(\"0\" + chrs)) return maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n } ]\n },\n \"2\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n y: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 4,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\n if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), \n {\n refreshFromBuffer: {\n start: pos - 3,\n end: pos\n },\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 2\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 3\n } ]\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n \"mm/dd/yyyy\": {\n placeholder: \"mm/dd/yyyy\",\n alias: \"dd/mm/yyyy\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"yyyy/mm/dd\": {\n mask: \"y/1/2\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n leapday: \"/02/29\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"dd.mm.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"dd.mm.yyyy\",\n leapday: \"29.02.\",\n separator: \".\",\n alias: \"dd/mm/yyyy\"\n },\n \"dd-mm-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"dd-mm-yyyy\",\n leapday: \"29-02-\",\n separator: \"-\",\n alias: \"dd/mm/yyyy\"\n },\n \"mm.dd.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"mm.dd.yyyy\",\n leapday: \"02.29.\",\n separator: \".\",\n alias: \"mm/dd/yyyy\"\n },\n \"mm-dd-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"mm-dd-yyyy\",\n leapday: \"02-29-\",\n separator: \"-\",\n alias: \"mm/dd/yyyy\"\n },\n \"yyyy.mm.dd\": {\n mask: \"y.1.2\",\n placeholder: \"yyyy.mm.dd\",\n leapday: \".02.29\",\n separator: \".\",\n alias: \"yyyy/mm/dd\"\n },\n \"yyyy-mm-dd\": {\n mask: \"y-1-2\",\n placeholder: \"yyyy-mm-dd\",\n leapday: \"-02-29\",\n separator: \"-\",\n alias: \"yyyy/mm/dd\"\n },\n datetime: {\n mask: \"1/2/y h:s\",\n placeholder: \"dd/mm/yyyy hh:mm\",\n alias: \"dd/mm/yyyy\",\n regex: {\n hrspre: new RegExp(\"[012]\"),\n hrs24: new RegExp(\"2[0-4]|1[3-9]\"),\n hrs: new RegExp(\"[01][0-9]|2[0-4]\"),\n ampm: new RegExp(\"^[a|p|A|P][m|M]\"),\n mspre: new RegExp(\"[0-5]\"),\n ms: new RegExp(\"[0-5][0-9]\")\n },\n timeseparator: \":\",\n hourFormat: \"24\",\n definitions: {\n h: {\n validator: function(chrs, maskset, pos, strict, opts) {\n if (\"24\" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = \"0\", {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n c: \"0\"\n };\n var isValid = opts.regex.hrs.test(chrs);\n if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = chrs.charAt(0), pos++, {\n refreshFromBuffer: {\n start: pos - 2,\n end: pos\n },\n pos: pos,\n c: opts.timeseparator\n };\n if (isValid && \"24\" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {\n var tmp = parseInt(chrs, 10);\n return 24 === tmp ? (maskset.buffer[pos + 5] = \"a\", maskset.buffer[pos + 6] = \"m\") : (maskset.buffer[pos + 5] = \"p\", \n maskset.buffer[pos + 6] = \"m\"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), \n maskset.buffer[pos - 1] = \"0\") : (maskset.buffer[pos] = tmp.toString().charAt(1), \n maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos + 6\n },\n c: maskset.buffer[pos]\n };\n }\n return isValid;\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.hrspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.hrs.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n s: {\n validator: \"[0-5][0-9]\",\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.mspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.ms.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n t: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.regex.ampm.test(chrs + \"m\");\n },\n casing: \"lower\",\n cardinality: 1\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n datetime12: {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"dd/mm/yyyy hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"mm/dd/yyyy hh:mm xm\": {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"mm/dd/yyyy hh:mm xm\",\n alias: \"datetime12\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"hh:mm t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"h:s t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"hh:mm:ss\": {\n mask: \"h:s:s\",\n placeholder: \"hh:mm:ss\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n \"hh:mm\": {\n mask: \"h:s\",\n placeholder: \"hh:mm\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n date: {\n alias: \"dd/mm/yyyy\"\n },\n \"mm/yyyy\": {\n mask: \"1/y\",\n placeholder: \"mm/yyyy\",\n leapday: \"donotuse\",\n separator: \"/\",\n alias: \"mm/dd/yyyy\"\n },\n shamsi: {\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"[0-3])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])\" + escapedSeparator + \"30)|((0[1-6])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n yearrange: {\n minyear: 1300,\n maxyear: 1499\n },\n mask: \"y/1/2\",\n leapday: \"/12/30\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n clearIncomplete: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n cardinality: 1,\n casing: \"upper\"\n }\n }), Inputmask.extendAliases({\n url: {\n definitions: {\n i: {\n validator: \".\",\n cardinality: 1\n }\n },\n mask: \"(\\\\http://)|(\\\\http\\\\s://)|(ftp://)|(ftp\\\\s://)i{+}\",\n insertMode: !1,\n autoUnmask: !1,\n inputmode: \"url\"\n },\n ip: {\n mask: \"i[i[i]].i[i[i]].i[i[i]].i[i[i]]\",\n definitions: {\n i: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return pos - 1 > -1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, \n chrs = pos - 2 > -1 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : chrs = \"00\" + chrs, \n new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n },\n cardinality: 1\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"numeric\"\n },\n email: {\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n greedy: !1,\n onBeforePaste: function(pastedValue, opts) {\n return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]\",\n cardinality: 1,\n casing: \"lower\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\",\n cardinality: 1,\n casing: \"lower\"\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n cardinality: 1,\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n numeric: {\n mask: function(opts) {\n function autoEscape(txt) {\n for (var escapedTxt = \"\", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? \"\\\\\" + txt.charAt(i) : txt.charAt(i);\n return escapedTxt;\n }\n if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), \n opts.repeat = 0, opts.groupSeparator === opts.radixPoint && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"), \n \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && \"\" !== opts.groupSeparator, \n opts.autoGroup && (\"string\" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), \n isFinite(opts.integerDigits))) {\n var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;\n opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), \n opts.integerDigits < 1 && (opts.integerDigits = \"*\");\n }\n opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), \n \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = \"lvp\"), \n opts.definitions[\";\"] = opts.definitions[\"~\"], opts.definitions[\";\"].definitionSymbol = \"~\", \n opts.numericInput === !0 && (opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick, \n opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);\n var mask = \"[+]\";\n if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? \"~{1,\" + opts.integerDigits + \"}\" : \"~{\" + opts.integerDigits + \"}\", \n void 0 !== opts.digits) {\n opts.decimalProtect && (opts.radixPointDefinitionSymbol = \":\");\n var dq = opts.digits.toString().split(\",\");\n isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? \"[\" + (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{1,\" + opts.digits + \"}]\" : (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\");\n }\n return mask += autoEscape(opts.suffix), mask += \"[-]\", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\"))), \n null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\"))), \n mask;\n },\n placeholder: \"\",\n greedy: !1,\n digits: \"*\",\n digitsOptional: !0,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n groupSize: 3,\n groupSeparator: \"\",\n autoGroup: !1,\n allowPlus: !0,\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n integerDigits: \"+\",\n integerOptional: !0,\n prefix: \"\",\n suffix: \"\",\n rightAlign: !0,\n decimalProtect: !0,\n min: null,\n max: null,\n step: 1,\n insertMode: !0,\n autoUnmask: !1,\n unmaskAsNumber: !1,\n inputmode: \"numeric\",\n postFormat: function(buffer, pos, opts) {\n opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join(\"\").length - pos - 1));\n var i, l;\n pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos;\n var charAtPos = buffer[pos], cbuf = buffer.slice();\n charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]);\n var isNegative = cbuf.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)));\n isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = \"!\");\n var bufVal = cbuf.join(\"\"), bufValOrigin = cbuf.join();\n if (isNegative && (bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"\"), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\")), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + \"$\"), \"\"), \n bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.prefix)), \"\"), \n bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {\n var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);\n bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\");\n var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint);\n if (bufVal = \"\" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace(\"!\", \"?\")), \n bufVal.length > opts.groupSize) for (var reg = new RegExp(\"([-+]?[\\\\d?]+)([\\\\d?]{\" + opts.groupSize + \"})\"); reg.test(bufVal) && \"\" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, \"$1\" + opts.groupSeparator + \"$2\"), \n bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\n bufVal = bufVal.replace(\"?\", \"!\"), \"\" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint) + radixSplit[1]);\n }\n bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back);\n var needsRefresh = bufValOrigin !== bufVal.split(\"\").join(), newPos = $.inArray(\"!\", bufVal);\n if (newPos === -1 && (newPos = pos), needsRefresh) {\n for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i);\n buffer[newPos] = charAtPos;\n }\n return newPos = opts.numericInput && isFinite(pos) ? buffer.join(\"\").length - newPos - 1 : newPos, \n opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join(\"\").length - opts.suffix.length !== newPos && (newPos -= 1)), \n {\n pos: newPos,\n refreshFromBuffer: needsRefresh,\n buffer: buffer,\n isNegative: isNegative\n };\n },\n onBeforeWrite: function(e, buffer, caretPos, opts) {\n var rslt;\n if (e && (\"blur\" === e.type || \"checkval\" === e.type || \"keydown\" === e.type)) {\n var maskedValue = opts.numericInput ? buffer.slice().reverse().join(\"\") : buffer.join(\"\"), processValue = maskedValue.replace(opts.prefix, \"\");\n processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, \".\"));\n var isNegative = processValue.match(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"));\n if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\"), \n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"), \n isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\")), \n processValue = processValue === opts.negationSymbol.front ? processValue + \"0\" : processValue, \n \"\" !== processValue && isFinite(processValue)) {\n var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue;\n if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), \n isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), \n isNegative = opts.max < 0, maskedValue = void 0), processValue = floatValue.toString().replace(\".\", opts.radixPoint).split(\"\"), \n isFinite(opts.digits)) {\n var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);\n radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);\n for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = \"0\";\n processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];\n }\n if (floatValue.toString() !== processValue && floatValue.toString() + \".\" !== processValue || isNegative) return processValue = (opts.prefix + processValue.join(\"\")).split(\"\"), \n !isNegative || 0 === floatValue && \"blur\" === e.type || (processValue.unshift(opts.negationSymbol.front), \n processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), \n rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join(\"\") !== buffer.join(\"\")), \n rslt;\n }\n }\n if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, \n rslt;\n },\n regex: {\n integerPart: function(opts) {\n return new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"+]?\\\\d+\");\n },\n integerNPart: function(opts) {\n return new RegExp(\"[\\\\d\" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + \"]+\");\n }\n },\n signHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) {\n var matchRslt = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === (\"-\" === chrs ? \"+\" : opts.negationSymbol.front) ? \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos,\n insert: {\n pos: maskset.buffer.length - 1,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos\n } : \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: \"+\",\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos\n } : {\n pos: 0,\n c: \"+\",\n remove: 0,\n caret: pos\n } : maskset.buffer[0] === (\"-\" === chrs ? opts.negationSymbol.front : \"+\") ? \"-\" === chrs && \"\" !== opts.negationSymbol.back ? {\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos - 1\n } : {\n remove: 0,\n caret: pos - 1\n } : \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1\n } : {\n pos: 0,\n c: chrs,\n caret: pos + 1\n };\n }\n return !1;\n },\n radixHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {\n var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {\n caret: radixPos + 1\n } : {\n pos: integerValue.index,\n c: integerValue[0],\n caret: radixPos + 1\n };\n if (!integerValue || \"0\" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = \"0\", \n {\n pos: (integerValue ? integerValue.index : pos) + 1,\n c: opts.radixPoint\n };\n }\n return !1;\n },\n leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {\n if (!strict) {\n var buffer = maskset.buffer.slice(\"\");\n if (buffer.splice(0, opts.prefix.length), buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), \n opts.numericInput === !0) {\n var buffer = buffer.reverse(), bufferChar = buffer[0];\n if (\"0\" === bufferChar && void 0 === maskset.validPositions[pos - 1]) return {\n pos: pos,\n remove: buffer.length - 1\n };\n } else {\n pos -= opts.prefix.length;\n var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join(\"\").match(opts.regex.integerNPart(opts));\n if (matchRslt && (radixPosition === -1 || pos <= radixPosition)) {\n var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join(\"\"));\n if (0 === matchRslt[0].indexOf(\"\" !== opts.placeholder ? opts.placeholder.charAt(0) : \"0\") && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), \n {\n pos: matchRslt.index + opts.prefix.length,\n remove: matchRslt.index + opts.prefix.length\n };\n if (\"0\" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;\n }\n }\n }\n return !0;\n },\n definitions: {\n \"~\": {\n validator: function(chrs, maskset, pos, strict, opts, isSelection) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), \n !isValid && (isValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs), \n isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), \n isValid === !0)))) {\n var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);\n isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {\n pos: pos,\n remove: pos\n } : {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n },\n \"+\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) && (isValid = !(!strict && \"-\" === chrs) || (\"\" !== opts.negationSymbol.back ? {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1\n })), isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \"-\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), \n isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \":\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid) {\n var radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\n isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {\n caret: pos + 1\n });\n }\n return isValid;\n },\n cardinality: 1,\n placeholder: function(opts) {\n return opts.radixPoint;\n }\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n if (\"\" === unmaskedValue && opts.nullable === !0) return unmaskedValue;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")), \n Number(processValue)) : processValue;\n },\n isComplete: function(buffer, opts) {\n var maskedValue = buffer.join(\"\"), bufClone = buffer.slice();\n if (opts.postFormat(bufClone, 0, opts), bufClone.join(\"\") !== maskedValue) return !1;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")), \n isFinite(processValue);\n },\n onBeforeMask: function(initialValue, opts) {\n if (opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n \"\" !== opts.radixPoint && isFinite(initialValue)) {\n var vs = initialValue.split(\".\"), groupSize = \"\" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;\n 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.toString().replace(\".\", opts.radixPoint));\n }\n var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\\./g);\n if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\\./g, \"\"), \n initialValue = initialValue.replace(\",\", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, \"\"), \n initialValue = initialValue.replace(\".\", opts.radixPoint)) : initialValue = initialValue.indexOf(\".\") < initialValue.indexOf(\",\") ? initialValue.replace(/\\./g, \"\") : initialValue = initialValue.replace(/,/g, \"\") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n 0 === opts.digits && (initialValue.indexOf(\".\") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(\".\")) : initialValue.indexOf(\",\") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(\",\")))), \n \"\" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {\n var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp(\"\\\\d*\"))[0];\n if (parseInt(opts.digits) < decPart.toString().length) {\n var digitsFactor = Math.pow(10, parseInt(opts.digits));\n initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\"), \n initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, \n initialValue = initialValue.toString().replace(\".\", opts.radixPoint);\n }\n }\n return opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n initialValue.toString();\n },\n canClearPosition: function(maskset, position, lvp, strict, opts) {\n var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;\n return canClear;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey) switch (e.keyCode) {\n case Inputmask.keyCode.UP:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger(\"setvalue\");\n break;\n\n case Inputmask.keyCode.DOWN:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger(\"setvalue\");\n }\n }\n },\n currency: {\n prefix: \"$ \",\n groupSeparator: \",\",\n alias: \"numeric\",\n placeholder: \"0\",\n autoGroup: !0,\n digits: 2,\n digitsOptional: !1,\n clearMaskOnLostFocus: !1\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n digits: 0,\n radixPoint: \"\"\n },\n percentage: {\n alias: \"numeric\",\n digits: 2,\n radixPoint: \".\",\n placeholder: \"0\",\n autoGroup: !1,\n min: 0,\n max: 100,\n suffix: \" %\",\n allowPlus: !1,\n allowMinus: !1\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n function maskSort(a, b) {\n var maska = (a.mask || a).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskb = (b.mask || b).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskas = (a.mask || a).split(\"#\")[0], maskbs = (b.mask || b).split(\"#\")[0];\n return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);\n }\n var analyseMaskBase = Inputmask.prototype.analyseMask;\n return Inputmask.prototype.analyseMask = function(mask, opts) {\n function reduceVariations(masks, previousVariation, previousmaskGroup) {\n previousVariation = previousVariation || \"\", previousmaskGroup = previousmaskGroup || maskGroups, \n \"\" !== previousVariation && (previousmaskGroup[previousVariation] = {});\n for (var variation = \"\", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], \n variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], \n maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);\n for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);\n }\n function rebuild(maskGroup) {\n var mask = \"\", submasks = [];\n for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));\n return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;\n }\n var maskGroups = {};\n opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), \n reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), \n mask = rebuild(maskGroups));\n var mt = analyseMaskBase.call(this, mask, opts);\n return mt;\n }, Inputmask.extendAliases({\n abstractphone: {\n groupmarker: {\n start: \"<\",\n end: \">\"\n },\n countrycode: \"\",\n phoneCodes: [],\n mask: function(opts) {\n return opts.definitions = {\n \"#\": opts.definitions[9]\n }, opts.phoneCodes.sort(maskSort);\n },\n keepStatic: !0,\n onBeforeMask: function(value, opts) {\n var processedValue = value.replace(/^0{1,2}/, \"\").replace(/[\\s]/g, \"\");\n return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = \"+\" + opts.countrycode + processedValue), \n processedValue;\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return unmaskedValue;\n },\n inputmode: \"tel\"\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n Regex: {\n mask: \"r\",\n greedy: !1,\n repeat: \"*\",\n regex: null,\n regexTokens: null,\n tokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\n quantifierFilter: /[0-9]+[^,]/,\n isComplete: function(buffer, opts) {\n return new RegExp(opts.regex).test(buffer.join(\"\"));\n },\n definitions: {\n r: {\n validator: function(chrs, maskset, pos, strict, opts) {\n function RegexToken(isGroup, isQuantifier) {\n this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, \n this.quantifier = {\n min: 1,\n max: 1\n }, this.repeaterPart = void 0;\n }\n function analyseRegex() {\n var match, m, currentToken = new RegexToken(), opengroups = [];\n for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], \n m.charAt(0)) {\n case \"(\":\n opengroups.push(new RegexToken((!0)));\n break;\n\n case \")\":\n groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);\n break;\n\n case \"{\":\n case \"+\":\n case \"*\":\n var quantifierToken = new RegexToken((!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (quantifierToken.quantifier = {\n min: mq0,\n max: mq1\n }, opengroups.length > 0) {\n var matches = opengroups[opengroups.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifierToken);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifierToken);\n break;\n\n default:\n opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);\n }\n currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);\n }\n function validateRegexToken(token, fromGroup) {\n var isvalid = !1;\n fromGroup && (regexPart += \"(\", openGroupCount++);\n for (var mndx = 0; mndx < token.matches.length; mndx++) {\n var matchToken = token.matches[mndx];\n if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {\n var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;\n if (isNaN(matchToken.quantifier.max)) {\n for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;\n isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), \n regexPart = regexPartBak + matchToken.quantifier.max;\n } else {\n for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;\n regexPart = regexPartBak + \"{\" + matchToken.quantifier.min + \",\" + matchToken.quantifier.max + \"}\";\n }\n } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {\n var testExp;\n if (\"[\" == matchToken.charAt(0)) {\n testExp = regexPart, testExp += matchToken;\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n isvalid = exp.test(bufferStr);\n } else for (var l = 0, tl = matchToken.length; l < tl; l++) if (\"\\\\\" !== matchToken.charAt(l)) {\n testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\\|$/, \"\");\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n if (isvalid = exp.test(bufferStr)) break;\n }\n regexPart += matchToken;\n }\n if (isvalid) break;\n }\n return fromGroup && (regexPart += \")\", openGroupCount--), isvalid;\n }\n var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = \"\", isValid = !1, openGroupCount = 0;\n null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(\"\");\n for (var i = 0; i < opts.regexTokens.length; i++) {\n var regexToken = opts.regexTokens[i];\n if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;\n }\n return isValid;\n },\n cardinality: 1\n }\n }\n }\n }), Inputmask;\n}(jQuery, Inputmask);","/*\n * MetaLightbox v0.5\n * http://twma.pro\n *\n */\n\n//=require ../../bower_components/jquery-zoom/jquery.zoom.js\n\n(function($, window, document) {\n\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: 'The requested content cannot be loaded. Please try again later.'\n };\n\n function MetaLightbox(element, options) {\n /*this.el = element;\n\t\tthis.$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\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')) $html.addClass('meta-lightbox-notouch');\n if ('ontouchstart' in document) $html.removeClass('meta-lightbox-notouch');\n\n // Setup the click\n $(document).on('click', '[data-toggle=\"lightbox\"]', function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n $this.showLightbox(this);\n return false;\n });\n\n // keyboardNav\n if (this.options.keyboardNav) {\n $('body').off('keyup').on('keyup', function(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\n showLightbox: function(element) {\n this.el = element;\n this.$el = $(this.el);\n\n var $this = this,\n lightbox, content, currentLink, 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 = $('[data-lightbox-gallery=\"' + this.$el.data('lightbox-gallery') + '\"]');\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').off('click').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').off('click').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 href = link.attr('href'),\n img, video, src, classTerm, iframe, wrap;\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', function() {\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(function() {\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 });\n /*.each(function () {\n if (this.complete) $(this).load();\n });*/\n\n img.on('error', function() {\n var wrap = $('<div class=\"meta-lightbox-error\"><p>' + $this.options.errorMessage + '</p></div>');\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 (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n src = '';\n classTerm = 'meta-lightbox-video';\n\n if (video[1] == 'youtube') {\n src = '//www.youtube.com/embed/' + video[4];\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtu') {\n src = '//www.youtube.com/embed/' + video[3];\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtube-nocookie') {\n src = '//www.youtube-nocookie.com/embed/' + video[4];\n classTerm = 'nivo-lightbox-youtube';\n }\n if (video[1] == 'vimeo') {\n src = '//player.vimeo.com/video/' + video[3];\n classTerm = 'meta-lightbox-vimeo';\n }\n\n if (src) {\n iframe = $('<iframe>', {\n src: 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', function() {\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($(href).clone().show());\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(function() {\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 = $('<div class=\"meta-lightbox-error\"><p>' + $this.options.errorMessage + '</p></div>');\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 = $('<div class=\"meta-lightbox-error\"><p>' + $this.options.errorMessage + '</p></div>');\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 data = $.parseJSON(data);\n if (typeof(data) === 'object') {\n // Replace regions\n if (typeof(data['regions']) === 'object' && typeof data['regions']['LayoutAjax'] !== 'undefinded') {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.html(data['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\n var title = jqXHR.getResponseHeader('X-Title'),\n link = jqXHR.getResponseHeader('X-Link');\n\n if (\n title && title.length &&\n link && link.length &&\n link !== window.location.href &&\n link.substring(0, link.indexOf('#')) !== window.location.href.replace($('base').attr('href'), '/')\n ) {\n $('.meta-lightbox-ajax').data('curr-title', document.title);\n $('.meta-lightbox-ajax').data('curr-link', window.location.href);\n\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.pushState({\n title: title,\n page: link,\n ajax: 'true'\n }, title, link);\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: 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(function() {\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(function() {\n $(window).resize();\n\n window.imagesLoaded().then(function() {\n $(window).resize();\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(function() {\n $(window).trigger('meta-lightbox-loaded');\n }, 1); // For CSS transitions\n\n setTimeout(function() {\n $('body').addClass('meta-lightbox-body-effect-fade');\n }, 600);\n },\n\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 = $('<a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-prev\"><i class=\"fa fa-chevron-left\"></i> <span class=\"sr-only\">Previous</span></a><a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-next\"><i class=\"fa fa-chevron-right\"></i> <span class=\"sr-only\">Next</span></a>'),\n close = $('<a href=\"#\" class=\"meta-lightbox-close fa fa-times\" title=\"Close\"><span class=\"sr-only\">Close</span></a>'),\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\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', function(e) {\n if (e.target === this ||\n $(e.target).hasClass('meta-lightbox-content') ||\n $(e.target).hasClass('meta-lightbox-image')) $this.destructLightbox();\n });\n }\n\n close.on('click', function(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\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 title: title,\n page: link,\n ajax: 'true'\n }, title, link);\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('meta-lightbox-body-effect-' + $this.options.effect);\n $('.meta-lightbox-content .meta-lightbox-zoom-wrapper').trigger('zoom.destroy');\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\n isHidpi: function() {\n var mediaQuery = \"(-webkit-min-device-pixel-ratio: 1.5),\\\n\t\t\t\t\t(min--moz-device-pixel-ratio: 1.5),\\\n\t\t\t\t\t(-o-min-device-pixel-ratio: 3/2),\\\n\t\t\t\t\t(min-resolution: 1.5dppx)\";\n if (window.devicePixelRatio > 1) return true;\n return (window.matchMedia && window.matchMedia(mediaQuery).matches);\n }\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\n})(jQuery, this, document);","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * Select2 4.0.11\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 '\\\\': '&#92;',\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n '\\'': '&#39;',\n '/': '&#47;'\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 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.options.get('disabled')) {\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 '&times;' +\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.options.get('disabled')) {\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('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 '&times;' +\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('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('change');\n });\n } else {\n var val = data.id;\n\n this.$element.val(val);\n this.$element.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('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('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 ($.contains(document.body, $offsetParent[0])) {\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 $.each(mutations, self._syncA);\n $.each(mutations, self._syncS);\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();\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.options.get('disabled')) {\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._syncSubtree = 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 }\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.options.get('disabled')) {\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 this.trigger('query', {});\n };\n\n Select2.prototype.close = function () {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', {});\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('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","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)$\";","module.exports = \"../img/bg.png\";","module.exports = \"../img/photo1.png\";","module.exports = \"../img/photo2.jpg\";","module.exports = \"../fonts/photo3.svg\";","/**\n * Add your global events here\n */\n\nmodule.exports = {\n ENVS: [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n 'xxxl',\n ],\n};\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n LOADED: 'load',\n MAPLOADED: 'map-loaded',\n MAPMARKERCLICK: 'map-marker-click',\n MAPPOPUPCLOSE: 'map-popup-close',\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 ? $target : ($parent ? $parent.find('.dropdown-menu') : 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 (!$el.data('allow-click')) {\n console.log('aaaa');\n e.preventDefault();\n }\n\n if (ui.isShown()) {\n ui.hide();\n } else {\n ui.show();\n }\n });\n\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.parents('.dropdown').not('.active').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 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\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-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(`<li data-target=\"#${ id }\" data-slide-to=\"0\" class=\"active\"></li>`);\n for (let i = 1; i < count; i++) {\n $indicators.append(`<li data-target=\"#${ id }\" data-slide-to=\"${ i }\"></li>`);\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend(`<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 $e.prepend(`<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 // init carousel\n $e.carousel();\n\n const $youtubeSlides = $e.find('iframe[src^=\"https://www.youtube.com/embed/\"]');\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('player', new YT.Player(e, {\n events: {\n 'onReady': () => {\n $e.data('player').pauseVideo();\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('swipeleft panleft', (e) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('swiperight panright', (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 }\n\n static dispose() {\n this.each((i, e) => {\n $(e).carousel('dispose');\n });\n }\n }\n\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\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","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.$el.data(DATA_KEY, ui);\n ui.shown = true;\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(this._el, 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 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/dist/js/select2.js';\n\nimport 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\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n ui._element = element;\n $element.data(DATA_KEY, this);\n\n $('[data-inputmask]').inputmask();\n\n const $fields = $element.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 = $element.find('select:not([readonly])');\n const $radioOptions = $element.find('input[type=\"radio\"]');\n\n $selectFields.each((i, el) => {\n const $el = $(el);\n $el.select2();\n });\n\n /*const separator = '::;::';\n $selectFields.each((i, el) => {\n const $el = $(el);\n const maxOptions = $el.data('max-options') || false;\n\n $el.selectpicker($.extend({\n iconBase: 'fas',\n tickIcon: 'fa-check',\n virtualScroll: false,\n dropupAuto: false,\n size: 10,\n maxOptions,\n }, $el.data(), {\n multipleSeparator: separator,\n }));\n\n // wrap options\n if (maxOptions > 1) {\n const wrapOptions = () => {\n if (!$el.val().length) {\n return true;\n }\n\n const $container = $el.parent().find('.dropdown-toggle .filter-option');\n const val = $container.text();\n const vals = val.split(separator);\n let html = '';\n\n vals.forEach((opt) => {\n const $opt = $el.find('option').filter((i, e) => {\n return $(e).text() === opt;\n });\n\n html += `<span class=\"option\" data-val=${ $opt.attr('value') }>${ opt\n } <i class=\"fas fa-times btn-remove\"></i></span>`;\n\n });\n\n $container.html(html);\n\n // remove value\n $container.find('.option').on('click', (e) => {\n e.preventDefault();\n\n const $opt = $(e.currentTarget);\n const val = $opt.data('val').toString();\n //$opt.remove();\n\n const vals = $el.selectpicker('val');\n const i = vals.indexOf(val);\n if (i > -1) {\n vals.splice(i, 1);\n $el.selectpicker('val', vals);\n }\n\n wrapOptions();\n });\n };\n\n $el.on('rendered.bs.select changed.bs.select refreshed.bs.select loaded.bs.select change', wrapOptions);\n wrapOptions();\n }\n });\n\n // FIX: missing conflicting 'bootstrap/js/dist/dropdown' with bootstrap-select/dist/js/bootstrap-select\n $('[data-toggle=\"dropdown\"]').on('click', (e) => {\n $(e.currentTarget).siblings('.dropdown-menu').toggleClass('show');\n });\n\n $('.dropdown-menu a').on('click', (e) => {\n $(e.currentTarget).parents('.dropdown-menu').removeClass('show');\n });*/\n // /FIX\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 $element.on('submit', (e) => {\n SpinnerUI.show();\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_BASICS);\n }\n\n // Public methods\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(() => {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new FormBasics(this);\n $element.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 $ 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';\n\nimport SmoothScroll from 'smooth-scroll';\nconst smoothScroll = SmoothScroll();\n\n\nconst MainUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'MainUI';\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('tabHidden');\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger('tabFocused');\n }\n });\n\n\n // update online/offline state\n const updateOnlineStatus = () => {\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger('offline');\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger('online');\n }\n };\n\n if (typeof navigator.onLine !== 'undefined') {\n W.addEventListener('offline', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('online', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('load', () => {\n updateOnlineStatus();\n });\n }\n\n // scrollTo\n const ScrollTo = (trigger, selector) => {\n smoothScroll.animateScroll(\n D.querySelector(selector),\n 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\n // session ping\n 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 W.location.reload(false);\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 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('//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js', () => {\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 // 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 // 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 const envs = [...Consts.ENVS];\n\n $Body.append($el);\n let curEnv = envs.shift();\n\n for (let env of envs.reverse()) {\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 = (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(`<div class=\"page-alert\"><div class=\"alert alert-${cls}\"><i class=\"close\" data-dismiss=\"alert\">&times;</i>${msg}</div></div>`);\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('alert-appeared');\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 (\n $AlertNotify.length &&\n typeof $AlertNotify[0].stop !== 'undefined'\n ) {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger('alert-removed');\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('image-lazy-loaded');\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 $(W).trigger('images-lazy-loaded');\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 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 url = url.split(/(vi\\/|v%3D|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n return undefined !== url[2] ? url[2].split(/[^0-9a-z_\\-]/i)[0] : url[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","import $ from 'jquery';\n\nimport Events from '../_events';\n\nimport 'bootstrap-datepicker/dist/js/bootstrap-datepicker.js';\nimport 'bootstrap-timepicker/js/bootstrap-timepicker.js';\n\nconst DatetimeUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'jsDatetimeUI';\n const DATA_KEY = NAME;\n\n const datepickerOptions = {\n autoclose: true,\n startDate: 0,\n //todayBtn: true,\n todayHighlight: true,\n clearBtn: true,\n };\n\n class DatetimeUI {\n constructor(el) {\n const ui = this;\n const $el = $(el);\n\n ui._el = el;\n\n // datepicker\n if ($el.hasClass('date') || $el.attr('type') === 'date') {\n const defaultDate = ($el.attr('name').toLowerCase().indexOf('end') !== -1) ?\n '+4d' :\n '+3d';\n\n $el.attr('readonly', 'true');\n $el.datepicker($.extend(datepickerOptions, {\n defaultViewDate: defaultDate,\n multidate: $el.data('multidate'),\n }, $el.data()));\n } else\n\n // timepicker\n if ($el.hasClass('time') || $el.attr('type') === 'time') {\n $el.attr('readonly', 'true');\n $el.timepicker($.extend({\n snapToStep: true,\n icons: {\n up: 'fas fa-chevron-up',\n down: 'fas fa-chevron-down',\n },\n }, $el.data())).on('show.timepicker', (e) => {\n const $el = $(e.currentTarget);\n const $dropdown = $Body.find('.bootstrap-timepicker-widget');\n\n if (!$dropdown.find('[data-action=\"clear\"]').length) {\n $dropdown.find('tbody').append('<tr><td colspan=\"5\"><a href=\"#\" data-action=\"clear\">Clear</a></td></tr>');\n }\n\n const $clearBtn = $dropdown.find('[data-action=\"clear\"]');\n $clearBtn.on('click', (e) => {\n e.preventDefault();\n $el.timepicker('clear');\n $el.timepicker('hideWidget');\n })\n });\n\n }\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new DatetimeUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = DatetimeUI._jQueryInterface;\n $.fn[NAME].Constructor = DatetimeUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return DatetimeUI._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('input.date, input.time,input[type=\"date\"], input[type=\"time\"]').jsDatetimeUI();\n });\n\n return DatetimeUI;\n})($);\n\nexport default DatetimeUI;\n","import $ from 'jquery';\nimport Events from \"../_events\";\n\nconst FormValidateField = (($) => {\n // Constants\n const NAME = 'jsFormValidateField';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n\n class FormValidateField {\n\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n ui._element = element;\n ui._actions = $element.parents('form').children('.btn-toolbar,.form-actions');\n $element.data(DATA_KEY, this);\n\n // prevent browsers checks (will do it using JS)\n $element.attr('novalidate', 'novalidate');\n\n $element.on('change focusout', (e) => {\n ui.validate(false);\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_VALIDATE_FIELD);\n }\n\n // Public methods\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 validate(scrollTo = true) {\n const ui = this;\n const $el = $(ui._element);\n const $field = $el.closest('.field');\n const extraChecks = $el.data(`${NAME}-extra`);\n let valid = true;\n let msg = null;\n\n const val = $el.val();\n\n // browser checks + required\n if (!ui._element.checkValidity() ||\n ($el.hasClass('required') && (!val.length || !val.trim().length ||\n ui.isHtml(val) && !$(val).text().length\n ))\n ) {\n valid = false;\n }\n\n // validate URL\n if ($el.hasClass('url') && val.length && !this.valideURL(val)) {\n valid = false;\n msg = 'URL must start with http:// or https://. For example: https://your-domain.com/';\n }\n\n this.removeError();\n\n // extra checks\n if (extraChecks) {\n extraChecks.forEach((check) => {\n valid = valid && check();\n });\n }\n\n if (valid) {\n return true;\n }\n\n this.setError(scrollTo, msg);\n\n return false;\n }\n\n isHtml(str) {\n const doc = new DOMParser().parseFromString(str, \"text/html\");\n return Array.from(doc.body.childNodes).some((node) => node.nodeType === 1);\n }\n\n valideURL(str) {\n const pattern = new RegExp('^(https?:\\\\/\\\\/){1}' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return pattern.test(str);\n }\n\n setError(scrollTo = true, msg = null) {\n const ui = this;\n const $field = $(ui._element).closest('.field');\n const pos = $field.offset().top;\n\n $field.addClass('error');\n if (msg) {\n $field.append(`<div class=\"message alert alert-error alert-danger\">${ msg }</div>`);\n }\n\n if (scrollTo) {\n $field.focus();\n $Html.scrollTop(pos - 100);\n }\n }\n\n removeError() {\n const ui = this;\n const $field = $(ui._element).closest('.field');\n\n $field.removeClass('error');\n\n $field.removeClass('holder-error');\n $field.removeClass('holder-validation');\n $field.find('.message').remove();\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 FormValidateField(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormValidateField._jQueryInterface;\n $.fn[NAME].Constructor = FormValidateField;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormValidateField._jQueryInterface;\n };\n\n return FormValidateField;\n})($);\n\nexport default FormValidateField;\n","import $ from 'jquery';\nimport Events from '../_events';\nimport LANG from '../lang/_en';\nimport FormValidateField from \"./_ui.form.validate.field\";\n\nconst SteppedForm = (($) => {\n // Constants\n const NAME = 'jsSteppedForm';\n const DATA_KEY = NAME;\n\n class SteppedForm {\n\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n $element.data(DATA_KEY, this);\n\n if (!$element.find('.steps-counter').length) {\n $element.prepend(LANG['en'][NAME]['STEPCOUNTER']);\n }\n\n if (!$element.find('.steps-buttons').length) {\n $element.append(LANG['en'][NAME]['STEPBUTTONS']);\n }\n\n ui._currentStepCounter = $element.find('.steps-counter .current-step');\n ui._totalStepsCounter = $element.find('.steps-counter .total-steps');\n\n ui._steps = $element.find('.step');\n ui._stepNext = $element.find('.step-next');\n\n ui._stepPrev = $element.find('.step-prev');\n ui._actions = $element.children('.btn-toolbar,.form-actions');\n\n ui._element = element;\n ui._currentStep = 1;\n ui._totalSteps = ui._steps.last().data('step') || ui._steps.length;\n ui._stepsOrder = [];\n\n ui._totalStepsCounter.text(ui._totalSteps);\n\n // check if one of the steps already has an error\n const $hasError = ui._steps\n .find('.field.error,.field.holder-error,.field.holder-validation,.field.holder-info,.field.holder-warning,.field.holder-good')\n .first();\n if ($hasError.length) {\n const $modal = $element.parents('.modal');\n\n // show modal\n if ($modal.length && typeof $modal.modal !== 'undefined') {\n $modal.modal('show');\n }\n\n ui._currentStep = $hasError.parents('.step').data('step') || ui._currentStep;\n }\n //\n\n ui.step(`.step[data-step=\"${ ui._currentStep }\"]`);\n\n ui._stepNext.on('click', (e) => {\n e.preventDefault();\n ui.next();\n });\n\n ui._stepPrev.on('click', (e) => {\n e.preventDefault();\n ui.prev();\n });\n\n $element.find('.step-toggle').on('click', (e) => {\n const $el = $(e.currentTarget);\n\n e.preventDefault();\n ui.step($el.data('target'));\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_STEPPED);\n }\n\n // Public methods\n dispose() {\n const ui = this;\n const $element = $(ui._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(ui._element, DATA_KEY);\n ui._element = null;\n }\n\n next() {\n const ui = this;\n\n if (ui._currentStep >= ui._totalSteps) {\n return;\n }\n\n ui.step(`.step[data-step=\"${ ui._currentStep + 1 }\"]`);\n }\n\n prev() {\n const ui = this;\n\n if (ui._currentStep <= 1) {\n return;\n }\n\n ui.step(ui._stepsOrder[ui._currentStep - 1]);\n }\n\n step(target) {\n const ui = this;\n const $element = $(ui._element);\n const $target = $element.find(target);\n const targetStep = parseInt($target.data('step'));\n\n // validate current step\n let valid = true;\n\n if (targetStep > ui._currentStep) {\n ui.currentStep().find('input,textarea,select').each((i, el) => {\n const $el = $(el);\n const fieldUI = $el.data('jsFormValidateField');\n\n if (fieldUI && !fieldUI.validate()) {\n valid = false;\n }\n });\n }\n\n if (!valid) {\n return false;\n }\n //\n\n if (parseInt($target.data('step')) <= '1') {\n ui._stepPrev.hide();\n $element.trigger(Events.FORM_STEPPED_FIRST_STEP);\n } else {\n ui._stepPrev.show();\n }\n\n if (parseInt($target.data('step')) >= ui._totalSteps) {\n ui._stepNext.hide();\n ui._actions.show();\n\n $element.trigger(Events.FORM_STEPPED_LAST_STEP);\n } else {\n ui._stepNext.show();\n ui._actions.hide();\n }\n\n ui._currentStep = targetStep;\n ui._stepsOrder[ui._currentStep] = $target;\n\n ui._steps.removeClass('active');\n $target.addClass('active');\n\n ui._currentStepCounter.text(ui._currentStep);\n\n $target.trigger(Events.FORM_STEPPED_NEW_STEP);\n $element.trigger(Events.FORM_STEPPED_NEW_STEP);\n }\n\n currentStep() {\n const ui = this;\n const $element = $(ui._element);\n\n return $element.find('.step.active');\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 SteppedForm(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SteppedForm._jQueryInterface;\n $.fn[NAME].Constructor = SteppedForm;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SteppedForm._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('.form-stepped').jsSteppedForm();\n });\n\n return SteppedForm;\n})($);\n\nexport default SteppedForm;\n","import $ from 'jquery';\n\nimport Events from './_events';\nimport Spinner from './_components/_ui.spinner';\nimport FormDatetime from './_components/_ui.form.datetime';\nimport FormStepped from './_components/_ui.form.stepped';\n\n//import Multislider from './_components/_ui.multislider';\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 }\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","import '../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\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\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 'meta-lightbox/meta-lightbox';\n\n//import Confirmation from 'bootstrap-confirmation2/dist/bootstrap-confirmation';\n//import Table from 'bootstrap-table/dist/bootstrap-table';\n\nimport './_main';\nimport './_layout';\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nconst images = importAll(require.context('../img/', false, /\\.(png|jpe?g|svg)$/));\nconst fontAwesome = importAll(require.context('font-awesome', false, /\\.(otf|eot|svg|ttf|woff|woff2)$/));\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n en: {\n jsSteppedForm: {\n STEPCOUNTER: '<div class=\"steps-counter\">Step <b class=\"current-step\"></b> of <b class=\"total-steps\"></b></div>',\n STEPBUTTONS: '<div class=\"steps-buttons\">' +\n '<a href=\"#\" class=\"step-ctrl step-prev\"><i class=\"fas fa-chevron-left\"></i> Prev</a>' +\n ' <a href=\"#\" class=\"step-ctrl step-next\">Next <i class=\"fas fa-chevron-right\"></i></a>' +\n '</div>',\n },\n },\n};\n","module.exports = jQuery;"],"sourceRoot":""}