{"version":3,"sources":["webpack:///./node_modules/minisearch/dist/es5m/index.js","webpack:///./node_modules/select2/dist/js/select2.full.js"],"names":["_assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","r","e","ar","push","error","__spread","concat","_a","TreeIterator","set","type","node","_tree","keys","_type","_path","dive","backtrack","undefined","last","result","pop","key","_prefix","map","filter","join","array","withinDistance","a","b","maxDistance","edit","stack","distance","ia","ib","results","edit_1","SearchableMap","tree","prefix","atPrefix","startsWith","Error","_b","trackDown","slice","path","_c","last$1","parentNode","key_1","nodeKey","find","k","clear","_size","remove","entries","forEach","fn","e_1","_d","e_1_1","fuzzyGet","maxEditDistance","query","innerStack","_loop_1","node_1","totDistance","d","Infinity","fuzzySearch","get","lookup","has","createPath","defineProperty","_this","enumerable","configurable","update","values","from","e_2","entries_1","entries_1_1","e_2_1","fromObject","object","toSplit","commonPrefix","Math","min","cleanup","merge","MiniSearch","options","fields","_options","defaultOptions","searchOptions","defaultSearchOptions","_index","_documentCount","_documentIds","_fieldIds","_fieldLength","_averageFieldLength","_nextId","_storedFields","addFields","add","document","extractField","tokenize","processTerm","idField","id","shortDocumentId","addDocumentId","saveStoredFields","field","fieldValue","tokens","toString","addFieldLength","documentCount","term","processedTerm","addTerm","addAll","documents","addAllAsync","chunkSize","acc","chunk","promise","Promise","resolve","reduce","then","setTimeout","longId","removeTerm","removeAll","search","queryString","globalSearchOptions","searchTokenize","searchProcessTerm","termToQuery","executeQuery","combinedResults","combineResults","combineWith","docId","score","match","terms","uniq","sort","autoSuggest","defaultAutoSuggestOptions","suggestions","phrase","count","suggestion","loadJSON","json","loadJS","JSON","parse","getDefault","optionName","getOwnProperty","js","index","nextId","documentIds","fieldIds","fieldLength","averageFieldLength","storedFields","miniSearch","boosts","boost","boostDocument","weights","fuzzyWeight","fuzzy","prefixWeight","exactMatch","termResults","data","weightedDistance","round","combinators","operator","toLowerCase","toJSON","indexData","weight","editDistance","fieldId","ds","df","documentId","tf","docBoost","normalizedLength","fieldIndex","warnDocumentChanged","console","warn","fieldName","totalLength","doc","storeFields","property","combined","termFrequency","documentFrequency","log","element","indexOf","text","split","SPACE_OR_PUNCTUATION","_typeof","obj","constructor","jQuery","S2","select2","amd","requirejs","require","define","undef","main","_req","makeMap","handlers","defined","waiting","config","defining","hasOwn","aps","jsSuffixRegExp","hasProp","prop","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","j","part","baseParts","starMap","nodeIdCompat","test","replace","charAt","splice","makeRequire","relName","forceSync","args","makeLoad","depName","callDep","splitPrefix","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","pr","exports","module","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","alt","cfg","_defined","_$","$","Utils","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","unshift","Array","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","on","event","trigger","params","invoke","len","generateChars","chars","floor","random","bind","func","context","_convertData","originalKey","dataLevel","hasScroll","el","$el","overflowX","style","overflowY","innerHeight","scrollHeight","innerWidth","scrollWidth","escapeMarkup","markup","replaceMap","'","String","appendMany","$element","$nodes","jquery","substr","$jqNodes","append","__cache","GetUniqueElementId","select2Id","getAttribute","setAttribute","StoreData","GetData","RemoveData","removeAttribute","Results","dataAdapter","render","$results","attr","empty","displayMessage","hideLoading","$message","message","className","hideMessages","$options","item","$option","option","children","position","$dropdown","sorter","highlightFirstItem","$selected","first","ensureHighlightVisible","setClasses","self","current","selected","selectedIds","each","inArray","showLoading","loading","disabled","loadingMore","$loading","prepend","createElement","attrs","matches","window","Element","msMatchesSelector","webkitMatchesSelector","_resultId","title","role","val","label","template","$children","c","child","$child","$childrenContainer","container","$container","isOpen","removeAttr","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","eq","currentOffset","offset","top","nextTop","nextOffset","scrollTop","outerHeight","nextBottom","addClass","mousewheel","bottom","deltaY","isAtTop","isAtBottom","height","preventDefault","stopPropagation","evt","$this","originalEvent","removeClass","destroy","offsetDelta","content","display","innerHTML","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","which","_attachCloseHandler","_detachCloseHandler","activeElement","contains","body","$select","target","closest","off","isEnabled","isDisabled","SingleSelection","html","$rendered","selectionContainer","selection","formatted","MultipleSelection","parent","$selections","Placeholder","decorated","placeholder","normalizePlaceholder","_","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","isDefaultPrevented","$previousChoice","prev","searchRemoveChoice","msie","documentMode","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","input","css","width","EventRelay","relayEvents","preventableEvents","Event","Translation","dict","all","extend","translation","_cache","loadPath","translations","BaseAdapter","generateResultId","SelectAdapter","select","is","currentData","unselect","addOptions","textContent","innerText","normalizedData","_normalizeItem","matcher","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","replaceWith","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","defaults","q","transport","success","failure","$request","ajax","fail","_request","isFunction","abort","request","isArray","status","url","delay","_queryTimeout","clearTimeout","Tags","tags","createTag","insertTag","tag","_removeOldTags","page","wrapper","checkChildren","toUpperCase","trim","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","documentElement","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","detach","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","parents","x","scrollLeft","y","ev","$window","isCurrentlyAbove","hasClass","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","left","$offsetParent","offsetParent","parentOffset","isConnected","outerWidth","minWidth","appendTo","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","ctrlKey","metaKey","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","reset","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","l","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","isPlainObject","resolvedLanguages","baseLanguage","languageData","ex","camelCase","convertedData","Options","fromElement","InputCompat","excludedData","dir","dataset","upperCaseLetter","letter","attributes","attributeName","dataName","dataValue","Select2","_generateId","tabindex","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","insertAfter","_resolveWidth","method","WIDTH","styleWidth","elementWidth","getComputedStyle","_syncA","_syncS","_syncSubtree","attachEvent","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","addEventListener","nonRelayEvents","toggleDropdown","focus","altKey","close","open","_isChangeMutation","changed","nodeName","addedNodes","removedNodes","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","enable","newVal","detachEvent","disconnect","removeEventListener","removeData","syncCssClasses","$dest","$src","adapter","classes","adapted","replacements","CompatUtils","_containerAdapter","clazz","containerCssAdapter","_cssAdapter","_dropdownAdapter","dropdownCssAdapter","_isInitialized","InputData","_currentData","_valueSeparator","getSelected","allData","AttachContainer","StopPropagation","factory","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","version","setup","handler","onmousewheel","getLineHeight","getPageHeight","teardown","elem","$elem","$parent","parseInt","settings","adjustOldDeltas","normalizeOffset","orgEvent","delta","deltaX","absDelta","offsetX","offsetY","fix","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","max","abs","shouldAdjustOldDeltas","getBoundingClientRect","boundingRect","clientX","clientY","deltaFactor","nullLowestDelta","dispatch","handle","unmousewheel","unbind","thisMethods","instanceOptions","instance"],"mappings":"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U,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAA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","file":"js/3-016b0e203f85ed8a55b1.chunk.js","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\n\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\n/** @ignore */\n\n\nvar ENTRIES = 'ENTRIES';\n/** @ignore */\n\nvar KEYS = 'KEYS';\n/** @ignore */\n\nvar VALUES = 'VALUES';\n/** @ignore */\n\nvar LEAF = '';\n/**\n * @private\n */\n\nvar TreeIterator =\n/** @class */\nfunction () {\n function TreeIterator(set, type) {\n var node = set._tree;\n var keys = Object.keys(node);\n this.set = set;\n this._type = type;\n this._path = keys.length > 0 ? [{\n node: node,\n keys: keys\n }] : [];\n }\n\n TreeIterator.prototype.next = function () {\n var value = this.dive();\n this.backtrack();\n return value;\n };\n\n TreeIterator.prototype.dive = function () {\n if (this._path.length === 0) {\n return {\n done: true,\n value: undefined\n };\n }\n\n var _a = last(this._path),\n node = _a.node,\n keys = _a.keys;\n\n if (last(keys) === LEAF) {\n return {\n done: false,\n value: this.result()\n };\n }\n\n this._path.push({\n node: node[last(keys)],\n keys: Object.keys(node[last(keys)])\n });\n\n return this.dive();\n };\n\n TreeIterator.prototype.backtrack = function () {\n if (this._path.length === 0) {\n return;\n }\n\n last(this._path).keys.pop();\n\n if (last(this._path).keys.length > 0) {\n return;\n }\n\n this._path.pop();\n\n this.backtrack();\n };\n\n TreeIterator.prototype.key = function () {\n return this.set._prefix + this._path.map(function (_a) {\n var keys = _a.keys;\n return last(keys);\n }).filter(function (key) {\n return key !== LEAF;\n }).join('');\n };\n\n TreeIterator.prototype.value = function () {\n return last(this._path).node[LEAF];\n };\n\n TreeIterator.prototype.result = function () {\n if (this._type === VALUES) {\n return this.value();\n }\n\n if (this._type === KEYS) {\n return this.key();\n }\n\n return [this.key(), this.value()];\n };\n\n TreeIterator.prototype[Symbol.iterator] = function () {\n return this;\n };\n\n return TreeIterator;\n}();\n\nvar last = function last(array) {\n return array[array.length - 1];\n};\n\nvar NONE = 0;\nvar CHANGE = 1;\nvar ADD = 2;\nvar DELETE = 3;\n/**\n * @ignore\n */\n\nvar fuzzySearch = function fuzzySearch(node, query, maxDistance) {\n var stack = [{\n distance: 0,\n i: 0,\n key: '',\n node: node\n }];\n var results = {};\n var innerStack = [];\n\n var _loop_1 = function _loop_1() {\n var _a = stack.pop(),\n node_1 = _a.node,\n distance = _a.distance,\n key = _a.key,\n i = _a.i,\n edit = _a.edit;\n\n Object.keys(node_1).forEach(function (k) {\n if (k === LEAF) {\n var totDistance = distance + (query.length - i);\n\n var _a = __read(results[key] || [null, Infinity], 2),\n d = _a[1];\n\n if (totDistance <= maxDistance && totDistance < d) {\n results[key] = [node_1[k], totDistance];\n }\n } else {\n withinDistance(query, k, maxDistance - distance, i, edit, innerStack).forEach(function (_a) {\n var d = _a.distance,\n i = _a.i,\n edit = _a.edit;\n stack.push({\n node: node_1[k],\n distance: distance + d,\n key: key + k,\n i: i,\n edit: edit\n });\n });\n }\n });\n };\n\n while (stack.length > 0) {\n _loop_1();\n }\n\n return results;\n};\n/**\n * @ignore\n */\n\n\nvar withinDistance = function withinDistance(a, b, maxDistance, i, edit, stack) {\n stack.push({\n distance: 0,\n ia: i,\n ib: 0,\n edit: edit\n });\n var results = [];\n\n while (stack.length > 0) {\n var _a = stack.pop(),\n distance = _a.distance,\n ia = _a.ia,\n ib = _a.ib,\n edit_1 = _a.edit;\n\n if (ib === b.length) {\n results.push({\n distance: distance,\n i: ia,\n edit: edit_1\n });\n continue;\n }\n\n if (a[ia] === b[ib]) {\n stack.push({\n distance: distance,\n ia: ia + 1,\n ib: ib + 1,\n edit: NONE\n });\n } else {\n if (distance >= maxDistance) {\n continue;\n }\n\n if (edit_1 !== ADD) {\n stack.push({\n distance: distance + 1,\n ia: ia,\n ib: ib + 1,\n edit: DELETE\n });\n }\n\n if (ia < a.length) {\n if (edit_1 !== DELETE) {\n stack.push({\n distance: distance + 1,\n ia: ia + 1,\n ib: ib,\n edit: ADD\n });\n }\n\n if (edit_1 !== DELETE && edit_1 !== ADD) {\n stack.push({\n distance: distance + 1,\n ia: ia + 1,\n ib: ib + 1,\n edit: CHANGE\n });\n }\n }\n }\n }\n\n return results;\n};\n/**\n * A class implementing the same interface as a standard JavaScript\n * [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)\n * with string keys, but adding support for efficiently searching entries with\n * prefix or fuzzy search. This class is used internally by [[MiniSearch]] as\n * the inverted index data structure. The implementation is a radix tree\n * (compressed prefix tree).\n *\n * Since this class can be of general utility beyond _MiniSearch_, it is\n * exported by the `minisearch` package and can be imported (or required) as\n * `minisearch/SearchableMap`.\n *\n * @typeParam T The type of the values stored in the map.\n */\n\n\nvar SearchableMap =\n/** @class */\nfunction () {\n /**\n * The constructor is normally called without arguments, creating an empty\n * map. In order to create a [[SearchableMap]] from an iterable or from an\n * object, check [[SearchableMap.from]] and [[SearchableMap.fromObject]].\n *\n * The constructor arguments are for internal use, when creating derived\n * mutable views of a map at a prefix.\n */\n function SearchableMap(tree, prefix) {\n if (tree === void 0) {\n tree = {};\n }\n\n if (prefix === void 0) {\n prefix = '';\n }\n\n this._tree = tree;\n this._prefix = prefix;\n }\n /**\n * Creates and returns a mutable view of this [[SearchableMap]], containing only\n * entries that share the given prefix.\n *\n * ### Usage:\n *\n * ```javascript\n * let map = new SearchableMap()\n * map.set(\"unicorn\", 1)\n * map.set(\"universe\", 2)\n * map.set(\"university\", 3)\n * map.set(\"unique\", 4)\n * map.set(\"hello\", 5)\n *\n * let uni = map.atPrefix(\"uni\")\n * uni.get(\"unique\") // => 4\n * uni.get(\"unicorn\") // => 1\n * uni.get(\"hello\") // => undefined\n *\n * let univer = map.atPrefix(\"univer\")\n * univer.get(\"unique\") // => undefined\n * univer.get(\"universe\") // => 2\n * univer.get(\"university\") // => 3\n * ```\n *\n * @param prefix The prefix\n * @return A [[SearchableMap]] representing a mutable view of the original Map at the given prefix\n */\n\n\n SearchableMap.prototype.atPrefix = function (prefix) {\n var _a;\n\n if (!prefix.startsWith(this._prefix)) {\n throw new Error('Mismatched prefix');\n }\n\n var _b = __read(trackDown(this._tree, prefix.slice(this._prefix.length)), 2),\n node = _b[0],\n path = _b[1];\n\n if (node === undefined) {\n var _c = __read(last$1(path), 2),\n parentNode = _c[0],\n key_1 = _c[1];\n\n var nodeKey = Object.keys(parentNode).find(function (k) {\n return k !== LEAF && k.startsWith(key_1);\n });\n\n if (nodeKey !== undefined) {\n return new SearchableMap((_a = {}, _a[nodeKey.slice(key_1.length)] = parentNode[nodeKey], _a), prefix);\n }\n }\n\n return new SearchableMap(node || {}, prefix);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear\n */\n\n\n SearchableMap.prototype.clear = function () {\n delete this._size;\n this._tree = {};\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete\n * @param key Key to delete\n */\n\n\n SearchableMap.prototype[\"delete\"] = function (key) {\n delete this._size;\n return remove(this._tree, key);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries\n * @return An iterator iterating through `[key, value]` entries.\n */\n\n\n SearchableMap.prototype.entries = function () {\n return new TreeIterator(this, ENTRIES);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach\n * @param fn Iteration function\n */\n\n\n SearchableMap.prototype.forEach = function (fn) {\n var e_1, _a;\n\n try {\n for (var _b = __values(this), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2),\n key = _d[0],\n value = _d[1];\n\n fn(key, value, this);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b[\"return\"])) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n /**\n * Returns a key-value object of all the entries that have a key within the\n * given edit distance from the search key. The keys of the returned object are\n * the matching keys, while the values are two-elements arrays where the first\n * element is the value associated to the key, and the second is the edit\n * distance of the key to the search key.\n *\n * ### Usage:\n *\n * ```javascript\n * let map = new SearchableMap()\n * map.set('hello', 'world')\n * map.set('hell', 'yeah')\n * map.set('ciao', 'mondo')\n *\n * // Get all entries that match the key 'hallo' with a maximum edit distance of 2\n * map.fuzzyGet('hallo', 2)\n * // => { \"hello\": [\"world\", 1], \"hell\": [\"yeah\", 2] }\n *\n * // In the example, the \"hello\" key has value \"world\" and edit distance of 1\n * // (change \"e\" to \"a\"), the key \"hell\" has value \"yeah\" and edit distance of 2\n * // (change \"e\" to \"a\", delete \"o\")\n * ```\n *\n * @param key The search key\n * @param maxEditDistance The maximum edit distance (Levenshtein)\n * @return A key-value object of the matching keys to their value and edit distance\n */\n\n\n SearchableMap.prototype.fuzzyGet = function (key, maxEditDistance) {\n return fuzzySearch(this._tree, key, maxEditDistance);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get\n * @param key Key to get\n * @return Value associated to the key, or `undefined` if the key is not\n * found.\n */\n\n\n SearchableMap.prototype.get = function (key) {\n var node = lookup(this._tree, key);\n return node !== undefined ? node[LEAF] : undefined;\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has\n * @param key Key\n * @return True if the key is in the map, false otherwise\n */\n\n\n SearchableMap.prototype.has = function (key) {\n var node = lookup(this._tree, key);\n return node !== undefined && node.hasOwnProperty(LEAF);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys\n * @return An `Iterable` iterating through keys\n */\n\n\n SearchableMap.prototype.keys = function () {\n return new TreeIterator(this, KEYS);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set\n * @param key Key to set\n * @param value Value to associate to the key\n * @return The [[SearchableMap]] itself, to allow chaining\n */\n\n\n SearchableMap.prototype.set = function (key, value) {\n if (typeof key !== 'string') {\n throw new Error('key must be a string');\n }\n\n delete this._size;\n var node = createPath(this._tree, key);\n node[LEAF] = value;\n return this;\n };\n\n Object.defineProperty(SearchableMap.prototype, \"size\", {\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size\n */\n get: function get() {\n var _this = this;\n\n if (this._size) {\n return this._size;\n }\n /** @ignore */\n\n\n this._size = 0;\n this.forEach(function () {\n _this._size += 1;\n });\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Updates the value at the given key using the provided function. The function\n * is called with the current value at the key, and its return value is used as\n * the new value to be set.\n *\n * ### Example:\n *\n * ```javascript\n * // Increment the current value by one\n * searchableMap.update('somekey', (currentValue) => currentValue == null ? 0 : currentValue + 1)\n * ```\n *\n * @param key The key to update\n * @param fn The function used to compute the new value from the current one\n * @return The [[SearchableMap]] itself, to allow chaining\n */\n\n SearchableMap.prototype.update = function (key, fn) {\n if (typeof key !== 'string') {\n throw new Error('key must be a string');\n }\n\n delete this._size;\n var node = createPath(this._tree, key);\n node[LEAF] = fn(node[LEAF]);\n return this;\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values\n * @return An `Iterable` iterating through values.\n */\n\n\n SearchableMap.prototype.values = function () {\n return new TreeIterator(this, VALUES);\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator\n */\n\n\n SearchableMap.prototype[Symbol.iterator] = function () {\n return this.entries();\n };\n /**\n * Creates a [[SearchableMap]] from an `Iterable` of entries\n *\n * @param entries Entries to be inserted in the [[SearchableMap]]\n * @return A new [[SearchableMap]] with the given entries\n */\n\n\n SearchableMap.from = function (entries) {\n var e_2, _a;\n\n var tree = new SearchableMap();\n\n try {\n for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n var _b = __read(entries_1_1.value, 2),\n key = _b[0],\n value = _b[1];\n\n tree.set(key, value);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (entries_1_1 && !entries_1_1.done && (_a = entries_1[\"return\"])) _a.call(entries_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n return tree;\n };\n /**\n * Creates a [[SearchableMap]] from the iterable properties of a JavaScript object\n *\n * @param object Object of entries for the [[SearchableMap]]\n * @return A new [[SearchableMap]] with the given entries\n */\n\n\n SearchableMap.fromObject = function (object) {\n return SearchableMap.from(Object.entries(object));\n };\n\n return SearchableMap;\n}();\n\nvar trackDown = function trackDown(tree, key, path) {\n if (path === void 0) {\n path = [];\n }\n\n if (key.length === 0 || tree == null) {\n return [tree, path];\n }\n\n var nodeKey = Object.keys(tree).find(function (k) {\n return k !== LEAF && key.startsWith(k);\n });\n\n if (nodeKey === undefined) {\n path.push([tree, key]); // performance: update in place\n\n return trackDown(undefined, '', path);\n }\n\n path.push([tree, nodeKey]); // performance: update in place\n\n return trackDown(tree[nodeKey], key.slice(nodeKey.length), path);\n};\n\nvar lookup = function lookup(tree, key) {\n if (key.length === 0 || tree == null) {\n return tree;\n }\n\n var nodeKey = Object.keys(tree).find(function (k) {\n return k !== LEAF && key.startsWith(k);\n });\n\n if (nodeKey === undefined) {\n return undefined;\n }\n\n return lookup(tree[nodeKey], key.slice(nodeKey.length));\n};\n\nvar createPath = function createPath(tree, key) {\n var _a;\n\n if (key.length === 0 || tree == null) {\n return tree;\n }\n\n var nodeKey = Object.keys(tree).find(function (k) {\n return k !== LEAF && key.startsWith(k);\n });\n\n if (nodeKey === undefined) {\n var toSplit = Object.keys(tree).find(function (k) {\n return k !== LEAF && k.startsWith(key[0]);\n });\n\n if (toSplit === undefined) {\n tree[key] = {};\n } else {\n var prefix = commonPrefix(key, toSplit);\n tree[prefix] = (_a = {}, _a[toSplit.slice(prefix.length)] = tree[toSplit], _a);\n delete tree[toSplit];\n return createPath(tree[prefix], key.slice(prefix.length));\n }\n\n return tree[key];\n }\n\n return createPath(tree[nodeKey], key.slice(nodeKey.length));\n};\n\nvar commonPrefix = function commonPrefix(a, b, i, length, prefix) {\n if (i === void 0) {\n i = 0;\n }\n\n if (length === void 0) {\n length = Math.min(a.length, b.length);\n }\n\n if (prefix === void 0) {\n prefix = '';\n }\n\n if (i >= length) {\n return prefix;\n }\n\n if (a[i] !== b[i]) {\n return prefix;\n }\n\n return commonPrefix(a, b, i + 1, length, prefix + a[i]);\n};\n\nvar remove = function remove(tree, key) {\n var _a = __read(trackDown(tree, key), 2),\n node = _a[0],\n path = _a[1];\n\n if (node === undefined) {\n return;\n }\n\n delete node[LEAF];\n var keys = Object.keys(node);\n\n if (keys.length === 0) {\n cleanup(path);\n }\n\n if (keys.length === 1) {\n merge(path, keys[0], node[keys[0]]);\n }\n};\n\nvar cleanup = function cleanup(path) {\n if (path.length === 0) {\n return;\n }\n\n var _a = __read(last$1(path), 2),\n node = _a[0],\n key = _a[1];\n\n delete node[key];\n\n if (Object.keys(node).length === 0) {\n cleanup(path.slice(0, -1));\n }\n};\n\nvar merge = function merge(path, key, value) {\n if (path.length === 0) {\n return;\n }\n\n var _a = __read(last$1(path), 2),\n node = _a[0],\n nodeKey = _a[1];\n\n node[nodeKey + key] = value;\n delete node[nodeKey];\n};\n\nvar last$1 = function last$1(array) {\n return array[array.length - 1];\n};\n\nvar _a;\n\nvar OR = 'or';\nvar AND = 'and';\n/**\n * [[MiniSearch]] is the main entrypoint class, implementing a full-text search\n * engine in memory.\n *\n * @typeParam T The type of the documents being indexed.\n *\n * ### Basic example:\n *\n * ```javascript\n * const documents = [\n * {\n * id: 1,\n * title: 'Moby Dick',\n * text: 'Call me Ishmael. Some years ago...',\n * category: 'fiction'\n * },\n * {\n * id: 2,\n * title: 'Zen and the Art of Motorcycle Maintenance',\n * text: 'I can see by my watch...',\n * category: 'fiction'\n * },\n * {\n * id: 3,\n * title: 'Neuromancer',\n * text: 'The sky above the port was...',\n * category: 'fiction'\n * },\n * {\n * id: 4,\n * title: 'Zen and the Art of Archery',\n * text: 'At first sight it must seem...',\n * category: 'non-fiction'\n * },\n * // ...and more\n * ]\n *\n * // Create a search engine that indexes the 'title' and 'text' fields for\n * // full-text search. Search results will include 'title' and 'category' (plus the\n * // id field, that is always stored and returned)\n * const miniSearch = new MiniSearch({\n * fields: ['title', 'text'],\n * storeFields: ['title', 'category']\n * })\n *\n * // Add documents to the index\n * miniSearch.addAll(documents)\n *\n * // Search for documents:\n * let results = miniSearch.search('zen art motorcycle')\n * // => [\n * // { id: 2, title: 'Zen and the Art of Motorcycle Maintenance', category: 'fiction', score: 2.77258 },\n * // { id: 4, title: 'Zen and the Art of Archery', category: 'non-fiction', score: 1.38629 }\n * // ]\n * ```\n */\n\nvar MiniSearch =\n/** @class */\nfunction () {\n /**\n * @param options Configuration options\n *\n * ### Examples:\n *\n * ```javascript\n * // Create a search engine that indexes the 'title' and 'text' fields of your\n * // documents:\n * const miniSearch = new MiniSearch({ fields: ['title', 'text'] })\n * ```\n *\n * ### ID Field:\n *\n * ```javascript\n * // Your documents are assumed to include a unique 'id' field, but if you want\n * // to use a different field for document identification, you can set the\n * // 'idField' option:\n * const miniSearch = new MiniSearch({ idField: 'key', fields: ['title', 'text'] })\n * ```\n *\n * ### Options and defaults:\n *\n * ```javascript\n * // The full set of options (here with their default value) is:\n * const miniSearch = new MiniSearch({\n * // idField: field that uniquely identifies a document\n * idField: 'id',\n *\n * // extractField: function used to get the value of a field in a document.\n * // By default, it assumes the document is a flat object with field names as\n * // property keys and field values as string property values, but custom logic\n * // can be implemented by setting this option to a custom extractor function.\n * extractField: (document, fieldName) => document[fieldName],\n *\n * // tokenize: function used to split fields into individual terms. By\n * // default, it is also used to tokenize search queries, unless a specific\n * // `tokenize` search option is supplied. When tokenizing an indexed field,\n * // the field name is passed as the second argument.\n * tokenize: (string, _fieldName) => string.split(SPACE_OR_PUNCTUATION),\n *\n * // processTerm: function used to process each tokenized term before\n * // indexing. It can be used for stemming and normalization. Return a falsy\n * // value in order to discard a term. By default, it is also used to process\n * // search queries, unless a specific `processTerm` option is supplied as a\n * // search option. When processing a term from a indexed field, the field\n * // name is passed as the second argument.\n * processTerm: (term, _fieldName) => term.toLowerCase(),\n *\n * // searchOptions: default search options, see the `search` method for\n * // details\n * searchOptions: undefined,\n *\n * // fields: document fields to be indexed. Mandatory, but not set by default\n * fields: undefined\n *\n * // storeFields: document fields to be stored and returned as part of the\n * // search results.\n * storeFields: []\n * })\n * ```\n */\n function MiniSearch(options) {\n if ((options === null || options === void 0 ? void 0 : options.fields) == null) {\n throw new Error('MiniSearch: option \"fields\" must be provided');\n }\n\n this._options = _assign(_assign(_assign({}, defaultOptions), options), {\n searchOptions: _assign(_assign({}, defaultSearchOptions), options.searchOptions || {})\n });\n this._index = new SearchableMap();\n this._documentCount = 0;\n this._documentIds = {};\n this._fieldIds = {};\n this._fieldLength = {};\n this._averageFieldLength = {};\n this._nextId = 0;\n this._storedFields = {};\n this.addFields(this._options.fields);\n }\n /**\n * Adds a document to the index\n *\n * @param document The document to be indexed\n */\n\n\n MiniSearch.prototype.add = function (document) {\n var _this = this;\n\n var _a = this._options,\n extractField = _a.extractField,\n tokenize = _a.tokenize,\n processTerm = _a.processTerm,\n fields = _a.fields,\n idField = _a.idField;\n var id = extractField(document, idField);\n\n if (id == null) {\n throw new Error(\"MiniSearch: document does not have ID field \\\"\" + idField + \"\\\"\");\n }\n\n var shortDocumentId = this.addDocumentId(id);\n this.saveStoredFields(shortDocumentId, document);\n fields.forEach(function (field) {\n var fieldValue = extractField(document, field);\n\n if (fieldValue == null) {\n return;\n }\n\n var tokens = tokenize(fieldValue.toString(), field);\n\n _this.addFieldLength(shortDocumentId, _this._fieldIds[field], _this.documentCount - 1, tokens.length);\n\n tokens.forEach(function (term) {\n var processedTerm = processTerm(term, field);\n\n if (processedTerm) {\n _this.addTerm(_this._fieldIds[field], shortDocumentId, processedTerm);\n }\n });\n });\n };\n /**\n * Adds all the given documents to the index\n *\n * @param documents An array of documents to be indexed\n */\n\n\n MiniSearch.prototype.addAll = function (documents) {\n var _this = this;\n\n documents.forEach(function (document) {\n return _this.add(document);\n });\n };\n /**\n * Adds all the given documents to the index asynchronously.\n *\n * Returns a promise that resolves (to `undefined`) when the indexing is done.\n * This method is useful when index many documents, to avoid blocking the main\n * thread. The indexing is performed asynchronously and in chunks.\n *\n * @param documents An array of documents to be indexed\n * @param options Configuration options\n * @return A promise resolving to `undefined` when the indexing is done\n */\n\n\n MiniSearch.prototype.addAllAsync = function (documents, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n var _a = options.chunkSize,\n chunkSize = _a === void 0 ? 10 : _a;\n var acc = {\n chunk: [],\n promise: Promise.resolve()\n };\n\n var _b = documents.reduce(function (_a, document, i) {\n var chunk = _a.chunk,\n promise = _a.promise;\n chunk.push(document);\n\n if ((i + 1) % chunkSize === 0) {\n return {\n chunk: [],\n promise: promise.then(function () {\n return new Promise(function (resolve) {\n return setTimeout(resolve, 0);\n });\n }).then(function () {\n return _this.addAll(chunk);\n })\n };\n } else {\n return {\n chunk: chunk,\n promise: promise\n };\n }\n }, acc),\n chunk = _b.chunk,\n promise = _b.promise;\n\n return promise.then(function () {\n return _this.addAll(chunk);\n });\n };\n /**\n * Removes the given document from the index.\n *\n * The document to delete must NOT have changed between indexing and deletion,\n * otherwise the index will be corrupted. Therefore, when reindexing a document\n * after a change, the correct order of operations is:\n *\n * 1. remove old version\n * 2. apply changes\n * 3. index new version\n *\n * @param document The document to be removed\n */\n\n\n MiniSearch.prototype.remove = function (document) {\n var _this = this;\n\n var _a = this._options,\n tokenize = _a.tokenize,\n processTerm = _a.processTerm,\n extractField = _a.extractField,\n fields = _a.fields,\n idField = _a.idField;\n var id = extractField(document, idField);\n\n if (id == null) {\n throw new Error(\"MiniSearch: document does not have ID field \\\"\" + idField + \"\\\"\");\n }\n\n var _b = __read(Object.entries(this._documentIds).find(function (_a) {\n var _b = __read(_a, 2),\n _ = _b[0],\n longId = _b[1];\n\n return id === longId;\n }) || [], 1),\n shortDocumentId = _b[0];\n\n if (shortDocumentId == null) {\n throw new Error(\"MiniSearch: cannot remove document with ID \" + id + \": it is not in the index\");\n }\n\n fields.forEach(function (field) {\n var fieldValue = extractField(document, field);\n\n if (fieldValue == null) {\n return;\n }\n\n var tokens = tokenize(fieldValue.toString(), field);\n tokens.forEach(function (term) {\n var processedTerm = processTerm(term, field);\n\n if (processedTerm) {\n _this.removeTerm(_this._fieldIds[field], shortDocumentId, processedTerm);\n }\n });\n });\n delete this._storedFields[shortDocumentId];\n delete this._documentIds[shortDocumentId];\n this._documentCount -= 1;\n };\n /**\n * Removes all the given documents from the index. If called with no arguments,\n * it removes _all_ documents from the index.\n *\n * @param documents The documents to be removed. If this argument is omitted,\n * all documents are removed. Note that, for removing all documents, it is\n * more efficient to call this method with no arguments than to pass all\n * documents.\n */\n\n\n MiniSearch.prototype.removeAll = function (documents) {\n var _this = this;\n\n if (documents) {\n documents.forEach(function (document) {\n return _this.remove(document);\n });\n } else if (arguments.length > 0) {\n throw new Error('Expected documents to be present. Omit the argument to remove all documents.');\n } else {\n this._index = new SearchableMap();\n this._documentCount = 0;\n this._documentIds = {};\n this._fieldLength = {};\n this._averageFieldLength = {};\n this._storedFields = {};\n this._nextId = 0;\n }\n };\n /**\n * Search for documents matching the given search query.\n *\n * The result is a list of scored document IDs matching the query, sorted by\n * descending score, and each including data about which terms were matched and\n * in which fields.\n *\n * ### Basic usage:\n *\n * ```javascript\n * // Search for \"zen art motorcycle\" with default options: terms have to match\n * // exactly, and individual terms are joined with OR\n * miniSearch.search('zen art motorcycle')\n * // => [ { id: 2, score: 2.77258, match: { ... } }, { id: 4, score: 1.38629, match: { ... } } ]\n * ```\n *\n * ### Restrict search to specific fields:\n *\n * ```javascript\n * // Search only in the 'title' field\n * miniSearch.search('zen', { fields: ['title'] })\n * ```\n *\n * ### Field boosting:\n *\n * ```javascript\n * // Boost a field\n * miniSearch.search('zen', { boost: { title: 2 } })\n * ```\n *\n * ### Prefix search:\n *\n * ```javascript\n * // Search for \"moto\" with prefix search (it will match documents\n * // containing terms that start with \"moto\" or \"neuro\")\n * miniSearch.search('moto neuro', { prefix: true })\n * ```\n *\n * ### Fuzzy search:\n *\n * ```javascript\n * // Search for \"ismael\" with fuzzy search (it will match documents containing\n * // terms similar to \"ismael\", with a maximum edit distance of 0.2 term.length\n * // (rounded to nearest integer)\n * miniSearch.search('ismael', { fuzzy: 0.2 })\n * ```\n *\n * ### Combining strategies:\n *\n * ```javascript\n * // Mix of exact match, prefix search, and fuzzy search\n * miniSearch.search('ismael mob', {\n * prefix: true,\n * fuzzy: 0.2\n * })\n * ```\n *\n * ### Advanced prefix and fuzzy search:\n *\n * ```javascript\n * // Perform fuzzy and prefix search depending on the search term. Here\n * // performing prefix and fuzzy search only on terms longer than 3 characters\n * miniSearch.search('ismael mob', {\n * prefix: term => term.length > 3\n * fuzzy: term => term.length > 3 ? 0.2 : null\n * })\n * ```\n *\n * ### Combine with AND:\n *\n * ```javascript\n * // Combine search terms with AND (to match only documents that contain both\n * // \"motorcycle\" and \"art\")\n * miniSearch.search('motorcycle art', { combineWith: 'AND' })\n * ```\n *\n * ### Filtering results:\n *\n * ```javascript\n * // Filter only results in the 'fiction' category (assuming that 'category'\n * // is a stored field)\n * miniSearch.search('motorcycle art', {\n * filter: (result) => result.category === 'fiction'\n * })\n * ```\n *\n * @param queryString Query string to search for\n * @param options Search options. Each option, if not given, defaults to the corresponding value of `searchOptions` given to the constructor, or to the library default.\n */\n\n\n MiniSearch.prototype.search = function (queryString, searchOptions) {\n var _this = this;\n\n if (searchOptions === void 0) {\n searchOptions = {};\n }\n\n var _a = this._options,\n tokenize = _a.tokenize,\n processTerm = _a.processTerm,\n globalSearchOptions = _a.searchOptions;\n\n var options = _assign(_assign({\n tokenize: tokenize,\n processTerm: processTerm\n }, globalSearchOptions), searchOptions);\n\n var searchTokenize = options.tokenize,\n searchProcessTerm = options.processTerm;\n var terms = searchTokenize(queryString).map(function (term) {\n return searchProcessTerm(term);\n }).filter(function (term) {\n return !!term;\n });\n var queries = terms.map(termToQuery(options));\n var results = queries.map(function (query) {\n return _this.executeQuery(query, options);\n });\n var combinedResults = this.combineResults(results, options.combineWith);\n return Object.entries(combinedResults).reduce(function (results, _a) {\n var _b = __read(_a, 2),\n docId = _b[0],\n _c = _b[1],\n score = _c.score,\n match = _c.match,\n terms = _c.terms;\n\n var result = {\n id: _this._documentIds[docId],\n terms: uniq(terms),\n score: score,\n match: match\n };\n Object.assign(result, _this._storedFields[docId]);\n\n if (options.filter == null || options.filter(result)) {\n results.push(result);\n }\n\n return results;\n }, []).sort(function (_a, _b) {\n var a = _a.score;\n var b = _b.score;\n return a < b ? 1 : -1;\n });\n };\n /**\n * Provide suggestions for the given search query\n *\n * The result is a list of suggested modified search queries, derived from the\n * given search query, each with a relevance score, sorted by descending score.\n *\n * ### Basic usage:\n *\n * ```javascript\n * // Get suggestions for 'neuro':\n * miniSearch.autoSuggest('neuro')\n * // => [ { suggestion: 'neuromancer', terms: [ 'neuromancer' ], score: 0.46240 } ]\n * ```\n *\n * ### Multiple words:\n *\n * ```javascript\n * // Get suggestions for 'zen ar':\n * miniSearch.autoSuggest('zen ar')\n * // => [\n * // { suggestion: 'zen archery art', terms: [ 'zen', 'archery', 'art' ], score: 1.73332 },\n * // { suggestion: 'zen art', terms: [ 'zen', 'art' ], score: 1.21313 }\n * // ]\n * ```\n *\n * ### Fuzzy suggestions:\n *\n * ```javascript\n * // Correct spelling mistakes using fuzzy search:\n * miniSearch.autoSuggest('neromancer', { fuzzy: 0.2 })\n * // => [ { suggestion: 'neuromancer', terms: [ 'neuromancer' ], score: 1.03998 } ]\n * ```\n *\n * ### Filtering:\n *\n * ```javascript\n * // Get suggestions for 'zen ar', but only within the 'fiction' category\n * // (assuming that 'category' is a stored field):\n * miniSearch.autoSuggest('zen ar', {\n * filter: (result) => result.category === 'fiction'\n * })\n * // => [\n * // { suggestion: 'zen archery art', terms: [ 'zen', 'archery', 'art' ], score: 1.73332 },\n * // { suggestion: 'zen art', terms: [ 'zen', 'art' ], score: 1.21313 }\n * // ]\n * ```\n *\n * @param queryString Query string to be expanded into suggestions\n * @param options Search options. The supported options and default values\n * are the same as for the `search` method, except that by default prefix\n * search is performed on the last term in the query.\n * @return A sorted array of suggestions sorted by relevance score.\n */\n\n\n MiniSearch.prototype.autoSuggest = function (queryString, options) {\n if (options === void 0) {\n options = {};\n }\n\n options = _assign(_assign({}, defaultAutoSuggestOptions), options);\n var suggestions = this.search(queryString, options).reduce(function (suggestions, _a) {\n var score = _a.score,\n terms = _a.terms;\n var phrase = terms.join(' ');\n\n if (suggestions[phrase] == null) {\n suggestions[phrase] = {\n score: score,\n terms: terms,\n count: 1\n };\n } else {\n suggestions[phrase].score += score;\n suggestions[phrase].count += 1;\n }\n\n return suggestions;\n }, {});\n return Object.entries(suggestions).map(function (_a) {\n var _b = __read(_a, 2),\n suggestion = _b[0],\n _c = _b[1],\n score = _c.score,\n terms = _c.terms,\n count = _c.count;\n\n return {\n suggestion: suggestion,\n terms: terms,\n score: score / count\n };\n }).sort(function (_a, _b) {\n var a = _a.score;\n var b = _b.score;\n return a < b ? 1 : -1;\n });\n };\n\n Object.defineProperty(MiniSearch.prototype, \"documentCount\", {\n /**\n * Number of documents in the index\n */\n get: function get() {\n return this._documentCount;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Deserializes a JSON index (serialized with `miniSearch.toJSON()`) and\n * instantiates a MiniSearch instance. It should be given the same options\n * originally used when serializing the index.\n *\n * ### Usage:\n *\n * ```javascript\n * // If the index was serialized with:\n * let miniSearch = new MiniSearch({ fields: ['title', 'text'] })\n * miniSearch.addAll(documents)\n *\n * const json = JSON.stringify(miniSearch)\n * // It can later be deserialized like this:\n * miniSearch = MiniSearch.loadJSON(json, { fields: ['title', 'text'] })\n * ```\n *\n * @param json JSON-serialized index\n * @param options configuration options, same as the constructor\n * @return An instance of MiniSearch deserialized from the given JSON.\n */\n\n MiniSearch.loadJSON = function (json, options) {\n if (options == null) {\n throw new Error('MiniSearch: loadJSON should be given the same options used when serializing the index');\n }\n\n return MiniSearch.loadJS(JSON.parse(json), options);\n };\n /**\n * Returns the default value of an option. It will throw an error if no option\n * with the given name exists.\n *\n * @param optionName Name of the option\n * @return The default value of the given option\n *\n * ### Usage:\n *\n * ```javascript\n * // Get default tokenizer\n * MiniSearch.getDefault('tokenize')\n *\n * // Get default term processor\n * MiniSearch.getDefault('processTerm')\n *\n * // Unknown options will throw an error\n * MiniSearch.getDefault('notExisting')\n * // => throws 'MiniSearch: unknown option \"notExisting\"'\n * ```\n */\n\n\n MiniSearch.getDefault = function (optionName) {\n if (defaultOptions.hasOwnProperty(optionName)) {\n return getOwnProperty(defaultOptions, optionName);\n } else {\n throw new Error(\"MiniSearch: unknown option \\\"\" + optionName + \"\\\"\");\n }\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.loadJS = function (js, options) {\n var index = js.index,\n documentCount = js.documentCount,\n nextId = js.nextId,\n documentIds = js.documentIds,\n fieldIds = js.fieldIds,\n fieldLength = js.fieldLength,\n averageFieldLength = js.averageFieldLength,\n storedFields = js.storedFields;\n var miniSearch = new MiniSearch(options);\n miniSearch._index = new SearchableMap(index._tree, index._prefix);\n miniSearch._documentCount = documentCount;\n miniSearch._nextId = nextId;\n miniSearch._documentIds = documentIds;\n miniSearch._fieldIds = fieldIds;\n miniSearch._fieldLength = fieldLength;\n miniSearch._averageFieldLength = averageFieldLength;\n miniSearch._fieldIds = fieldIds;\n miniSearch._storedFields = storedFields || {};\n return miniSearch;\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.executeQuery = function (query, searchOptions) {\n var _this = this;\n\n var options = _assign(_assign({}, this._options.searchOptions), searchOptions);\n\n var boosts = (options.fields || this._options.fields).reduce(function (boosts, field) {\n var _a;\n\n return _assign(_assign({}, boosts), (_a = {}, _a[field] = getOwnProperty(boosts, field) || 1, _a));\n }, options.boost || {});\n\n var boostDocument = options.boostDocument,\n weights = options.weights;\n\n var _a = _assign(_assign({}, defaultSearchOptions.weights), weights),\n fuzzyWeight = _a.fuzzy,\n prefixWeight = _a.prefix;\n\n var exactMatch = this.termResults(query.term, boosts, boostDocument, this._index.get(query.term));\n\n if (!query.fuzzy && !query.prefix) {\n return exactMatch;\n }\n\n var results = [exactMatch];\n\n if (query.prefix) {\n this._index.atPrefix(query.term).forEach(function (term, data) {\n var weightedDistance = 0.3 * (term.length - query.term.length) / term.length;\n results.push(_this.termResults(term, boosts, boostDocument, data, prefixWeight, weightedDistance));\n });\n }\n\n if (query.fuzzy) {\n var fuzzy = query.fuzzy === true ? 0.2 : query.fuzzy;\n var maxDistance = fuzzy < 1 ? Math.round(query.term.length * fuzzy) : fuzzy;\n Object.entries(this._index.fuzzyGet(query.term, maxDistance)).forEach(function (_a) {\n var _b = __read(_a, 2),\n term = _b[0],\n _c = __read(_b[1], 2),\n data = _c[0],\n distance = _c[1];\n\n var weightedDistance = distance / term.length;\n results.push(_this.termResults(term, boosts, boostDocument, data, fuzzyWeight, weightedDistance));\n });\n }\n\n return results.reduce(combinators[OR], {});\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.combineResults = function (results, combineWith) {\n if (combineWith === void 0) {\n combineWith = OR;\n }\n\n if (results.length === 0) {\n return {};\n }\n\n var operator = combineWith.toLowerCase();\n return results.reduce(combinators[operator], null) || {};\n };\n /**\n * Allows serialization of the index to JSON, to possibly store it and later\n * deserialize it with `MiniSearch.loadJSON`.\n *\n * Normally one does not directly call this method, but rather call the\n * standard JavaScript `JSON.stringify()` passing the `MiniSearch` instance,\n * and JavaScript will internally call this method. Upon deserialization, one\n * must pass to `loadJSON` the same options used to create the original\n * instance that was serialized.\n *\n * ### Usage:\n *\n * ```javascript\n * // Serialize the index:\n * let miniSearch = new MiniSearch({ fields: ['title', 'text'] })\n * miniSearch.addAll(documents)\n * const json = JSON.stringify(miniSearch)\n *\n * // Later, to deserialize it:\n * miniSearch = MiniSearch.loadJSON(json, { fields: ['title', 'text'] })\n * ```\n *\n * @return A plain-object serializeable representation of the search index.\n */\n\n\n MiniSearch.prototype.toJSON = function () {\n return {\n index: this._index,\n documentCount: this._documentCount,\n nextId: this._nextId,\n documentIds: this._documentIds,\n fieldIds: this._fieldIds,\n fieldLength: this._fieldLength,\n averageFieldLength: this._averageFieldLength,\n storedFields: this._storedFields\n };\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.termResults = function (term, boosts, boostDocument, indexData, weight, editDistance) {\n var _this = this;\n\n if (editDistance === void 0) {\n editDistance = 0;\n }\n\n if (indexData == null) {\n return {};\n }\n\n return Object.entries(boosts).reduce(function (results, _a) {\n var _b = __read(_a, 2),\n field = _b[0],\n boost = _b[1];\n\n var fieldId = _this._fieldIds[field];\n\n var _c = indexData[fieldId] || {\n ds: {}\n },\n df = _c.df,\n ds = _c.ds;\n\n Object.entries(ds).forEach(function (_a) {\n var _b = __read(_a, 2),\n documentId = _b[0],\n tf = _b[1];\n\n var docBoost = boostDocument ? boostDocument(_this._documentIds[documentId], term) : 1;\n\n if (!docBoost) {\n return;\n }\n\n var normalizedLength = _this._fieldLength[documentId][fieldId] / _this._averageFieldLength[fieldId];\n results[documentId] = results[documentId] || {\n score: 0,\n match: {},\n terms: []\n };\n results[documentId].terms.push(term);\n results[documentId].match[term] = getOwnProperty(results[documentId].match, term) || [];\n results[documentId].score += docBoost * score(tf, df, _this._documentCount, normalizedLength, boost, editDistance);\n results[documentId].match[term].push(field);\n });\n return results;\n }, {});\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.addTerm = function (fieldId, documentId, term) {\n this._index.update(term, function (indexData) {\n var _a;\n\n indexData = indexData || {};\n var fieldIndex = indexData[fieldId] || {\n df: 0,\n ds: {}\n };\n\n if (fieldIndex.ds[documentId] == null) {\n fieldIndex.df += 1;\n }\n\n fieldIndex.ds[documentId] = (fieldIndex.ds[documentId] || 0) + 1;\n return _assign(_assign({}, indexData), (_a = {}, _a[fieldId] = fieldIndex, _a));\n });\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.removeTerm = function (fieldId, documentId, term) {\n var _this = this;\n\n if (!this._index.has(term)) {\n this.warnDocumentChanged(documentId, fieldId, term);\n return;\n }\n\n this._index.update(term, function (indexData) {\n var _a;\n\n var fieldIndex = indexData[fieldId];\n\n if (fieldIndex == null || fieldIndex.ds[documentId] == null) {\n _this.warnDocumentChanged(documentId, fieldId, term);\n\n return indexData;\n }\n\n if (fieldIndex.ds[documentId] <= 1) {\n if (fieldIndex.df <= 1) {\n delete indexData[fieldId];\n return indexData;\n }\n\n fieldIndex.df -= 1;\n }\n\n if (fieldIndex.ds[documentId] <= 1) {\n delete fieldIndex.ds[documentId];\n return indexData;\n }\n\n fieldIndex.ds[documentId] -= 1;\n return _assign(_assign({}, indexData), (_a = {}, _a[fieldId] = fieldIndex, _a));\n });\n\n if (Object.keys(this._index.get(term)).length === 0) {\n this._index[\"delete\"](term);\n }\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.warnDocumentChanged = function (shortDocumentId, fieldId, term) {\n if (console == null || console.warn == null) {\n return;\n }\n\n var fieldName = Object.entries(this._fieldIds).find(function (_a) {\n var _b = __read(_a, 2),\n name = _b[0],\n id = _b[1];\n\n return id === fieldId;\n })[0];\n console.warn(\"MiniSearch: document with ID \" + this._documentIds[shortDocumentId] + \" has changed before removal: term \\\"\" + term + \"\\\" was not present in field \\\"\" + fieldName + \"\\\". Removing a document after it has changed can corrupt the index!\");\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.addDocumentId = function (documentId) {\n var shortDocumentId = this._nextId.toString(36);\n\n this._documentIds[shortDocumentId] = documentId;\n this._documentCount += 1;\n this._nextId += 1;\n return shortDocumentId;\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.addFields = function (fields) {\n var _this = this;\n\n fields.forEach(function (field, i) {\n _this._fieldIds[field] = i;\n });\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.addFieldLength = function (documentId, fieldId, count, length) {\n this._averageFieldLength[fieldId] = this._averageFieldLength[fieldId] || 0;\n var totalLength = this._averageFieldLength[fieldId] * count + length;\n this._fieldLength[documentId] = this._fieldLength[documentId] || {};\n this._fieldLength[documentId][fieldId] = length;\n this._averageFieldLength[fieldId] = totalLength / (count + 1);\n };\n /**\n * @ignore\n */\n\n\n MiniSearch.prototype.saveStoredFields = function (documentId, doc) {\n var _this = this;\n\n var _a = this._options,\n storeFields = _a.storeFields,\n extractField = _a.extractField;\n\n if (storeFields == null || storeFields.length === 0) {\n return;\n }\n\n this._storedFields[documentId] = this._storedFields[documentId] || {};\n storeFields.forEach(function (fieldName) {\n var fieldValue = extractField(doc, fieldName);\n\n if (fieldValue === undefined) {\n return;\n }\n\n _this._storedFields[documentId][fieldName] = fieldValue;\n });\n };\n\n return MiniSearch;\n}();\n\nvar getOwnProperty = function getOwnProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property) ? object[property] : undefined;\n};\n\nvar combinators = (_a = {}, _a[OR] = function (a, b) {\n return Object.entries(b).reduce(function (combined, _a) {\n var _b;\n\n var _c = __read(_a, 2),\n documentId = _c[0],\n _d = _c[1],\n score = _d.score,\n match = _d.match,\n terms = _d.terms;\n\n if (combined[documentId] == null) {\n combined[documentId] = {\n score: score,\n match: match,\n terms: terms\n };\n } else {\n combined[documentId].score += score;\n combined[documentId].score *= 1.5;\n\n (_b = combined[documentId].terms).push.apply(_b, __spread(terms));\n\n Object.assign(combined[documentId].match, match);\n }\n\n return combined;\n }, a || {});\n}, _a[AND] = function (a, b) {\n if (a == null) {\n return b;\n }\n\n return Object.entries(b).reduce(function (combined, _a) {\n var _b = __read(_a, 2),\n documentId = _b[0],\n _c = _b[1],\n score = _c.score,\n match = _c.match,\n terms = _c.terms;\n\n if (a[documentId] === undefined) {\n return combined;\n }\n\n combined[documentId] = combined[documentId] || {};\n combined[documentId].score = a[documentId].score + score;\n combined[documentId].match = _assign(_assign({}, a[documentId].match), match);\n combined[documentId].terms = __spread(a[documentId].terms, terms);\n return combined;\n }, {});\n}, _a);\n\nvar tfIdf = function tfIdf(tf, df, n) {\n return tf * Math.log(n / df);\n};\n\nvar score = function score(termFrequency, documentFrequency, documentCount, normalizedLength, boost, editDistance) {\n var weight = boost / (1 + 0.333 * boost * editDistance);\n return weight * tfIdf(termFrequency, documentFrequency, documentCount) / normalizedLength;\n};\n\nvar termToQuery = function termToQuery(options) {\n return function (term, i, terms) {\n var fuzzy = typeof options.fuzzy === 'function' ? options.fuzzy(term, i, terms) : options.fuzzy || false;\n var prefix = typeof options.prefix === 'function' ? options.prefix(term, i, terms) : options.prefix === true;\n return {\n term: term,\n fuzzy: fuzzy,\n prefix: prefix\n };\n };\n};\n\nvar uniq = function uniq(array) {\n return array.filter(function (element, i, array) {\n return array.indexOf(element) === i;\n });\n};\n\nvar defaultOptions = {\n idField: 'id',\n extractField: function extractField(document, fieldName) {\n return document[fieldName];\n },\n tokenize: function tokenize(text, fieldName) {\n return text.split(SPACE_OR_PUNCTUATION);\n },\n processTerm: function processTerm(term, fieldName) {\n return term.toLowerCase();\n },\n fields: undefined,\n searchOptions: undefined,\n storeFields: []\n};\nvar defaultSearchOptions = {\n combineWith: OR,\n prefix: false,\n fuzzy: false,\n boost: {},\n weights: {\n fuzzy: 0.9,\n prefix: 0.75\n }\n};\nvar defaultAutoSuggestOptions = {\n prefix: function prefix(term, i, terms) {\n return i === terms.length - 1;\n }\n}; // This regular expression matches any Unicode space or punctuation character\n// Adapted from https://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7BZ%7D%5Cp%7BP%7D&abb=on&c=on&esc=on\n\nvar SPACE_OR_PUNCTUATION = /[\\n\\r -#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA0\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u1680\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2000-\\u200A\\u2010-\\u2029\\u202F-\\u2043\\u2045-\\u2051\\u2053-\\u205F\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u3000-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]+/;\nexport default MiniSearch;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;\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 === \"undefined\" ? \"undefined\" : _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 } else {\n jQuery = require('jquery')(root);\n }\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 }\n\n var S2;\n\n (function () {\n if (!S2 || !S2.requirejs) {\n if (!S2) {\n S2 = {};\n } else {\n require = S2;\n }\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\n /*global setTimeout: false */\n\n\n var requirejs, require, define;\n\n (function (undef) {\n var main,\n _req,\n makeMap,\n 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 * 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\n\n function normalize(name, baseName) {\n var nameParts,\n nameSegment,\n mapValue,\n foundMap,\n lastIndex,\n foundI,\n foundStarMap,\n starI,\n i,\n j,\n part,\n normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = map && map['*'] || {}; //Adjust any relative paths.\n\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1; // 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\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n } // Starts with a '.' so need the baseName\n\n\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 } //start trimDots\n\n\n for (i = 0; i < name.length; i++) {\n part = name[i];\n\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 } //end trimDots\n\n\n name = name.join('/');\n } //Apply map config if available.\n\n\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('/')]; //baseName segment has config, find if it has one for\n //this name.\n\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n\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 } //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\n\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); //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\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\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\n return defined[name];\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\n\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n\n return [prefix, name];\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\n\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\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\n\n makeMap = function makeMap(name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n } //Normalize according\n\n\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\n if (prefix) {\n plugin = callDep(prefix);\n }\n } //Using ridiculous property names for space reasons\n\n\n return {\n f: prefix ? prefix + '!' + name : name,\n //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 require(name) {\n return makeRequire(name);\n },\n exports: function exports(name) {\n var e = defined[name];\n\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return defined[name] = {};\n }\n },\n module: function module(name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function main(name, deps, callback, relName) {\n var cjsModule,\n depName,\n ret,\n map,\n i,\n relParts,\n args = [],\n callbackType = _typeof(callback),\n usingExports; //Use name if no relName\n\n\n relName = relName || name;\n relParts = makeRelParts(relName); //Call the callback to define the module, if necessary.\n\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\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f; //Fast path CommonJS standard dependencies.\n\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) || hasProp(waiting, depName) || 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 && 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 req(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 } //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\n\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\n if (config.deps) {\n _req(config.deps, config.callback);\n }\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 } //Support require(['a'])\n\n\n callback = callback || function () {}; //If relName is a function, it is an errback handler,\n //so remove it.\n\n\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n } //Simulate async callback;\n\n\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 * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n\n\n _req.config = function (cfg) {\n return _req(cfg);\n };\n /**\n * Expose module registry for debugging and tooling\n */\n\n\n requirejs._defined = defined;\n\n define = function define(name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n } //This module may not have dependencies\n\n\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\n S2.requirejs = requirejs;\n S2.require = require;\n S2.define = define;\n }\n })();\n\n S2.define(\"almond\", function () {});\n /* global jQuery:false, $:false */\n\n S2.define('jquery', [], function () {\n var _$ = jQuery || $;\n\n if (_$ == null && console && console.error) {\n console.error('Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.');\n }\n\n return _$;\n });\n S2.define('select2/utils', ['jquery'], 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 return ChildClass;\n };\n\n function getMethods(theClass) {\n var proto = theClass.prototype;\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 var argCount = DecoratorClass.prototype.constructor.length;\n var calledConstructor = SuperClass.prototype.constructor;\n\n if (argCount > 0) {\n unshift.call(arguments, SuperClass.prototype.constructor);\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 DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod];\n }\n\n var calledMethod = function calledMethod(methodName) {\n // Stub out the original method if it's not decorating an actual method\n var originalMethod = function originalMethod() {};\n\n if (methodName in DecoratedClass.prototype) {\n originalMethod = DecoratedClass.prototype[methodName];\n }\n\n var decoratedMethod = DecoratorClass.prototype[methodName];\n return function () {\n var unshift = Array.prototype.unshift;\n unshift.call(arguments, originalMethod);\n return decoratedMethod.apply(this, arguments);\n };\n };\n\n for (var d = 0; d < decoratedMethods.length; d++) {\n var decoratedMethod = decoratedMethods[d];\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n }\n\n return DecoratedClass;\n };\n\n var Observable = function Observable() {\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 this.listeners = this.listeners || {}; // Params should always come in as an array\n\n if (params == null) {\n params = [];\n } // If there are no arguments to the event, use a temporary object\n\n\n if (params.length === 0) {\n params.push({});\n } // Set the `_type` of the first object to the event\n\n\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 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]; // Lowercase the first letter\n // By default, dash-separated becomes camelCase\n\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 var $el = $(el);\n var overflowX = el.style.overflowX;\n var overflowY = el.style.overflowY; //Check both x and y declarations\n\n if (overflowX === overflowY && (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 || $el.innerWidth() < el.scrollWidth;\n };\n\n Utils.escapeMarkup = function (markup) {\n var replaceMap = {\n '\\\\': '\',\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n }; // Do not try to escape the markup if it's not a string\n\n if (typeof markup !== 'string') {\n return markup;\n }\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replaceMap[match];\n });\n }; // Append an array of jQuery nodes to a given element.\n\n\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 $.map($nodes, function (node) {\n $jqNodes = $jqNodes.add(node);\n });\n $nodes = $jqNodes;\n }\n\n $element.append($nodes);\n }; // Cache objects in Utils.__cache instead of $.data (see #4346)\n\n\n Utils.__cache = {};\n var id = 0;\n\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 var select2Id = element.getAttribute('data-select2-id');\n\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\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\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\n if (name) {\n if (Utils.__cache[id]) {\n if (Utils.__cache[id][name] != null) {\n return Utils.__cache[id][name];\n }\n\n return $(element).data(name); // Fallback to HTML5 data attribs.\n }\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\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 S2.define('select2/results', ['jquery', './utils'], 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\n if (this.options.get('multiple')) {\n $results.attr('aria-multiselectable', 'true');\n }\n\n this.$results = $results;\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 this.clear();\n this.hideLoading();\n var $message = $('
  • ');\n var message = this.options.get('translations').get(params.message);\n $message.append(escapeMarkup(message(params.args)));\n $message[0].className += ' select2-results__message';\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 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 var $option = this.option(item);\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 return sorter(data);\n };\n\n Results.prototype.highlightFirstItem = function () {\n var $options = this.$results.find('.select2-results__option[aria-selected]');\n var $selected = $options.filter('[aria-selected=true]'); // Check if there are any selected options\n\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 this.data.current(function (selected) {\n var selectedIds = $.map(selected, function (s) {\n return s.id.toString();\n });\n var $options = self.$results.find('.select2-results__option[aria-selected]');\n $options.each(function () {\n var $option = $(this);\n var item = Utils.GetData(this, 'data'); // id needs to be converted to a string when comparing\n\n var id = '' + item.id;\n\n if (item.element != null && item.element.selected || 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 Results.prototype.showLoading = function (params) {\n this.hideLoading();\n var loadingMore = this.options.get('translations').get('searching');\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 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 var attrs = {\n 'role': 'option',\n 'aria-selected': 'false'\n };\n var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\n\n if (data.element != null && matches.call(data.element, ':disabled') || 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 option.setAttribute(attr, val);\n }\n\n if (data.children) {\n var $option = $(option);\n var label = document.createElement('strong');\n label.className = 'select2-results__group';\n var $label = $(label);\n this.template(data, label);\n var $children = [];\n\n for (var c = 0; c < data.children.length; c++) {\n var child = data.children[c];\n var $child = this.option(child);\n $children.push($child);\n }\n\n var $childrenContainer = $('', {\n 'class': 'select2-results__options select2-results__options--nested'\n });\n $childrenContainer.append($children);\n $option.append(label);\n $option.append($childrenContainer);\n } else {\n this.template(data, option);\n }\n\n Utils.StoreData(option, 'data', data);\n return option;\n };\n\n Results.prototype.bind = function (container, $container) {\n var self = this;\n var id = container.id + '-results';\n this.$results.attr('id', id);\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 container.on('results:append', function (params) {\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n }\n });\n container.on('query', function (params) {\n self.hideMessages();\n self.showLoading(params);\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 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 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 self.setClasses();\n self.ensureHighlightVisible();\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 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 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 container.on('results:previous', function () {\n var $highlighted = self.getHighlightedResults();\n var $options = self.$results.find('[aria-selected]');\n var currentIndex = $options.index($highlighted); // If we are already at the top, don't move further\n // If no options, currentIndex will be -1\n\n if (currentIndex <= 0) {\n return;\n }\n\n var nextIndex = currentIndex - 1; // If none are highlighted, highlight the first\n\n if ($highlighted.length === 0) {\n nextIndex = 0;\n }\n\n var $next = $options.eq(nextIndex);\n $next.trigger('mouseenter');\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 container.on('results:next', function () {\n var $highlighted = self.getHighlightedResults();\n var $options = self.$results.find('[aria-selected]');\n var currentIndex = $options.index($highlighted);\n var nextIndex = currentIndex + 1; // If we are at the last option, stay there\n\n if (nextIndex >= $options.length) {\n return;\n }\n\n var $next = $options.eq(nextIndex);\n $next.trigger('mouseenter');\n var currentOffset = self.$results.offset().top + 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 container.on('results:focus', function (params) {\n params.element.addClass('select2-results__option--highlighted');\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 var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\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 e.preventDefault();\n e.stopPropagation();\n } else if (isAtBottom) {\n self.$results.scrollTop(self.$results.get(0).scrollHeight - self.$results.height());\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n this.$results.on('mouseup', '.select2-results__option[aria-selected]', function (evt) {\n var $this = $(this);\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 this.$results.on('mouseenter', '.select2-results__option[aria-selected]', function (evt) {\n var data = Utils.GetData(this, 'data');\n self.getHighlightedResults().removeClass('select2-results__option--highlighted');\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.find('.select2-results__option--highlighted');\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 var currentIndex = $options.index($highlighted);\n var currentOffset = this.$results.offset().top;\n var nextTop = $highlighted.offset().top;\n var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\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 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 S2.define('select2/keys', [], 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 return KEYS;\n });\n S2.define('select2/selection/base', ['jquery', '../utils', '../keys'], 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 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 this.$selection = $selection;\n return $selection;\n };\n\n BaseSelection.prototype.bind = function (container, $container) {\n var self = this;\n var resultsId = container.id + '-results';\n this.container = container;\n this.$selection.on('focus', function (evt) {\n self.trigger('focus', evt);\n });\n this.$selection.on('blur', function (evt) {\n self._handleBlur(evt);\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 container.on('results:focus', function (params) {\n self.$selection.attr('aria-activedescendant', params.data._resultId);\n });\n container.on('selection:update', function (params) {\n self.update(params.data);\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 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 self.$selection.trigger('focus');\n\n self._detachCloseHandler(container);\n });\n container.on('enable', function () {\n self.$selection.attr('tabindex', self._tabindex);\n self.$selection.attr('aria-disabled', 'false');\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; // This needs to be delayed as the active element is the body when the tab\n // key is pressed, possibly along with others.\n\n window.setTimeout(function () {\n // Don't trigger `blur` if the focus is still in the selection\n if (document.activeElement == self.$selection[0] || $.contains(self.$selection[0], document.activeElement)) {\n return;\n }\n\n self.trigger('blur', evt);\n }, 1);\n };\n\n BaseSelection.prototype._attachCloseHandler = function (container) {\n $(document.body).on('mousedown.select2.' + container.id, function (e) {\n var $target = $(e.target);\n var $select = $target.closest('.select2');\n var $all = $('.select2.select2-container--open');\n $all.each(function () {\n if (this == $select[0]) {\n return;\n }\n\n var $element = Utils.GetData(this, 'element');\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 * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n\n\n BaseSelection.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n\n\n BaseSelection.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n return BaseSelection;\n });\n S2.define('select2/selection/single', ['jquery', './base', '../utils', '../keys'], 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 $selection.html('' + '' + '' + '');\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 this.$selection.find('.select2-selection__rendered').attr('id', id).attr('role', 'textbox').attr('aria-readonly', 'true');\n this.$selection.attr('aria-labelledby', id);\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 this.$selection.on('focus', function (evt) {// User focuses on the container\n });\n this.$selection.on('blur', function (evt) {// User exits the container\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 return escapeMarkup(template(data, container));\n };\n\n SingleSelection.prototype.selectionContainer = function () {\n return $('');\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 var $rendered = this.$selection.find('.select2-selection__rendered');\n var formatted = this.display(selection, $rendered);\n $rendered.empty().append(formatted);\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 S2.define('select2/selection/multiple', ['jquery', './base', '../utils'], 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 $selection.html('');\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 this.$selection.on('click', '.select2-selection__choice__remove', function (evt) {\n // Ignore the event if it is disabled\n if (self.isDisabled()) {\n return;\n }\n\n var $remove = $(this);\n var $selection = $remove.parent();\n var data = Utils.GetData($selection[0], 'data');\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\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 return escapeMarkup(template(data, container));\n };\n\n MultipleSelection.prototype.selectionContainer = function () {\n var $container = $('
  • ' + '' + '×' + '' + '
  • ');\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 var $selection = this.selectionContainer();\n var formatted = this.display(selection, $selection);\n $selection.append(formatted);\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 $selections.push($selection);\n }\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n Utils.appendMany($rendered, $selections);\n };\n\n return MultipleSelection;\n });\n S2.define('select2/selection/placeholder', ['../utils'], function (Utils) {\n function Placeholder(decorated, $element, options) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\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 $placeholder.html(this.display(placeholder));\n $placeholder.addClass('select2-selection__placeholder').removeClass('select2-selection__choice');\n return $placeholder;\n };\n\n Placeholder.prototype.update = function (decorated, data) {\n var singlePlaceholder = data.length == 1 && data[0].id != this.placeholder.id;\n var multipleSelections = data.length > 1;\n\n if (multipleSelections || singlePlaceholder) {\n return decorated.call(this, data);\n }\n\n this.clear();\n var $placeholder = this.createPlaceholder(this.placeholder);\n this.$selection.find('.select2-selection__rendered').append($placeholder);\n };\n\n return Placeholder;\n });\n S2.define('select2/selection/allowClear', ['jquery', '../keys', '../utils'], function ($, KEYS, Utils) {\n function AllowClear() {}\n\n AllowClear.prototype.bind = function (decorated, container, $container) {\n var self = this;\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('Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.');\n }\n }\n\n this.$selection.on('mousedown', '.select2-selection__clear', function (evt) {\n self._handleClear(evt);\n });\n container.on('keypress', function (evt) {\n self._handleKeyboardClear(evt, container);\n });\n };\n\n AllowClear.prototype._handleClear = function (_, evt) {\n // Ignore the event if it is disabled\n if (this.isDisabled()) {\n return;\n }\n\n var $clear = this.$selection.find('.select2-selection__clear'); // Ignore the event if nothing has been selected\n\n if ($clear.length === 0) {\n return;\n }\n\n evt.stopPropagation();\n var data = Utils.GetData($clear[0], 'data');\n var previousVal = this.$element.val();\n this.$element.val(this.placeholder.id);\n var unselectData = {\n data: data\n };\n this.trigger('clear', unselectData);\n\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 }; // Trigger the `unselect` event, so people can prevent it from being\n // cleared.\n\n this.trigger('unselect', unselectData); // If the event was prevented, don't clear it out.\n\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n }\n\n this.$element.trigger('input').trigger('change');\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 || data.length === 0) {\n return;\n }\n\n var removeAll = this.options.get('translations').get('removeAllItems');\n var $remove = $('' + '×' + '');\n Utils.StoreData($remove[0], 'data', data);\n this.$selection.find('.select2-selection__rendered').prepend($remove);\n };\n\n return AllowClear;\n });\n S2.define('select2/selection/search', ['jquery', '../utils', '../keys'], 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 this.$searchContainer = $search;\n this.$search = $search.find('input');\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 var resultsId = container.id + '-results';\n decorated.call(this, container, $container);\n container.on('open', function () {\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\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 container.on('enable', function () {\n self.$search.prop('disabled', false);\n\n self._transferTabIndex();\n });\n container.on('disable', function () {\n self.$search.prop('disabled', true);\n });\n container.on('focus', function (evt) {\n self.$search.trigger('focus');\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 this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n self.trigger('focus', evt);\n });\n this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n self._handleBlur(evt);\n });\n this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n evt.stopPropagation();\n self.trigger('keypress', evt);\n self._keyUpPrevented = evt.isDefaultPrevented();\n var key = evt.which;\n\n if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n var $previousChoice = self.$searchContainer.prev('.select2-selection__choice');\n\n if ($previousChoice.length > 0) {\n var item = Utils.GetData($previousChoice[0], 'data');\n self.searchRemoveChoice(item);\n evt.preventDefault();\n }\n }\n });\n this.$selection.on('click', '.select2-search--inline', function (evt) {\n if (self.$search.val()) {\n evt.stopPropagation();\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\n var msie = document.documentMode;\n var disableInputEvents = msie && msie <= 11; // 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\n this.$selection.on('input.searchcheck', '.select2-search--inline', 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 } // Unbind the duplicated `keyup` event\n\n\n self.$selection.off('keyup.search');\n });\n this.$selection.on('keyup.search input.search', '.select2-search--inline', 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; // We can freely ignore events from modifier keys\n\n if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n return;\n } // Tabbing will be handled during the `keydown` phase\n\n\n if (key == KEYS.TAB) {\n return;\n }\n\n self.handleSearch(evt);\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\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 this.$search.attr('placeholder', '');\n decorated.call(this, data);\n this.$selection.find('.select2-selection__rendered').append(this.$searchContainer);\n this.resizeSearch();\n\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 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 this.$search.val(item.text);\n this.handleSearch();\n };\n\n Search.prototype.resizeSearch = function () {\n this.$search.css('width', '25px');\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 width = minimumWidth * 0.75 + 'em';\n }\n\n this.$search.css('width', width);\n };\n\n return Search;\n });\n S2.define('select2/selection/eventRelay', ['jquery'], function ($) {\n function EventRelay() {}\n\n EventRelay.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var relayEvents = ['open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing'];\n var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting', 'clearing'];\n decorated.call(this, container, $container);\n container.on('*', function (name, params) {\n // Ignore events that should not be relayed\n if ($.inArray(name, relayEvents) === -1) {\n return;\n } // The parameters should always be an object\n\n\n params = params || {}; // Generate the jQuery event for the Select2 event\n\n var evt = $.Event('select2:' + name, {\n params: params\n });\n self.$element.trigger(evt); // Only handle preventable events if it was one\n\n if ($.inArray(name, preventableEvents) === -1) {\n return;\n }\n\n params.prevented = evt.isDefaultPrevented();\n });\n };\n\n return EventRelay;\n });\n S2.define('select2/translation', ['jquery', 'require'], 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 }; // Static functions\n\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 S2.define('select2/diacritics', [], function () {\n var diacritics = {\n \"\\u24B6\": 'A',\n \"\\uFF21\": 'A',\n \"\\xC0\": 'A',\n \"\\xC1\": 'A',\n \"\\xC2\": 'A',\n \"\\u1EA6\": 'A',\n \"\\u1EA4\": 'A',\n \"\\u1EAA\": 'A',\n \"\\u1EA8\": 'A',\n \"\\xC3\": '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 \"\\xC4\": 'A',\n \"\\u01DE\": 'A',\n \"\\u1EA2\": 'A',\n \"\\xC5\": '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 \"\\xC6\": '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 \"\\xC7\": '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 \"\\xC8\": 'E',\n \"\\xC9\": 'E',\n \"\\xCA\": '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 \"\\xCB\": '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 \"\\xCC\": 'I',\n \"\\xCD\": 'I',\n \"\\xCE\": 'I',\n \"\\u0128\": 'I',\n \"\\u012A\": 'I',\n \"\\u012C\": 'I',\n \"\\u0130\": 'I',\n \"\\xCF\": '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 \"\\xD1\": '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 \"\\xD2\": 'O',\n \"\\xD3\": 'O',\n \"\\xD4\": 'O',\n \"\\u1ED2\": 'O',\n \"\\u1ED0\": 'O',\n \"\\u1ED6\": 'O',\n \"\\u1ED4\": 'O',\n \"\\xD5\": '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 \"\\xD6\": '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 \"\\xD8\": '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 \"\\xD9\": 'U',\n \"\\xDA\": 'U',\n \"\\xDB\": 'U',\n \"\\u0168\": 'U',\n \"\\u1E78\": 'U',\n \"\\u016A\": 'U',\n \"\\u1E7A\": 'U',\n \"\\u016C\": 'U',\n \"\\xDC\": '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 \"\\xDD\": '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 \"\\xE0\": 'a',\n \"\\xE1\": 'a',\n \"\\xE2\": 'a',\n \"\\u1EA7\": 'a',\n \"\\u1EA5\": 'a',\n \"\\u1EAB\": 'a',\n \"\\u1EA9\": 'a',\n \"\\xE3\": '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 \"\\xE4\": 'a',\n \"\\u01DF\": 'a',\n \"\\u1EA3\": 'a',\n \"\\xE5\": '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 \"\\xE6\": '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 \"\\xE7\": '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 \"\\xE8\": 'e',\n \"\\xE9\": 'e',\n \"\\xEA\": '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 \"\\xEB\": '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 \"\\xEC\": 'i',\n \"\\xED\": 'i',\n \"\\xEE\": 'i',\n \"\\u0129\": 'i',\n \"\\u012B\": 'i',\n \"\\u012D\": 'i',\n \"\\xEF\": '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 \"\\xF1\": '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 \"\\xF2\": 'o',\n \"\\xF3\": 'o',\n \"\\xF4\": 'o',\n \"\\u1ED3\": 'o',\n \"\\u1ED1\": 'o',\n \"\\u1ED7\": 'o',\n \"\\u1ED5\": 'o',\n \"\\xF5\": '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 \"\\xF6\": '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 \"\\xF8\": '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 \"\\xDF\": '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 \"\\xF9\": 'u',\n \"\\xFA\": 'u',\n \"\\xFB\": 'u',\n \"\\u0169\": 'u',\n \"\\u1E79\": 'u',\n \"\\u016B\": 'u',\n \"\\u1E7B\": 'u',\n \"\\u016D\": 'u',\n \"\\xFC\": '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 \"\\xFD\": 'y',\n \"\\u0177\": 'y',\n \"\\u1EF9\": 'y',\n \"\\u0233\": 'y',\n \"\\u1E8F\": 'y',\n \"\\xFF\": '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 return diacritics;\n });\n S2.define('select2/data/base', ['../utils'], 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) {// Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.destroy = function () {// Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.generateResultId = function (container, data) {\n var id = container.id + '-result-';\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\n return id;\n };\n\n return BaseAdapter;\n });\n S2.define('select2/data/select', ['./base', '../utils', 'jquery'], 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 this.$element.find(':selected').each(function () {\n var $option = $(this);\n var option = self.item($option);\n data.push(option);\n });\n callback(data);\n };\n\n SelectAdapter.prototype.select = function (data) {\n var self = this;\n data.selected = true; // If data.element is a DOM node, use it instead\n\n if ($(data.element).is('option')) {\n data.element.selected = true;\n this.$element.trigger('input').trigger('change');\n return;\n }\n\n if (this.$element.prop('multiple')) {\n this.current(function (currentData) {\n var val = [];\n data = [data];\n data.push.apply(data, currentData);\n\n for (var d = 0; d < data.length; d++) {\n var id = data[d].id;\n\n if ($.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n self.$element.trigger('input').trigger('change');\n });\n } else {\n var val = data.id;\n this.$element.val(val);\n this.$element.trigger('input').trigger('change');\n }\n };\n\n SelectAdapter.prototype.unselect = function (data) {\n var self = this;\n\n if (!this.$element.prop('multiple')) {\n return;\n }\n\n data.selected = false;\n\n if ($(data.element).is('option')) {\n data.element.selected = false;\n this.$element.trigger('input').trigger('change');\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 self.$element.trigger('input').trigger('change');\n });\n };\n\n SelectAdapter.prototype.bind = function (container, $container) {\n var self = this;\n this.container = container;\n container.on('select', function (params) {\n self.select(params.data);\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 var $options = this.$element.children();\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 var matches = self.matches(params, option);\n\n if (matches !== null) {\n data.push(matches);\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\n normalizedData.element = option; // Override the option's data with the combined data\n\n Utils.StoreData(option, 'data', normalizedData);\n return $option;\n };\n\n SelectAdapter.prototype.item = function ($option) {\n var data = {};\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 var $children = $option.children('option');\n var children = [];\n\n for (var c = 0; c < $children.length; c++) {\n var $child = $($children[c]);\n var child = this.item($child);\n children.push(child);\n }\n\n data.children = children;\n }\n\n data = this._normalizeItem(data);\n data.element = $option[0];\n Utils.StoreData($option[0], 'data', data);\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 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 return matcher(params, data);\n };\n\n return SelectAdapter;\n });\n S2.define('select2/data/array', ['./select', '../utils', 'jquery'], 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 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 var $existing = this.$element.find('option');\n var existingIds = $existing.map(function () {\n return self.item($(this)).id;\n }).get();\n var $options = []; // Filter out all items except for the one passed in the argument\n\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]); // Skip items which were pre-loaded, only merge the data\n\n\n if ($.inArray(item.id, existingIds) >= 0) {\n var $existingOption = $existing.filter(onlyItem(item));\n var existingData = this.item($existingOption);\n var newData = $.extend(true, {}, item, existingData);\n var $newOption = this.option(newData);\n $existingOption.replaceWith($newOption);\n continue;\n }\n\n var $option = this.option(item);\n\n if (item.children) {\n var $children = this.convertToOptions(item.children);\n Utils.appendMany($option, $children);\n }\n\n $options.push($option);\n }\n\n return $options;\n };\n\n return ArrayAdapter;\n });\n S2.define('select2/data/ajax', ['./array', '../utils', 'jquery'], 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 data(params) {\n return $.extend({}, params, {\n q: params.term\n });\n },\n transport: function transport(params, success, failure) {\n var $request = $.ajax(params);\n $request.then(success);\n $request.fail(failure);\n return $request;\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('Select2: The AJAX results did not return an array in the ' + '`results` key of the response.');\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 && ($request.status === 0 || $request.status === '0')) {\n return;\n }\n\n self.trigger('results:message', {\n message: 'errorLoading'\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 S2.define('select2/data/tags', ['jquery'], function ($) {\n function Tags(decorated, $element, options) {\n var tags = options.get('tags');\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\n var item = this._normalizeItem(tag);\n\n var $option = this.option(item);\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 var checkChildren = option.children != null && !wrapper({\n results: option.children\n }, true);\n var optionText = (option.text || '').toUpperCase();\n var paramsTerm = (params.term || '').toUpperCase();\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 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 self.addOptions([$option]);\n self.insertTag(data, tag);\n }\n\n obj.results = data;\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 $options.each(function () {\n if (this.selected) {\n return;\n }\n\n $(this).remove();\n });\n };\n\n return Tags;\n });\n S2.define('select2/data/tokenizer', ['jquery'], 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 this.$search = container.dropdown.$search || container.selection.$search || $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); // Check if the data object already exists as a tag\n // Select it if it doesn't\n\n\n var $existingOptions = self.$element.find('option').filter(function () {\n return $(this).val() === item.id;\n }); // If an existing option wasn't found for it, create the option\n\n if (!$existingOptions.length) {\n var $option = self.option(item);\n $option.attr('data-select2-tag', true);\n\n self._removeOldTags();\n\n self.addOptions([$option]);\n } // Select the item, now that we know there is an option for it\n\n\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 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 continue;\n }\n\n var part = term.substr(0, i);\n var partParams = $.extend({}, params, {\n term: part\n });\n var data = createTag(partParams);\n\n if (data == null) {\n i++;\n continue;\n }\n\n callback(data); // Reset the term to not include the tokenized portion\n\n term = term.substr(i + 1) || '';\n i = 0;\n }\n\n return {\n term: term\n };\n };\n\n return Tokenizer;\n });\n S2.define('select2/data/minimumInputLength', [], function () {\n function MinimumInputLength(decorated, $e, options) {\n this.minimumInputLength = options.get('minimumInputLength');\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 return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MinimumInputLength;\n });\n S2.define('select2/data/maximumInputLength', [], function () {\n function MaximumInputLength(decorated, $e, options) {\n this.maximumInputLength = options.get('maximumInputLength');\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 && 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 return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MaximumInputLength;\n });\n S2.define('select2/data/maximumSelectionLength', [], function () {\n function MaximumSelectionLength(decorated, $e, options) {\n this.maximumSelectionLength = options.get('maximumSelectionLength');\n decorated.call(this, $e, options);\n }\n\n MaximumSelectionLength.prototype.bind = function (decorated, container, $container) {\n var self = this;\n decorated.call(this, container, $container);\n container.on('select', function () {\n self._checkIfMaximumSelected();\n });\n };\n\n MaximumSelectionLength.prototype.query = 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 = function (_, successCallback) {\n var self = this;\n this.current(function (currentData) {\n var count = currentData != null ? currentData.length : 0;\n\n if (self.maximumSelectionLength > 0 && 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 S2.define('select2/dropdown', ['jquery', './utils'], 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 $dropdown.attr('dir', this.options.get('dir'));\n this.$dropdown = $dropdown;\n return $dropdown;\n };\n\n Dropdown.prototype.bind = function () {// Should be implemented in subclasses\n };\n\n Dropdown.prototype.position = function ($dropdown, $container) {// 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 S2.define('select2/dropdown/search', ['jquery', '../utils'], function ($, Utils) {\n function Search() {}\n\n Search.prototype.render = function (decorated) {\n var $rendered = decorated.call(this);\n var $search = $('' + '' + '');\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n $rendered.prepend($search);\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var resultsId = container.id + '-results';\n decorated.call(this, container, $container);\n this.$search.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n self._keyUpPrevented = evt.isDefaultPrevented();\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\n this.$search.on('input', function (evt) {\n // Unbind the duplicated `keyup` event\n $(this).off('keyup');\n });\n this.$search.on('keyup input', function (evt) {\n self.handleSearch(evt);\n });\n container.on('open', function () {\n self.$search.attr('tabindex', 0);\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\n window.setTimeout(function () {\n self.$search.trigger('focus');\n }, 0);\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 self.$search.val('');\n self.$search.trigger('blur');\n });\n container.on('focus', function () {\n if (!container.isOpen()) {\n self.$search.trigger('focus');\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 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 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 S2.define('select2/dropdown/hidePlaceholder', [], function () {\n function HidePlaceholder(decorated, $element, options, dataAdapter) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n decorated.call(this, $element, options, dataAdapter);\n }\n\n HidePlaceholder.prototype.append = function (decorated, data) {\n data.results = this.removePlaceholder(data.results);\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 S2.define('select2/dropdown/infiniteScroll', ['jquery'], function ($) {\n function InfiniteScroll(decorated, $element, options, dataAdapter) {\n this.lastParams = {};\n decorated.call(this, $element, options, dataAdapter);\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 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 decorated.call(this, container, $container);\n container.on('query', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n container.on('query:append', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n };\n\n InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n var isLoadMoreVisible = $.contains(document.documentElement, this.$loadingMore[0]);\n\n if (this.loading || !isLoadMoreVisible) {\n return;\n }\n\n var currentOffset = this.$results.offset().top + this.$results.outerHeight(false);\n var loadingMoreOffset = this.$loadingMore.offset().top + 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 var params = $.extend({}, {\n page: 1\n }, this.lastParams);\n params.page++;\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 var message = this.options.get('translations').get('loadingMore');\n $option.html(message(this.lastParams));\n return $option;\n };\n\n return InfiniteScroll;\n });\n S2.define('select2/dropdown/attachBody', ['jquery', '../utils'], function ($, Utils) {\n function AttachBody(decorated, $element, options) {\n this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n decorated.call(this, $element, options);\n }\n\n AttachBody.prototype.bind = function (decorated, container, $container) {\n var self = this;\n decorated.call(this, container, $container);\n container.on('open', function () {\n self._showDropdown();\n\n self._attachPositioningHandler(container); // Must bind after the results handlers to ensure correct sizing\n\n\n self._bindContainerResultHandlers(container);\n });\n container.on('close', function () {\n self._hideDropdown();\n\n self._detachPositioningHandler(container);\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 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 $dropdown.removeClass('select2');\n $dropdown.addClass('select2-container--open');\n $dropdown.css({\n position: 'absolute',\n top: -999999\n });\n this.$container = $container;\n };\n\n AttachBody.prototype.render = function (decorated) {\n var $container = $('');\n var $dropdown = decorated.call(this);\n $container.append($dropdown);\n this.$dropdownContainer = $container;\n return $container;\n };\n\n AttachBody.prototype._hideDropdown = function (decorated) {\n this.$dropdownContainer.detach();\n };\n\n AttachBody.prototype._bindContainerResultHandlers = function (decorated, container) {\n // These should only be bound once\n if (this._containerResultsHandlersBound) {\n return;\n }\n\n var self = this;\n container.on('results:all', function () {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n container.on('results:append', function () {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n container.on('results:message', function () {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n container.on('select', function () {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n container.on('unselect', function () {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n this._containerResultsHandlersBound = true;\n };\n\n AttachBody.prototype._attachPositioningHandler = function (decorated, container) {\n var self = this;\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\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 $watchers.on(scrollEvent, function (ev) {\n var position = Utils.GetData(this, 'select2-scroll-position');\n $(this).scrollTop(position.y);\n });\n $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) {\n self._positionDropdown();\n\n self._resizeDropdown();\n });\n };\n\n AttachBody.prototype._detachPositioningHandler = 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 var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.off(scrollEvent);\n $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n };\n\n AttachBody.prototype._positionDropdown = function () {\n var $window = $(window);\n var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n var newDirection = null;\n var offset = this.$container.offset();\n offset.bottom = offset.top + this.$container.outerHeight(false);\n var container = {\n height: this.$container.outerHeight(false)\n };\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n var enoughRoomAbove = viewport.top < offset.top - dropdown.height;\n var enoughRoomBelow = viewport.bottom > offset.bottom + dropdown.height;\n var css = {\n left: offset.left,\n top: container.bottom\n }; // Determine what the parent element is to use for calculating the offset\n\n var $offsetParent = this.$dropdownParent; // For statically positioned elements, we need to get the element\n // that is determining the offset\n\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]) || $offsetParent[0].isConnected) {\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' || isCurrentlyAbove && newDirection !== 'below') {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown.removeClass('select2-dropdown--below select2-dropdown--above').addClass('select2-dropdown--' + newDirection);\n this.$container.removeClass('select2-container--below select2-container--above').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\n this._resizeDropdown();\n };\n\n return AttachBody;\n });\n S2.define('select2/dropdown/minimumResultsForSearch', [], 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 S2.define('select2/dropdown/selectOnClose', ['../utils'], function (Utils) {\n function SelectOnClose() {}\n\n SelectOnClose.prototype.bind = function (decorated, container, $container) {\n var self = this;\n decorated.call(this, container, $container);\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; // Don't select an item if the close event was triggered from a select or\n // unselect event\n\n if (event._type === 'select' || event._type === 'unselect') {\n return;\n }\n }\n\n var $highlightedResults = this.getHighlightedResults(); // Only select highlighted results\n\n if ($highlightedResults.length < 1) {\n return;\n }\n\n var data = Utils.GetData($highlightedResults[0], 'data'); // Don't re-select already selected resulte\n\n if (data.element != null && data.element.selected || data.element == null && data.selected) {\n return;\n }\n\n this.trigger('select', {\n data: data\n });\n };\n\n return SelectOnClose;\n });\n S2.define('select2/dropdown/closeOnSelect', [], function () {\n function CloseOnSelect() {}\n\n CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n var self = this;\n decorated.call(this, container, $container);\n container.on('select', function (evt) {\n self._selectTriggered(evt);\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; // Don't close if the control key is being held\n\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 S2.define('select2/i18n/en', [], function () {\n // English\n return {\n errorLoading: function errorLoading() {\n return 'The results could not be loaded.';\n },\n inputTooLong: function inputTooLong(args) {\n var overChars = args.input.length - args.maximum;\n var message = 'Please delete ' + overChars + ' character';\n\n if (overChars != 1) {\n message += 's';\n }\n\n return message;\n },\n inputTooShort: function inputTooShort(args) {\n var remainingChars = args.minimum - args.input.length;\n var message = 'Please enter ' + remainingChars + ' or more characters';\n return message;\n },\n loadingMore: function loadingMore() {\n return 'Loading more results…';\n },\n maximumSelected: function maximumSelected(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 noResults() {\n return 'No results found';\n },\n searching: function searching() {\n return 'Searching…';\n },\n removeAllItems: function removeAllItems() {\n return 'Remove all items';\n }\n };\n });\n S2.define('select2/defaults', ['jquery', 'require', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './i18n/en'], function ($, require, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, 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(options.dataAdapter, MinimumInputLength);\n }\n\n if (options.maximumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumInputLength);\n }\n\n if (options.maximumSelectionLength > 0) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumSelectionLength);\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(options.dataAdapter, Tokenizer);\n }\n\n if (options.query != null) {\n var Query = require(options.amdBase + 'compat/query');\n\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Query);\n }\n\n if (options.initSelection != null) {\n var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n options.dataAdapter = Utils.Decorate(options.dataAdapter, InitSelection);\n }\n }\n\n if (options.resultsAdapter == null) {\n options.resultsAdapter = ResultsList;\n\n if (options.ajax != null) {\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, InfiniteScroll);\n }\n\n if (options.placeholder != null) {\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, HidePlaceholder);\n }\n\n if (options.selectOnClose) {\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, SelectOnClose);\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 options.dropdownAdapter = SearchableDropdown;\n }\n\n if (options.minimumResultsForSearch !== 0) {\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, MinimumResultsForSearch);\n }\n\n if (options.closeOnSelect) {\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, CloseOnSelect);\n }\n\n if (options.dropdownCssClass != null || options.dropdownCss != null || options.adaptDropdownCssClass != null) {\n var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownCSS);\n }\n\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, AttachBody);\n }\n\n if (options.selectionAdapter == null) {\n if (options.multiple) {\n options.selectionAdapter = MultipleSelection;\n } else {\n options.selectionAdapter = SingleSelection;\n } // Add the placeholder mixin if a placeholder was specified\n\n\n if (options.placeholder != null) {\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, Placeholder);\n }\n\n if (options.allowClear) {\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, AllowClear);\n }\n\n if (options.multiple) {\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, SelectionSearch);\n }\n\n if (options.containerCssClass != null || options.containerCss != null || options.adaptContainerCssClass != null) {\n var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, ContainerCSS);\n }\n\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, EventRelay);\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\n\n options.language = this._resolveLanguage(options.language); // Always fall back to English since it will always be complete\n\n options.language.push('en');\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 options.translations = this._processTranslations(options.language, options.debug);\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 } // Do a recursive check for options with children\n\n\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); // Check each child of the option\n\n for (var c = data.children.length - 1; c >= 0; c--) {\n var child = data.children[c];\n var matches = matcher(params, child); // If there wasn't a match, remove the object in the array\n\n if (matches == null) {\n match.children.splice(c, 1);\n }\n } // If any children matched, return the new object\n\n\n if (match.children.length > 0) {\n return match;\n } // If there were no matching children, check just the plain object\n\n\n return matcher(params, match);\n }\n\n var original = stripDiacritics(data.text).toUpperCase();\n var term = stripDiacritics(params.term).toUpperCase(); // Check if the text contains the term\n\n if (original.indexOf(term) > -1) {\n return data;\n } // If it doesn't contain the term, don't return anything\n\n\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 sorter(data) {\n return data;\n },\n templateResult: function templateResult(result) {\n return result.text;\n },\n templateSelection: function templateSelection(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 var languages = Array.prototype.concat.call(this._resolveLanguage(elementLanguage), this._resolveLanguage(optionLanguage), this._resolveLanguage(defaultLanguage), this._resolveLanguage(parentLanguage));\n options.language = languages;\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 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 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('Select2: The language file for \"' + language + '\" could ' + 'not be automatically loaded. A fallback will be used instead.');\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 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 return defaults;\n });\n S2.define('select2/options', ['require', 'jquery', './defaults', './utils'], 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(this.options.dataAdapter, InputCompat);\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('Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' + 'removed in future versions of Select2.');\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('Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.');\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 } // Pre-load all of the attributes which are prefixed with `data-`\n\n\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); // Get the data contents from the consistent source\n // This is more than likely the jQuery data helper\n\n var dataValue = Utils.GetData($e[0], dataName); // camelCase the attribute name to match the spec\n\n var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); // Store the data attribute contents into the dataset since\n\n dataset[camelDataName] = dataValue;\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\n\n if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n dataset = $.extend(true, {}, $e[0].dataset, dataset);\n } // Prefer our internal data cache if it exists\n\n\n var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\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 S2.define('select2/core', ['jquery', './options', './utils', './keys'], function ($, Options, Utils, KEYS) {\n var Select2 = function Select2($element, options) {\n if (Utils.GetData($element[0], 'select2') != null) {\n Utils.GetData($element[0], 'select2').destroy();\n }\n\n this.$element = $element;\n this.id = this._generateId($element);\n options = options || {};\n this.options = new Options(options, $element);\n\n Select2.__super__.constructor.call(this); // Set up the tabindex\n\n\n var tabindex = $element.attr('tabindex') || 0;\n Utils.StoreData($element[0], 'old-tabindex', tabindex);\n $element.attr('tabindex', '-1'); // Set up containers and adapters\n\n var DataAdapter = this.options.get('dataAdapter');\n this.dataAdapter = new DataAdapter($element, this.options);\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 this.selection.position(this.$selection, $container);\n var DropdownAdapter = this.options.get('dropdownAdapter');\n this.dropdown = new DropdownAdapter($element, this.options);\n this.$dropdown = this.dropdown.render();\n this.dropdown.position(this.$dropdown, $container);\n var ResultsAdapter = this.options.get('resultsAdapter');\n this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n this.$results = this.results.render();\n this.results.position(this.$results, this.$dropdown); // Bind events\n\n var self = this; // Bind the container to all of the adapters\n\n this._bindAdapters(); // Register any DOM event handlers\n\n\n this._registerDomEvents(); // Register any internal event handlers\n\n\n this._registerDataEvents();\n\n this._registerSelectionEvents();\n\n this._registerDropdownEvents();\n\n this._registerResultsEvents();\n\n this._registerEvents(); // Set the initial state\n\n\n this.dataAdapter.current(function (initialData) {\n self.trigger('selection:update', {\n data: initialData\n });\n }); // Hide the original select\n\n $element.addClass('select2-hidden-accessible');\n $element.attr('aria-hidden', 'true'); // Synchronize any monitored attributes\n\n this._syncAttributes();\n\n Utils.StoreData($element[0], 'select2', this); // Ensure backwards compatibility with $element.data('select2').\n\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 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 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 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 this.$element.on('change.select2', function () {\n self.dataAdapter.current(function (data) {\n self.trigger('selection:update', {\n data: data\n });\n });\n });\n this.$element.on('focus.select2', function (evt) {\n self.trigger('focus', evt);\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 || window.WebKitMutationObserver || window.MozMutationObserver;\n\n if (observer != null) {\n this._observer = new observer(function (mutations) {\n self._syncA();\n\n self._syncS(null, mutations);\n });\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('DOMAttrModified', self._syncA, false);\n this.$element[0].addEventListener('DOMNodeInserted', self._syncS, false);\n this.$element[0].addEventListener('DOMNodeRemoved', self._syncS, false);\n }\n };\n\n Select2.prototype._registerDataEvents = function () {\n var self = this;\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 this.selection.on('toggle', function () {\n self.toggleDropdown();\n });\n this.selection.on('focus', function (params) {\n self.focus(params);\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 this.dropdown.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerResultsEvents = function () {\n var self = this;\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 this.on('open', function () {\n self.$container.addClass('select2-container--open');\n });\n this.on('close', function () {\n self.$container.removeClass('select2-container--open');\n });\n this.on('enable', function () {\n self.$container.removeClass('select2-container--disabled');\n });\n this.on('disable', function () {\n self.$container.addClass('select2-container--disabled');\n });\n this.on('blur', function () {\n self.$container.removeClass('select2-container--focus');\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 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 this.on('keypress', function (evt) {\n var key = evt.which;\n\n if (self.isOpen()) {\n if (key === KEYS.ESC || key === KEYS.TAB || key === KEYS.UP && evt.altKey) {\n self.close(evt);\n evt.preventDefault();\n } else if (key === KEYS.ENTER) {\n self.trigger('results:select', {});\n evt.preventDefault();\n } else if (key === KEYS.SPACE && evt.ctrlKey) {\n self.trigger('results:toggle', {});\n evt.preventDefault();\n } else if (key === KEYS.UP) {\n self.trigger('results:previous', {});\n evt.preventDefault();\n } else if (key === KEYS.DOWN) {\n self.trigger('results:next', {});\n evt.preventDefault();\n }\n } else {\n if (key === KEYS.ENTER || key === KEYS.SPACE || key === KEYS.DOWN && evt.altKey) {\n self.open();\n evt.preventDefault();\n }\n }\n });\n };\n\n Select2.prototype._syncAttributes = function () {\n this.options.set('disabled', this.$element.prop('disabled'));\n\n if (this.isDisabled()) {\n if (this.isOpen()) {\n this.close();\n }\n\n this.trigger('disable', {});\n } else {\n this.trigger('enable', {});\n }\n };\n\n Select2.prototype._isChangeMutation = function (evt, mutations) {\n var changed = false;\n var self = this; // 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\n if (evt && evt.target && evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP') {\n return;\n }\n\n if (!mutations) {\n // If mutation events aren't supported, then we can only assume that the\n // change affected the selections\n changed = true;\n } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n for (var n = 0; n < mutations.addedNodes.length; n++) {\n var node = mutations.addedNodes[n];\n\n if (node.selected) {\n changed = true;\n }\n }\n } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n changed = true;\n } else if ($.isArray(mutations)) {\n $.each(mutations, function (evt, mutation) {\n if (self._isChangeMutation(evt, mutation)) {\n // We've found a change mutation.\n // Let's escape from the loop and continue\n changed = true;\n return false;\n }\n });\n }\n\n return changed;\n };\n\n Select2.prototype._syncSubtree = function (evt, mutations) {\n var changed = this._isChangeMutation(evt, mutations);\n\n var self = this; // Only re-pull the data if we think there is a change\n\n if (changed) {\n this.dataAdapter.current(function (currentData) {\n self.trigger('selection:update', {\n data: currentData\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\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 actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n if (preTriggerArgs.prevented) {\n args.prevented = true;\n return;\n }\n }\n\n actualTrigger.call(this, name, args);\n };\n\n Select2.prototype.toggleDropdown = function () {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n };\n\n Select2.prototype.open = function () {\n if (this.isOpen()) {\n return;\n }\n\n if (this.isDisabled()) {\n return;\n }\n\n this.trigger('query', {});\n };\n\n Select2.prototype.close = function (evt) {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', {\n originalEvent: evt\n });\n };\n /**\n * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n\n\n Select2.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n\n\n Select2.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n Select2.prototype.isOpen = function () {\n return this.$container.hasClass('select2-container--open');\n };\n\n Select2.prototype.hasFocus = function () {\n return this.$container.hasClass('select2-container--focus');\n };\n\n Select2.prototype.focus = function (data) {\n // No need to re-trigger focus events if we are already focused\n if (this.hasFocus()) {\n return;\n }\n\n this.$container.addClass('select2-container--focus');\n this.trigger('focus', {});\n };\n\n Select2.prototype.enable = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' + ' instead.');\n }\n\n if (args == null || args.length === 0) {\n args = [true];\n }\n\n var disabled = !args[0];\n this.$element.prop('disabled', disabled);\n };\n\n Select2.prototype.data = function () {\n if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) {\n console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You ' + 'should consider setting the value instead using `$element.val()`.');\n }\n\n var data = [];\n this.dataAdapter.current(function (currentData) {\n data = currentData;\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('Select2: The `select2(\"val\")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.');\n }\n\n if (args == null || args.length === 0) {\n return this.$element.val();\n }\n\n var newVal = args[0];\n\n if ($.isArray(newVal)) {\n newVal = $.map(newVal, function (obj) {\n return obj.toString();\n });\n }\n\n this.$element.val(newVal).trigger('input').trigger('change');\n };\n\n Select2.prototype.destroy = function () {\n this.$container.remove();\n\n if (this.$element[0].detachEvent) {\n this.$element[0].detachEvent('onpropertychange', this._syncA);\n }\n\n if (this._observer != null) {\n this._observer.disconnect();\n\n this._observer = null;\n } else if (this.$element[0].removeEventListener) {\n this.$element[0].removeEventListener('DOMAttrModified', this._syncA, false);\n this.$element[0].removeEventListener('DOMNodeInserted', this._syncS, false);\n this.$element[0].removeEventListener('DOMNodeRemoved', this._syncS, false);\n }\n\n this._syncA = null;\n this._syncS = null;\n this.$element.off('.select2');\n this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex'));\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 this.dataAdapter.destroy();\n this.selection.destroy();\n this.dropdown.destroy();\n this.results.destroy();\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 $container.attr('dir', this.options.get('dir'));\n this.$container = $container;\n this.$container.addClass('select2-container--' + this.options.get('theme'));\n Utils.StoreData($container[0], 'element', this.$element);\n return $container;\n };\n\n return Select2;\n });\n S2.define('select2/compat/utils', ['jquery'], function ($) {\n function syncCssClasses($dest, $src, adapter) {\n var classes,\n replacements = [],\n adapted;\n classes = $.trim($dest.attr('class'));\n\n if (classes) {\n classes = '' + classes; // for IE which returns object\n\n $(classes.split(/\\s+/)).each(function () {\n // Save all Select2 classes\n if (this.indexOf('select2-') === 0) {\n replacements.push(this);\n }\n });\n }\n\n classes = $.trim($src.attr('class'));\n\n if (classes) {\n classes = '' + classes; // for IE which returns object\n\n $(classes.split(/\\s+/)).each(function () {\n // Only adapt non-Select2 classes\n if (this.indexOf('select2-') !== 0) {\n adapted = adapter(this);\n\n if (adapted != null) {\n replacements.push(adapted);\n }\n }\n });\n }\n\n $dest.attr('class', replacements.join(' '));\n }\n\n return {\n syncCssClasses: syncCssClasses\n };\n });\n S2.define('select2/compat/containerCss', ['jquery', './utils'], function ($, CompatUtils) {\n // No-op CSS adapter that discards all classes by default\n function _containerAdapter(clazz) {\n return null;\n }\n\n function ContainerCSS() {}\n\n ContainerCSS.prototype.render = function (decorated) {\n var $container = decorated.call(this);\n var containerCssClass = this.options.get('containerCssClass') || '';\n\n if ($.isFunction(containerCssClass)) {\n containerCssClass = containerCssClass(this.$element);\n }\n\n var containerCssAdapter = this.options.get('adaptContainerCssClass');\n containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n if (containerCssClass.indexOf(':all:') !== -1) {\n containerCssClass = containerCssClass.replace(':all:', '');\n var _cssAdapter = containerCssAdapter;\n\n containerCssAdapter = function containerCssAdapter(clazz) {\n var adapted = _cssAdapter(clazz);\n\n if (adapted != null) {\n // Append the old one along with the adapted one\n return adapted + ' ' + clazz;\n }\n\n return clazz;\n };\n }\n\n var containerCss = this.options.get('containerCss') || {};\n\n if ($.isFunction(containerCss)) {\n containerCss = containerCss(this.$element);\n }\n\n CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n $container.css(containerCss);\n $container.addClass(containerCssClass);\n return $container;\n };\n\n return ContainerCSS;\n });\n S2.define('select2/compat/dropdownCss', ['jquery', './utils'], function ($, CompatUtils) {\n // No-op CSS adapter that discards all classes by default\n function _dropdownAdapter(clazz) {\n return null;\n }\n\n function DropdownCSS() {}\n\n DropdownCSS.prototype.render = function (decorated) {\n var $dropdown = decorated.call(this);\n var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n if ($.isFunction(dropdownCssClass)) {\n dropdownCssClass = dropdownCssClass(this.$element);\n }\n\n var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n if (dropdownCssClass.indexOf(':all:') !== -1) {\n dropdownCssClass = dropdownCssClass.replace(':all:', '');\n var _cssAdapter = dropdownCssAdapter;\n\n dropdownCssAdapter = function dropdownCssAdapter(clazz) {\n var adapted = _cssAdapter(clazz);\n\n if (adapted != null) {\n // Append the old one along with the adapted one\n return adapted + ' ' + clazz;\n }\n\n return clazz;\n };\n }\n\n var dropdownCss = this.options.get('dropdownCss') || {};\n\n if ($.isFunction(dropdownCss)) {\n dropdownCss = dropdownCss(this.$element);\n }\n\n CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n $dropdown.css(dropdownCss);\n $dropdown.addClass(dropdownCssClass);\n return $dropdown;\n };\n\n return DropdownCSS;\n });\n S2.define('select2/compat/initSelection', ['jquery'], function ($) {\n function InitSelection(decorated, $element, options) {\n if (options.get('debug') && window.console && console.warn) {\n console.warn('Select2: The `initSelection` option has been deprecated in favor' + ' of a custom data adapter that overrides the `current` method. ' + 'This method is now called multiple times instead of a single ' + 'time when the instance is initialized. Support will be removed ' + 'for the `initSelection` option in future versions of Select2');\n }\n\n this.initSelection = options.get('initSelection');\n this._isInitialized = false;\n decorated.call(this, $element, options);\n }\n\n InitSelection.prototype.current = function (decorated, callback) {\n var self = this;\n\n if (this._isInitialized) {\n decorated.call(this, callback);\n return;\n }\n\n this.initSelection.call(null, this.$element, function (data) {\n self._isInitialized = true;\n\n if (!$.isArray(data)) {\n data = [data];\n }\n\n callback(data);\n });\n };\n\n return InitSelection;\n });\n S2.define('select2/compat/inputData', ['jquery', '../utils'], function ($, Utils) {\n function InputData(decorated, $element, options) {\n this._currentData = [];\n this._valueSeparator = options.get('valueSeparator') || ',';\n\n if ($element.prop('type') === 'hidden') {\n if (options.get('debug') && console && console.warn) {\n console.warn('Select2: Using a hidden input with Select2 is no longer ' + 'supported and may stop working in the future. It is recommended ' + 'to use a `