{"version":3,"sources":["..\\..\\..\\..\\template\\aspnet2023\\jquery\\select2.full.js"],"names":["factory","define","amd","module","exports","root","jQuery","undefined","window","require","S2","fn","select2","requirejs","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","length","nodeIdCompat","test","replace","charAt","concat","splice","join","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","n","pr","p","e","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","alt","setTimeout","cfg","_defined","_$","$","console","error","Utils","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","this","constructor","key","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","unshift","Array","argCount","calledConstructor","displayName","m","superMethod","calledMethod","originalMethod","decoratedMethod","d","Observable","listeners","on","event","trigger","params","_type","invoke","len","generateChars","chars","Math","floor","random","toString","bind","func","context","_convertData","data","originalKey","keys","dataLevel","k","toLowerCase","hasScroll","el","$el","overflowX","style","overflowY","innerHeight","scrollHeight","innerWidth","scrollWidth","escapeMarkup","markup","replaceMap","String","match","__cache","GetUniqueElementId","element","select2Id","getAttribute","setAttribute","StoreData","GetData","RemoveData","removeAttribute","copyNonInternalCssClasses","dest","src","destinationClasses","trim","filter","clazz","sourceClasses","replacements","Results","$element","options","dataAdapter","render","$results","get","attr","clear","empty","displayMessage","hideLoading","$message","message","append","className","hideMessages","find","remove","$options","results","sort","item","$option","option","children","position","$dropdown","sorter","highlightFirstItem","$selected","first","ensureHighlightVisible","setClasses","self","current","selected","selectedIds","s","each","classList","add","showLoading","loading","disabled","text","loadingMore","$loading","prepend","attrs","document","createElement","role","matches","_resultId","title","val","label","template","$children","c","child","$child","$childrenContainer","class","container","$container","isOpen","removeAttr","$highlighted","getHighlightedResults","hasClass","currentIndex","nextIndex","$next","eq","currentOffset","offset","top","nextTop","nextOffset","scrollTop","outerHeight","nextBottom","mousewheel","bottom","deltaY","isAtTop","isAtBottom","height","preventDefault","stopPropagation","evt","$this","originalEvent","removeClass","destroy","offsetDelta","result","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","update","_attachCloseHandler","_detachCloseHandler","activeElement","contains","body","$select","target","closest","off","isEnabled","isDisabled","SingleSelection","html","$rendered","selectionContainer","selection","formatted","MultipleSelection","parent","$selections","selectionIdPrefix","selectionId","removeItem","$remove","Placeholder","decorated","placeholder","normalizePlaceholder","_","createPlaceholder","$placeholder","placeholderTitle","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","Search","searchLabel","$search","$searchContainer","_transferTabIndex","resizeSearch","_keyUpPrevented","isDefaultPrevented","$previousChoice","last","searchRemoveChoice","msie","documentMode","disableInputEvents","type","handleSearch","searchHadFocus","input","term","css","width","SelectionCSS","selectionCssClass","addClass","EventRelay","relayEvents","preventableEvents","Event","Translation","dict","all","extend","translation","_cache","loadPath","path","translations","BaseAdapter","query","generateResultId","SelectAdapter","querySelectorAll","selectedElement","select","tagName","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","then","fail","_request","abort","request","isArray","status","url","delay","_queryTimeout","clearTimeout","Tags","tags","createTag","insertTag","t","tag","_removeOldTags","page","wrapper","checkChildren","toUpperCase","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","substr","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","count","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","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","left","$offsetParent","offsetParent","parentOffset","isConnected","outerWidth","minWidth","appendTo","countResults","MinimumResultsForSearch","minimumResultsForSearch","Infinity","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","ctrlKey","metaKey","DropdownCSS","dropdownCssClass","TagsSearchHighlight","$firstOption","firstElement","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","search","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","reset","tokenSeparators","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","selectionAdapter","allowClear","language","_resolveLanguage","uniqueLanguages","l","_processTranslations","debug","stripDiacritics","a","amdLanguageBase","autocomplete","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","isPlainObject","resolvedLanguages","baseLanguage","languageData","ex","warn","set","camelCase","convertedData","Options","fromElement","excludedData","dir","dataset","upperCaseLetter","letter","attributes","attributeName","dataName","dataValue","jquery","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","_observer","MutationObserver","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","focus","altKey","close","open","_isChangeMutation","addedNodes","removedNodes","some","mutation","changed","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","enable","newVal","disconnect","removeData","AttachContainer","StopPropagation","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","special","version","setup","addEventListener","handler","passive","onmousewheel","getLineHeight","getPageHeight","teardown","removeEventListener","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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AU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IA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","sourcesContent":["/*!\r\n * Select2 4.1.0-rc.0\r\n * https://select2.github.io\r\n *\r\n * Released under the MIT license\r\n * https://github.com/select2/select2/blob/master/LICENSE.md\r\n */\r\n;(function (factory) {\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD. Register as an anonymous module.\r\n    define(['jquery'], factory);\r\n  } else if (typeof module === 'object' && module.exports) {\r\n    // Node/CommonJS\r\n    module.exports = function (root, jQuery) {\r\n      if (jQuery === undefined) {\r\n        // require('jQuery') returns a factory that requires window to\r\n        // build a jQuery instance, we normalize how we use modules\r\n        // that require this pattern but the window provided is a noop\r\n        // if it's defined (how jquery works)\r\n        if (typeof window !== 'undefined') {\r\n          jQuery = require('jquery');\r\n        }\r\n        else {\r\n          jQuery = require('jquery')(root);\r\n        }\r\n      }\r\n      factory(jQuery);\r\n      return jQuery;\r\n    };\r\n  } else {\r\n    // Browser globals\r\n    factory(jQuery);\r\n  }\r\n} (function (jQuery) {\r\n  // This is needed so we can catch the AMD loader configuration and use it\r\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\r\n  // returns the AMD loader references.\r\n  var S2 =(function () {\r\n  // Restore the Select2 AMD loader so it can be used\r\n  // Needed mostly in the language files, where the loader is not inserted\r\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\r\n    var S2 = jQuery.fn.select2.amd;\r\n  }\r\nvar S2;(function () { if (!S2 || !S2.requirejs) {\r\nif (!S2) { S2 = {}; } else { require = S2; }\r\n/**\r\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\r\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\r\n */\r\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\r\n//be followed.\r\n/*global setTimeout: false */\r\n\r\nvar requirejs, require, define;\r\n(function (undef) {\r\n    var main, req, makeMap, handlers,\r\n        defined = {},\r\n        waiting = {},\r\n        config = {},\r\n        defining = {},\r\n        hasOwn = Object.prototype.hasOwnProperty,\r\n        aps = [].slice,\r\n        jsSuffixRegExp = /\\.js$/;\r\n\r\n    function hasProp(obj, prop) {\r\n        return hasOwn.call(obj, prop);\r\n    }\r\n\r\n    /**\r\n     * Given a relative module name, like ./something, normalize it to\r\n     * a real name that can be mapped to a path.\r\n     * @param {String} name the relative name\r\n     * @param {String} baseName a real name that the name arg is relative\r\n     * to.\r\n     * @returns {String} normalized name\r\n     */\r\n    function normalize(name, baseName) {\r\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\r\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\r\n            baseParts = baseName && baseName.split(\"/\"),\r\n            map = config.map,\r\n            starMap = (map && map['*']) || {};\r\n\r\n        //Adjust any relative paths.\r\n        if (name) {\r\n            name = name.split('/');\r\n            lastIndex = name.length - 1;\r\n\r\n            // If wanting node ID compatibility, strip .js from end\r\n            // of IDs. Have to do this here, and not in nameToUrl\r\n            // because node allows either .js or non .js to map\r\n            // to same file.\r\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\r\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\r\n            }\r\n\r\n            // Starts with a '.' so need the baseName\r\n            if (name[0].charAt(0) === '.' && baseParts) {\r\n                //Convert baseName to array, and lop off the last part,\r\n                //so that . matches that 'directory' and not name of the baseName's\r\n                //module. For instance, baseName of 'one/two/three', maps to\r\n                //'one/two/three.js', but we want the directory, 'one/two' for\r\n                //this normalization.\r\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\r\n                name = normalizedBaseParts.concat(name);\r\n            }\r\n\r\n            //start trimDots\r\n            for (i = 0; i < name.length; i++) {\r\n                part = name[i];\r\n                if (part === '.') {\r\n                    name.splice(i, 1);\r\n                    i -= 1;\r\n                } else if (part === '..') {\r\n                    // If at the start, or previous value is still ..,\r\n                    // keep them so that when converted to a path it may\r\n                    // still work when converted to a path, even though\r\n                    // as an ID it is less than ideal. In larger point\r\n                    // releases, may be better to just kick out an error.\r\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\r\n                        continue;\r\n                    } else if (i > 0) {\r\n                        name.splice(i - 1, 2);\r\n                        i -= 2;\r\n                    }\r\n                }\r\n            }\r\n            //end trimDots\r\n\r\n            name = name.join('/');\r\n        }\r\n\r\n        //Apply map config if available.\r\n        if ((baseParts || starMap) && map) {\r\n            nameParts = name.split('/');\r\n\r\n            for (i = nameParts.length; i > 0; i -= 1) {\r\n                nameSegment = nameParts.slice(0, i).join(\"/\");\r\n\r\n                if (baseParts) {\r\n                    //Find the longest baseName segment match in the config.\r\n                    //So, do joins on the biggest to smallest lengths of baseParts.\r\n                    for (j = baseParts.length; j > 0; j -= 1) {\r\n                        mapValue = map[baseParts.slice(0, j).join('/')];\r\n\r\n                        //baseName segment has  config, find if it has one for\r\n                        //this name.\r\n                        if (mapValue) {\r\n                            mapValue = mapValue[nameSegment];\r\n                            if (mapValue) {\r\n                                //Match, update name to the new value.\r\n                                foundMap = mapValue;\r\n                                foundI = i;\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (foundMap) {\r\n                    break;\r\n                }\r\n\r\n                //Check for a star map match, but just hold on to it,\r\n                //if there is a shorter segment match later in a matching\r\n                //config, then favor over this star map.\r\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\r\n                    foundStarMap = starMap[nameSegment];\r\n                    starI = i;\r\n                }\r\n            }\r\n\r\n            if (!foundMap && foundStarMap) {\r\n                foundMap = foundStarMap;\r\n                foundI = starI;\r\n            }\r\n\r\n            if (foundMap) {\r\n                nameParts.splice(0, foundI, foundMap);\r\n                name = nameParts.join('/');\r\n            }\r\n        }\r\n\r\n        return name;\r\n    }\r\n\r\n    function makeRequire(relName, forceSync) {\r\n        return function () {\r\n            //A version of a require function that passes a moduleName\r\n            //value for items that may need to\r\n            //look up paths relative to the moduleName\r\n            var args = aps.call(arguments, 0);\r\n\r\n            //If first arg is not require('string'), and there is only\r\n            //one arg, it is the array form without a callback. Insert\r\n            //a null so that the following concat is correct.\r\n            if (typeof args[0] !== 'string' && args.length === 1) {\r\n                args.push(null);\r\n            }\r\n            return req.apply(undef, args.concat([relName, forceSync]));\r\n        };\r\n    }\r\n\r\n    function makeNormalize(relName) {\r\n        return function (name) {\r\n            return normalize(name, relName);\r\n        };\r\n    }\r\n\r\n    function makeLoad(depName) {\r\n        return function (value) {\r\n            defined[depName] = value;\r\n        };\r\n    }\r\n\r\n    function callDep(name) {\r\n        if (hasProp(waiting, name)) {\r\n            var args = waiting[name];\r\n            delete waiting[name];\r\n            defining[name] = true;\r\n            main.apply(undef, args);\r\n        }\r\n\r\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\r\n            throw new Error('No ' + name);\r\n        }\r\n        return defined[name];\r\n    }\r\n\r\n    //Turns a plugin!resource to [plugin, resource]\r\n    //with the plugin being undefined if the name\r\n    //did not have a plugin prefix.\r\n    function splitPrefix(name) {\r\n        var prefix,\r\n            index = name ? name.indexOf('!') : -1;\r\n        if (index > -1) {\r\n            prefix = name.substring(0, index);\r\n            name = name.substring(index + 1, name.length);\r\n        }\r\n        return [prefix, name];\r\n    }\r\n\r\n    //Creates a parts array for a relName where first part is plugin ID,\r\n    //second part is resource ID. Assumes relName has already been normalized.\r\n    function makeRelParts(relName) {\r\n        return relName ? splitPrefix(relName) : [];\r\n    }\r\n\r\n    /**\r\n     * Makes a name map, normalizing the name, and using a plugin\r\n     * for normalization if necessary. Grabs a ref to plugin\r\n     * too, as an optimization.\r\n     */\r\n    makeMap = function (name, relParts) {\r\n        var plugin,\r\n            parts = splitPrefix(name),\r\n            prefix = parts[0],\r\n            relResourceName = relParts[1];\r\n\r\n        name = parts[1];\r\n\r\n        if (prefix) {\r\n            prefix = normalize(prefix, relResourceName);\r\n            plugin = callDep(prefix);\r\n        }\r\n\r\n        //Normalize according\r\n        if (prefix) {\r\n            if (plugin && plugin.normalize) {\r\n                name = plugin.normalize(name, makeNormalize(relResourceName));\r\n            } else {\r\n                name = normalize(name, relResourceName);\r\n            }\r\n        } else {\r\n            name = normalize(name, relResourceName);\r\n            parts = splitPrefix(name);\r\n            prefix = parts[0];\r\n            name = parts[1];\r\n            if (prefix) {\r\n                plugin = callDep(prefix);\r\n            }\r\n        }\r\n\r\n        //Using ridiculous property names for space reasons\r\n        return {\r\n            f: prefix ? prefix + '!' + name : name, //fullName\r\n            n: name,\r\n            pr: prefix,\r\n            p: plugin\r\n        };\r\n    };\r\n\r\n    function makeConfig(name) {\r\n        return function () {\r\n            return (config && config.config && config.config[name]) || {};\r\n        };\r\n    }\r\n\r\n    handlers = {\r\n        require: function (name) {\r\n            return makeRequire(name);\r\n        },\r\n        exports: function (name) {\r\n            var e = defined[name];\r\n            if (typeof e !== 'undefined') {\r\n                return e;\r\n            } else {\r\n                return (defined[name] = {});\r\n            }\r\n        },\r\n        module: function (name) {\r\n            return {\r\n                id: name,\r\n                uri: '',\r\n                exports: defined[name],\r\n                config: makeConfig(name)\r\n            };\r\n        }\r\n    };\r\n\r\n    main = function (name, deps, callback, relName) {\r\n        var cjsModule, depName, ret, map, i, relParts,\r\n            args = [],\r\n            callbackType = typeof callback,\r\n            usingExports;\r\n\r\n        //Use name if no relName\r\n        relName = relName || name;\r\n        relParts = makeRelParts(relName);\r\n\r\n        //Call the callback to define the module, if necessary.\r\n        if (callbackType === 'undefined' || callbackType === 'function') {\r\n            //Pull out the defined dependencies and pass the ordered\r\n            //values to the callback.\r\n            //Default to [require, exports, module] if no deps\r\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\r\n            for (i = 0; i < deps.length; i += 1) {\r\n                map = makeMap(deps[i], relParts);\r\n                depName = map.f;\r\n\r\n                //Fast path CommonJS standard dependencies.\r\n                if (depName === \"require\") {\r\n                    args[i] = handlers.require(name);\r\n                } else if (depName === \"exports\") {\r\n                    //CommonJS module spec 1.1\r\n                    args[i] = handlers.exports(name);\r\n                    usingExports = true;\r\n                } else if (depName === \"module\") {\r\n                    //CommonJS module spec 1.1\r\n                    cjsModule = args[i] = handlers.module(name);\r\n                } else if (hasProp(defined, depName) ||\r\n                           hasProp(waiting, depName) ||\r\n                           hasProp(defining, depName)) {\r\n                    args[i] = callDep(depName);\r\n                } else if (map.p) {\r\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\r\n                    args[i] = defined[depName];\r\n                } else {\r\n                    throw new Error(name + ' missing ' + depName);\r\n                }\r\n            }\r\n\r\n            ret = callback ? callback.apply(defined[name], args) : undefined;\r\n\r\n            if (name) {\r\n                //If setting exports via \"module\" is in play,\r\n                //favor that over return value and exports. After that,\r\n                //favor a non-undefined return value over exports use.\r\n                if (cjsModule && cjsModule.exports !== undef &&\r\n                        cjsModule.exports !== defined[name]) {\r\n                    defined[name] = cjsModule.exports;\r\n                } else if (ret !== undef || !usingExports) {\r\n                    //Use the return value from the function.\r\n                    defined[name] = ret;\r\n                }\r\n            }\r\n        } else if (name) {\r\n            //May just be an object definition for the module. Only\r\n            //worry about defining if have a module name.\r\n            defined[name] = callback;\r\n        }\r\n    };\r\n\r\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\r\n        if (typeof deps === \"string\") {\r\n            if (handlers[deps]) {\r\n                //callback in this case is really relName\r\n                return handlers[deps](callback);\r\n            }\r\n            //Just return the module wanted. In this scenario, the\r\n            //deps arg is the module name, and second arg (if passed)\r\n            //is just the relName.\r\n            //Normalize module name, if it contains . or ..\r\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\r\n        } else if (!deps.splice) {\r\n            //deps is a config object, not an array.\r\n            config = deps;\r\n            if (config.deps) {\r\n                req(config.deps, config.callback);\r\n            }\r\n            if (!callback) {\r\n                return;\r\n            }\r\n\r\n            if (callback.splice) {\r\n                //callback is an array, which means it is a dependency list.\r\n                //Adjust args if there are dependencies\r\n                deps = callback;\r\n                callback = relName;\r\n                relName = null;\r\n            } else {\r\n                deps = undef;\r\n            }\r\n        }\r\n\r\n        //Support require(['a'])\r\n        callback = callback || function () {};\r\n\r\n        //If relName is a function, it is an errback handler,\r\n        //so remove it.\r\n        if (typeof relName === 'function') {\r\n            relName = forceSync;\r\n            forceSync = alt;\r\n        }\r\n\r\n        //Simulate async callback;\r\n        if (forceSync) {\r\n            main(undef, deps, callback, relName);\r\n        } else {\r\n            //Using a non-zero value because of concern for what old browsers\r\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\r\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\r\n            //If want a value immediately, use require('id') instead -- something\r\n            //that works in almond on the global level, but not guaranteed and\r\n            //unlikely to work in other AMD implementations.\r\n            setTimeout(function () {\r\n                main(undef, deps, callback, relName);\r\n            }, 4);\r\n        }\r\n\r\n        return req;\r\n    };\r\n\r\n    /**\r\n     * Just drops the config on the floor, but returns req in case\r\n     * the config return value is used.\r\n     */\r\n    req.config = function (cfg) {\r\n        return req(cfg);\r\n    };\r\n\r\n    /**\r\n     * Expose module registry for debugging and tooling\r\n     */\r\n    requirejs._defined = defined;\r\n\r\n    define = function (name, deps, callback) {\r\n        if (typeof name !== 'string') {\r\n            throw new Error('See almond README: incorrect module build, no module name');\r\n        }\r\n\r\n        //This module may not have dependencies\r\n        if (!deps.splice) {\r\n            //deps is not an array, so probably means\r\n            //an object literal or factory function for\r\n            //the value. Adjust args.\r\n            callback = deps;\r\n            deps = [];\r\n        }\r\n\r\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\r\n            waiting[name] = [name, deps, callback];\r\n        }\r\n    };\r\n\r\n    define.amd = {\r\n        jQuery: true\r\n    };\r\n}());\r\n\r\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\r\n}\r\n}());\r\nS2.define(\"almond\", function(){});\r\n\r\n/* global jQuery:false, $:false */\r\nS2.define('jquery',[],function () {\r\n  var _$ = jQuery || $;\r\n\r\n  if (_$ == null && console && console.error) {\r\n    console.error(\r\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\r\n      'found. Make sure that you are including jQuery before Select2 on your ' +\r\n      'web page.'\r\n    );\r\n  }\r\n\r\n  return _$;\r\n});\r\n\r\nS2.define('select2/utils',[\r\n  'jquery'\r\n], function ($) {\r\n  var Utils = {};\r\n\r\n  Utils.Extend = function (ChildClass, SuperClass) {\r\n    var __hasProp = {}.hasOwnProperty;\r\n\r\n    function BaseConstructor () {\r\n      this.constructor = ChildClass;\r\n    }\r\n\r\n    for (var key in SuperClass) {\r\n      if (__hasProp.call(SuperClass, key)) {\r\n        ChildClass[key] = SuperClass[key];\r\n      }\r\n    }\r\n\r\n    BaseConstructor.prototype = SuperClass.prototype;\r\n    ChildClass.prototype = new BaseConstructor();\r\n    ChildClass.__super__ = SuperClass.prototype;\r\n\r\n    return ChildClass;\r\n  };\r\n\r\n  function getMethods (theClass) {\r\n    var proto = theClass.prototype;\r\n\r\n    var methods = [];\r\n\r\n    for (var methodName in proto) {\r\n      var m = proto[methodName];\r\n\r\n      if (typeof m !== 'function') {\r\n        continue;\r\n      }\r\n\r\n      if (methodName === 'constructor') {\r\n        continue;\r\n      }\r\n\r\n      methods.push(methodName);\r\n    }\r\n\r\n    return methods;\r\n  }\r\n\r\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\r\n    var decoratedMethods = getMethods(DecoratorClass);\r\n    var superMethods = getMethods(SuperClass);\r\n\r\n    function DecoratedClass () {\r\n      var unshift = Array.prototype.unshift;\r\n\r\n      var argCount = DecoratorClass.prototype.constructor.length;\r\n\r\n      var calledConstructor = SuperClass.prototype.constructor;\r\n\r\n      if (argCount > 0) {\r\n        unshift.call(arguments, SuperClass.prototype.constructor);\r\n\r\n        calledConstructor = DecoratorClass.prototype.constructor;\r\n      }\r\n\r\n      calledConstructor.apply(this, arguments);\r\n    }\r\n\r\n    DecoratorClass.displayName = SuperClass.displayName;\r\n\r\n    function ctr () {\r\n      this.constructor = DecoratedClass;\r\n    }\r\n\r\n    DecoratedClass.prototype = new ctr();\r\n\r\n    for (var m = 0; m < superMethods.length; m++) {\r\n      var superMethod = superMethods[m];\r\n\r\n      DecoratedClass.prototype[superMethod] =\r\n        SuperClass.prototype[superMethod];\r\n    }\r\n\r\n    var calledMethod = function (methodName) {\r\n      // Stub out the original method if it's not decorating an actual method\r\n      var originalMethod = function () {};\r\n\r\n      if (methodName in DecoratedClass.prototype) {\r\n        originalMethod = DecoratedClass.prototype[methodName];\r\n      }\r\n\r\n      var decoratedMethod = DecoratorClass.prototype[methodName];\r\n\r\n      return function () {\r\n        var unshift = Array.prototype.unshift;\r\n\r\n        unshift.call(arguments, originalMethod);\r\n\r\n        return decoratedMethod.apply(this, arguments);\r\n      };\r\n    };\r\n\r\n    for (var d = 0; d < decoratedMethods.length; d++) {\r\n      var decoratedMethod = decoratedMethods[d];\r\n\r\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\r\n    }\r\n\r\n    return DecoratedClass;\r\n  };\r\n\r\n  var Observable = function () {\r\n    this.listeners = {};\r\n  };\r\n\r\n  Observable.prototype.on = function (event, callback) {\r\n    this.listeners = this.listeners || {};\r\n\r\n    if (event in this.listeners) {\r\n      this.listeners[event].push(callback);\r\n    } else {\r\n      this.listeners[event] = [callback];\r\n    }\r\n  };\r\n\r\n  Observable.prototype.trigger = function (event) {\r\n    var slice = Array.prototype.slice;\r\n    var params = slice.call(arguments, 1);\r\n\r\n    this.listeners = this.listeners || {};\r\n\r\n    // Params should always come in as an array\r\n    if (params == null) {\r\n      params = [];\r\n    }\r\n\r\n    // If there are no arguments to the event, use a temporary object\r\n    if (params.length === 0) {\r\n      params.push({});\r\n    }\r\n\r\n    // Set the `_type` of the first object to the event\r\n    params[0]._type = event;\r\n\r\n    if (event in this.listeners) {\r\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\r\n    }\r\n\r\n    if ('*' in this.listeners) {\r\n      this.invoke(this.listeners['*'], arguments);\r\n    }\r\n  };\r\n\r\n  Observable.prototype.invoke = function (listeners, params) {\r\n    for (var i = 0, len = listeners.length; i < len; i++) {\r\n      listeners[i].apply(this, params);\r\n    }\r\n  };\r\n\r\n  Utils.Observable = Observable;\r\n\r\n  Utils.generateChars = function (length) {\r\n    var chars = '';\r\n\r\n    for (var i = 0; i < length; i++) {\r\n      var randomChar = Math.floor(Math.random() * 36);\r\n      chars += randomChar.toString(36);\r\n    }\r\n\r\n    return chars;\r\n  };\r\n\r\n  Utils.bind = function (func, context) {\r\n    return function () {\r\n      func.apply(context, arguments);\r\n    };\r\n  };\r\n\r\n  Utils._convertData = function (data) {\r\n    for (var originalKey in data) {\r\n      var keys = originalKey.split('-');\r\n\r\n      var dataLevel = data;\r\n\r\n      if (keys.length === 1) {\r\n        continue;\r\n      }\r\n\r\n      for (var k = 0; k < keys.length; k++) {\r\n        var key = keys[k];\r\n\r\n        // Lowercase the first letter\r\n        // By default, dash-separated becomes camelCase\r\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\r\n\r\n        if (!(key in dataLevel)) {\r\n          dataLevel[key] = {};\r\n        }\r\n\r\n        if (k == keys.length - 1) {\r\n          dataLevel[key] = data[originalKey];\r\n        }\r\n\r\n        dataLevel = dataLevel[key];\r\n      }\r\n\r\n      delete data[originalKey];\r\n    }\r\n\r\n    return data;\r\n  };\r\n\r\n  Utils.hasScroll = function (index, el) {\r\n    // Adapted from the function created by @ShadowScripter\r\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\r\n    // The original code can be found at\r\n    // http://codereview.stackexchange.com/q/13338\r\n    // and was designed to be used with the Sizzle selector engine.\r\n\r\n    var $el = $(el);\r\n    var overflowX = el.style.overflowX;\r\n    var overflowY = el.style.overflowY;\r\n\r\n    //Check both x and y declarations\r\n    if (overflowX === overflowY &&\r\n        (overflowY === 'hidden' || overflowY === 'visible')) {\r\n      return false;\r\n    }\r\n\r\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\r\n      return true;\r\n    }\r\n\r\n    return ($el.innerHeight() < el.scrollHeight ||\r\n      $el.innerWidth() < el.scrollWidth);\r\n  };\r\n\r\n  Utils.escapeMarkup = function (markup) {\r\n    var replaceMap = {\r\n      '\\\\': '&#92;',\r\n      '&': '&amp;',\r\n      '<': '&lt;',\r\n      '>': '&gt;',\r\n      '\"': '&quot;',\r\n      '\\'': '&#39;',\r\n      '/': '&#47;'\r\n    };\r\n\r\n    // Do not try to escape the markup if it's not a string\r\n    if (typeof markup !== 'string') {\r\n      return markup;\r\n    }\r\n\r\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\r\n      return replaceMap[match];\r\n    });\r\n  };\r\n\r\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\r\n  Utils.__cache = {};\r\n\r\n  var id = 0;\r\n  Utils.GetUniqueElementId = function (element) {\r\n    // Get a unique element Id. If element has no id,\r\n    // creates a new unique number, stores it in the id\r\n    // attribute and returns the new id with a prefix.\r\n    // If an id already exists, it simply returns it with a prefix.\r\n\r\n    var select2Id = element.getAttribute('data-select2-id');\r\n\r\n    if (select2Id != null) {\r\n      return select2Id;\r\n    }\r\n\r\n    // If element has id, use it.\r\n    if (element.id) {\r\n      select2Id = 'select2-data-' + element.id;\r\n    } else {\r\n      select2Id = 'select2-data-' + (++id).toString() +\r\n        '-' + Utils.generateChars(4);\r\n    }\r\n\r\n    element.setAttribute('data-select2-id', select2Id);\r\n\r\n    return select2Id;\r\n  };\r\n\r\n  Utils.StoreData = function (element, name, value) {\r\n    // Stores an item in the cache for a specified element.\r\n    // name is the cache key.\r\n    var id = Utils.GetUniqueElementId(element);\r\n    if (!Utils.__cache[id]) {\r\n      Utils.__cache[id] = {};\r\n    }\r\n\r\n    Utils.__cache[id][name] = value;\r\n  };\r\n\r\n  Utils.GetData = function (element, name) {\r\n    // Retrieves a value from the cache by its key (name)\r\n    // name is optional. If no name specified, return\r\n    // all cache items for the specified element.\r\n    // and for a specified element.\r\n    var id = Utils.GetUniqueElementId(element);\r\n    if (name) {\r\n      if (Utils.__cache[id]) {\r\n        if (Utils.__cache[id][name] != null) {\r\n          return Utils.__cache[id][name];\r\n        }\r\n        return $(element).data(name); // Fallback to HTML5 data attribs.\r\n      }\r\n      return $(element).data(name); // Fallback to HTML5 data attribs.\r\n    } else {\r\n      return Utils.__cache[id];\r\n    }\r\n  };\r\n\r\n  Utils.RemoveData = function (element) {\r\n    // Removes all cached items for a specified element.\r\n    var id = Utils.GetUniqueElementId(element);\r\n    if (Utils.__cache[id] != null) {\r\n      delete Utils.__cache[id];\r\n    }\r\n\r\n    element.removeAttribute('data-select2-id');\r\n  };\r\n\r\n  Utils.copyNonInternalCssClasses = function (dest, src) {\r\n    var classes;\r\n\r\n    var destinationClasses = dest.getAttribute('class').trim().split(/\\s+/);\r\n\r\n    destinationClasses = destinationClasses.filter(function (clazz) {\r\n      // Save all Select2 classes\r\n      return clazz.indexOf('select2-') === 0;\r\n    });\r\n\r\n    var sourceClasses = src.getAttribute('class').trim().split(/\\s+/);\r\n\r\n    sourceClasses = sourceClasses.filter(function (clazz) {\r\n      // Only copy non-Select2 classes\r\n      return clazz.indexOf('select2-') !== 0;\r\n    });\r\n\r\n    var replacements = destinationClasses.concat(sourceClasses);\r\n\r\n    dest.setAttribute('class', replacements.join(' '));\r\n  };\r\n\r\n  return Utils;\r\n});\r\n\r\nS2.define('select2/results',[\r\n  'jquery',\r\n  './utils'\r\n], function ($, Utils) {\r\n  function Results ($element, options, dataAdapter) {\r\n    this.$element = $element;\r\n    this.data = dataAdapter;\r\n    this.options = options;\r\n\r\n    Results.__super__.constructor.call(this);\r\n  }\r\n\r\n  Utils.Extend(Results, Utils.Observable);\r\n\r\n  Results.prototype.render = function () {\r\n    var $results = $(\r\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\r\n    );\r\n\r\n    if (this.options.get('multiple')) {\r\n      $results.attr('aria-multiselectable', 'true');\r\n    }\r\n\r\n    this.$results = $results;\r\n\r\n    return $results;\r\n  };\r\n\r\n  Results.prototype.clear = function () {\r\n    this.$results.empty();\r\n  };\r\n\r\n  Results.prototype.displayMessage = function (params) {\r\n    var escapeMarkup = this.options.get('escapeMarkup');\r\n\r\n    this.clear();\r\n    this.hideLoading();\r\n\r\n    var $message = $(\r\n      '<li role=\"alert\" aria-live=\"assertive\"' +\r\n      ' class=\"select2-results__option\"></li>'\r\n    );\r\n\r\n    var message = this.options.get('translations').get(params.message);\r\n\r\n    $message.append(\r\n      escapeMarkup(\r\n        message(params.args)\r\n      )\r\n    );\r\n\r\n    $message[0].className += ' select2-results__message';\r\n\r\n    this.$results.append($message);\r\n  };\r\n\r\n  Results.prototype.hideMessages = function () {\r\n    this.$results.find('.select2-results__message').remove();\r\n  };\r\n\r\n  Results.prototype.append = function (data) {\r\n    this.hideLoading();\r\n\r\n    var $options = [];\r\n\r\n    if (data.results == null || data.results.length === 0) {\r\n      if (this.$results.children().length === 0) {\r\n        this.trigger('results:message', {\r\n          message: 'noResults'\r\n        });\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    data.results = this.sort(data.results);\r\n\r\n    for (var d = 0; d < data.results.length; d++) {\r\n      var item = data.results[d];\r\n\r\n      var $option = this.option(item);\r\n\r\n      $options.push($option);\r\n    }\r\n\r\n    this.$results.append($options);\r\n  };\r\n\r\n  Results.prototype.position = function ($results, $dropdown) {\r\n    var $resultsContainer = $dropdown.find('.select2-results');\r\n    $resultsContainer.append($results);\r\n  };\r\n\r\n  Results.prototype.sort = function (data) {\r\n    var sorter = this.options.get('sorter');\r\n\r\n    return sorter(data);\r\n  };\r\n\r\n  Results.prototype.highlightFirstItem = function () {\r\n    var $options = this.$results\r\n      .find('.select2-results__option--selectable');\r\n\r\n    var $selected = $options.filter('.select2-results__option--selected');\r\n\r\n    // Check if there are any selected options\r\n    if ($selected.length > 0) {\r\n      // If there are selected options, highlight the first\r\n      $selected.first().trigger('mouseenter');\r\n    } else {\r\n      // If there are no selected options, highlight the first option\r\n      // in the dropdown\r\n      $options.first().trigger('mouseenter');\r\n    }\r\n\r\n    this.ensureHighlightVisible();\r\n  };\r\n\r\n  Results.prototype.setClasses = function () {\r\n    var self = this;\r\n\r\n    this.data.current(function (selected) {\r\n      var selectedIds = selected.map(function (s) {\r\n        return s.id.toString();\r\n      });\r\n\r\n      var $options = self.$results\r\n        .find('.select2-results__option--selectable');\r\n\r\n      $options.each(function () {\r\n        var $option = $(this);\r\n\r\n        var item = Utils.GetData(this, 'data');\r\n\r\n        // id needs to be converted to a string when comparing\r\n        var id = '' + item.id;\r\n\r\n        if ((item.element != null && item.element.selected) ||\r\n            (item.element == null && selectedIds.indexOf(id) > -1)) {\r\n          this.classList.add('select2-results__option--selected');\r\n          $option.attr('aria-selected', 'true');\r\n        } else {\r\n          this.classList.remove('select2-results__option--selected');\r\n          $option.attr('aria-selected', 'false');\r\n        }\r\n      });\r\n\r\n    });\r\n  };\r\n\r\n  Results.prototype.showLoading = function (params) {\r\n    this.hideLoading();\r\n\r\n    var loadingMore = this.options.get('translations').get('searching');\r\n\r\n    var loading = {\r\n      disabled: true,\r\n      loading: true,\r\n      text: loadingMore(params)\r\n    };\r\n    var $loading = this.option(loading);\r\n    $loading.className += ' loading-results';\r\n\r\n    this.$results.prepend($loading);\r\n  };\r\n\r\n  Results.prototype.hideLoading = function () {\r\n    this.$results.find('.loading-results').remove();\r\n  };\r\n\r\n  Results.prototype.option = function (data) {\r\n    var option;\r\n\r\n    if (data.children) {\r\n      option = this.$results.find(\"li[role=group]\").filter(function() {\r\n          $(this).attrs('aria-label') == data.text;\r\n      })[0]; // Find existing option group //***\r\n    }\r\n\r\n    if (!option) {\r\n      option = document.createElement('li');\r\n      option.classList.add('select2-results__option');\r\n      option.classList.add('select2-results__option--selectable');\r\n    }\r\n\r\n    var attrs = {\r\n      'role': 'option'\r\n    };\r\n\r\n    if ((data.element != null && data.element.matches(':disabled')) || //***\r\n        (data.element == null && data.disabled)) {\r\n      attrs['aria-disabled'] = 'true';\r\n\r\n      option.classList.remove('select2-results__option--selectable');\r\n      option.classList.add('select2-results__option--disabled');\r\n    }\r\n\r\n    if (data.id == null) {\r\n      option.classList.remove('select2-results__option--selectable');\r\n    }\r\n\r\n    if (data._resultId != null) {\r\n      option.id = data._resultId;\r\n    }\r\n\r\n    if (data.title) {\r\n      option.title = data.title;\r\n    }\r\n\r\n    if (data.children) {\r\n      attrs.role = 'group';\r\n      attrs['aria-label'] = data.text;\r\n\r\n      option.classList.remove('select2-results__option--selectable');\r\n      option.classList.add('select2-results__option--group');\r\n    }\r\n\r\n    for (var attr in attrs) {\r\n      var val = attrs[attr];\r\n\r\n      option.setAttribute(attr, val);\r\n    }\r\n\r\n    if (data.children) {\r\n      var $option = $(option);\r\n\r\n      var label = document.createElement('strong');\r\n      label.className = 'select2-results__group';\r\n\r\n      this.template(data, label);\r\n\r\n      var $children = [];\r\n\r\n      for (var c = 0; c < data.children.length; c++) {\r\n        var child = data.children[c];\r\n\r\n        var $child = this.option(child);\r\n\r\n        $children.push($child);\r\n      }\r\n\r\n      var $childrenContainer = $('<ul></ul>', {\r\n        'class': 'select2-results__options select2-results__options--nested',\r\n        'role': 'none'\r\n      });\r\n\r\n      $childrenContainer.append($children);\r\n\r\n      $option.append(label);\r\n      $option.append($childrenContainer);\r\n    } else {\r\n      this.template(data, option);\r\n    }\r\n\r\n    Utils.StoreData(option, 'data', data);\r\n\r\n    return option;\r\n  };\r\n\r\n  Results.prototype.bind = function (container, $container) {\r\n    var self = this;\r\n\r\n    var id = container.id + '-results';\r\n\r\n    this.$results.attr('id', id);\r\n\r\n    container.on('results:all', function (params) {\r\n      self.clear();\r\n      self.append(params.data);\r\n\r\n      if (container.isOpen()) {\r\n        self.setClasses();\r\n        self.highlightFirstItem();\r\n      }\r\n    });\r\n\r\n    container.on('results:append', function (params) {\r\n      self.append(params.data);\r\n\r\n      if (container.isOpen()) {\r\n        self.setClasses();\r\n      }\r\n    });\r\n\r\n    container.on('query', function (params) {\r\n      self.hideMessages();\r\n      self.showLoading(params);\r\n    });\r\n\r\n    container.on('select', function () {\r\n      if (!container.isOpen()) {\r\n        return;\r\n      }\r\n\r\n      self.setClasses();\r\n\r\n      if (self.options.get('scrollAfterSelect')) {\r\n        self.highlightFirstItem();\r\n      }\r\n    });\r\n\r\n    container.on('unselect', function () {\r\n      if (!container.isOpen()) {\r\n        return;\r\n      }\r\n\r\n      self.setClasses();\r\n\r\n      if (self.options.get('scrollAfterSelect')) {\r\n        self.highlightFirstItem();\r\n      }\r\n    });\r\n\r\n    container.on('open', function () {\r\n      // When the dropdown is open, aria-expended=\"true\"\r\n      self.$results.attr('aria-expanded', 'true');\r\n      self.$results.attr('aria-hidden', 'false');\r\n\r\n      self.setClasses();\r\n      self.ensureHighlightVisible();\r\n    });\r\n\r\n    container.on('close', function () {\r\n      // When the dropdown is closed, aria-expended=\"false\"\r\n      self.$results.attr('aria-expanded', 'false');\r\n      self.$results.attr('aria-hidden', 'true');\r\n      self.$results.removeAttr('aria-activedescendant');\r\n    });\r\n\r\n    container.on('results:toggle', function () {\r\n      var $highlighted = self.getHighlightedResults();\r\n\r\n      if ($highlighted.length === 0) {\r\n        return;\r\n      }\r\n\r\n      $highlighted.trigger('mouseup');\r\n    });\r\n\r\n    container.on('results:select', function () {\r\n      var $highlighted = self.getHighlightedResults();\r\n\r\n      if ($highlighted.length === 0) {\r\n        return;\r\n      }\r\n\r\n      var data = Utils.GetData($highlighted[0], 'data');\r\n\r\n      if ($highlighted.hasClass('select2-results__option--selected')) {\r\n        self.trigger('close', {});\r\n      } else {\r\n        self.trigger('select', {\r\n          data: data\r\n        });\r\n      }\r\n    });\r\n\r\n    container.on('results:previous', function () {\r\n      var $highlighted = self.getHighlightedResults();\r\n\r\n      var $options = self.$results.find('.select2-results__option--selectable');\r\n\r\n      var currentIndex = $options.index($highlighted);\r\n\r\n      // If we are already at the top, don't move further\r\n      // If no options, currentIndex will be -1\r\n      if (currentIndex <= 0) {\r\n        return;\r\n      }\r\n\r\n      var nextIndex = currentIndex - 1;\r\n\r\n      // If none are highlighted, highlight the first\r\n      if ($highlighted.length === 0) {\r\n        nextIndex = 0;\r\n      }\r\n\r\n      var $next = $options.eq(nextIndex);\r\n\r\n      $next.trigger('mouseenter');\r\n\r\n      var currentOffset = self.$results.offset().top;\r\n      var nextTop = $next.offset().top;\r\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\r\n\r\n      if (nextIndex === 0) {\r\n        self.$results.scrollTop(0);\r\n      } else if (nextTop - currentOffset < 0) {\r\n        self.$results.scrollTop(nextOffset);\r\n      }\r\n    });\r\n\r\n    container.on('results:next', function () {\r\n      var $highlighted = self.getHighlightedResults();\r\n\r\n      var $options = self.$results.find('.select2-results__option--selectable');\r\n\r\n      var currentIndex = $options.index($highlighted);\r\n\r\n      var nextIndex = currentIndex + 1;\r\n\r\n      // If we are at the last option, stay there\r\n      if (nextIndex >= $options.length) {\r\n        return;\r\n      }\r\n\r\n      var $next = $options.eq(nextIndex);\r\n\r\n      $next.trigger('mouseenter');\r\n\r\n      var currentOffset = self.$results.offset().top +\r\n        self.$results.outerHeight(false);\r\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\r\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\r\n\r\n      if (nextIndex === 0) {\r\n        self.$results.scrollTop(0);\r\n      } else if (nextBottom > currentOffset) {\r\n        self.$results.scrollTop(nextOffset);\r\n      }\r\n    });\r\n\r\n    container.on('results:focus', function (params) {\r\n      params.element[0].classList.add('select2-results__option--highlighted');\r\n      params.element[0].setAttribute('aria-selected', 'true');\r\n    });\r\n\r\n    container.on('results:message', function (params) {\r\n      self.displayMessage(params);\r\n    });\r\n\r\n    if ($.fn.mousewheel) {\r\n      this.$results.on('mousewheel', function (e) {\r\n        var top = self.$results.scrollTop();\r\n\r\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\r\n\r\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\r\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\r\n\r\n        if (isAtTop) {\r\n          self.$results.scrollTop(0);\r\n\r\n          e.preventDefault();\r\n          e.stopPropagation();\r\n        } else if (isAtBottom) {\r\n          self.$results.scrollTop(\r\n            self.$results.get(0).scrollHeight - self.$results.height()\r\n          );\r\n\r\n          e.preventDefault();\r\n          e.stopPropagation();\r\n        }\r\n      });\r\n    }\r\n\r\n    this.$results.on('mouseup', '.select2-results__option--selectable',\r\n      function (evt) {\r\n      var $this = $(this);\r\n\r\n      var data = Utils.GetData(this, 'data');\r\n\r\n      if ($this.hasClass('select2-results__option--selected')) {\r\n        if (self.options.get('multiple')) {\r\n          self.trigger('unselect', {\r\n            originalEvent: evt,\r\n            data: data\r\n          });\r\n        } else {\r\n          self.trigger('close', {});\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      self.trigger('select', {\r\n        originalEvent: evt,\r\n        data: data\r\n      });\r\n    });\r\n\r\n    this.$results.on('mouseenter', '.select2-results__option--selectable',\r\n      function (evt) {\r\n      var data = Utils.GetData(this, 'data');\r\n\r\n      self.getHighlightedResults()\r\n          .removeClass('select2-results__option--highlighted')\r\n          .attr('aria-selected', 'false');\r\n\r\n      self.trigger('results:focus', {\r\n        data: data,\r\n        element: $(this)\r\n      });\r\n    });\r\n  };\r\n\r\n  Results.prototype.getHighlightedResults = function () {\r\n    var $highlighted = this.$results\r\n    .find('.select2-results__option--highlighted');\r\n\r\n    return $highlighted;\r\n  };\r\n\r\n  Results.prototype.destroy = function () {\r\n    this.$results.remove();\r\n  };\r\n\r\n  Results.prototype.ensureHighlightVisible = function () {\r\n    var $highlighted = this.getHighlightedResults();\r\n\r\n    if ($highlighted.length === 0) {\r\n      return;\r\n    }\r\n\r\n    var $options = this.$results.find('.select2-results__option--selectable');\r\n\r\n    var currentIndex = $options.index($highlighted);\r\n\r\n    var currentOffset = this.$results.offset().top;\r\n    var nextTop = $highlighted.offset().top;\r\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\r\n\r\n    var offsetDelta = nextTop - currentOffset;\r\n    nextOffset -= $highlighted.outerHeight(false) * 2;\r\n\r\n    if (currentIndex <= 2) {\r\n      this.$results.scrollTop(0);\r\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\r\n      this.$results.scrollTop(nextOffset);\r\n    }\r\n  };\r\n\r\n  Results.prototype.template = function (result, container) {\r\n    var template = this.options.get('templateResult');\r\n    var escapeMarkup = this.options.get('escapeMarkup');\r\n\r\n    var content = template(result, container);\r\n\r\n    if (content == null) {\r\n      container.style.display = 'none';\r\n    } else if (typeof content === 'string') {\r\n      container.innerHTML = escapeMarkup(content);\r\n    } else {\r\n      $(container).append(content);\r\n    }\r\n  };\r\n\r\n  return Results;\r\n});\r\n\r\nS2.define('select2/keys',[\r\n\r\n], function () {\r\n  var KEYS = {\r\n    BACKSPACE: 8,\r\n    TAB: 9,\r\n    ENTER: 13,\r\n    SHIFT: 16,\r\n    CTRL: 17,\r\n    ALT: 18,\r\n    ESC: 27,\r\n    SPACE: 32,\r\n    PAGE_UP: 33,\r\n    PAGE_DOWN: 34,\r\n    END: 35,\r\n    HOME: 36,\r\n    LEFT: 37,\r\n    UP: 38,\r\n    RIGHT: 39,\r\n    DOWN: 40,\r\n    DELETE: 46\r\n  };\r\n\r\n  return KEYS;\r\n});\r\n\r\nS2.define('select2/selection/base',[\r\n  'jquery',\r\n  '../utils',\r\n  '../keys'\r\n], function ($, Utils, KEYS) {\r\n  function BaseSelection ($element, options) {\r\n    this.$element = $element;\r\n    this.options = options;\r\n\r\n    BaseSelection.__super__.constructor.call(this);\r\n  }\r\n\r\n  Utils.Extend(BaseSelection, Utils.Observable);\r\n\r\n  BaseSelection.prototype.render = function () {\r\n    var $selection = $(\r\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\r\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\r\n      '</span>'\r\n    );\r\n\r\n    this._tabindex = 0;\r\n\r\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\r\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\r\n    } else if (this.$element.attr('tabindex') != null) {\r\n      this._tabindex = this.$element.attr('tabindex');\r\n    }\r\n\r\n    $selection.attr('title', this.$element.attr('title'));\r\n    $selection.attr('tabindex', this._tabindex);\r\n    $selection.attr('aria-disabled', 'false');\r\n\r\n    this.$selection = $selection;\r\n\r\n    return $selection;\r\n  };\r\n\r\n  BaseSelection.prototype.bind = function (container, $container) {\r\n    var self = this;\r\n\r\n    var resultsId = container.id + '-results';\r\n\r\n    this.container = container;\r\n\r\n    this.$selection.on('focus', function (evt) {\r\n      self.trigger('focus', evt);\r\n    });\r\n\r\n    this.$selection.on('blur', function (evt) {\r\n      self._handleBlur(evt);\r\n    });\r\n\r\n    this.$selection.on('keydown', function (evt) {\r\n      self.trigger('keypress', evt);\r\n\r\n      if (evt.which === KEYS.SPACE) {\r\n        evt.preventDefault();\r\n      }\r\n    });\r\n\r\n    container.on('results:focus', function (params) {\r\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\r\n    });\r\n\r\n    container.on('selection:update', function (params) {\r\n      self.update(params.data);\r\n    });\r\n\r\n    container.on('open', function () {\r\n      // When the dropdown is open, aria-expanded=\"true\"\r\n      self.$selection.attr('aria-expanded', 'true');\r\n      self.$selection.attr('aria-owns', resultsId);\r\n\r\n      self._attachCloseHandler(container);\r\n    });\r\n\r\n    container.on('close', function () {\r\n      // When the dropdown is closed, aria-expanded=\"false\"\r\n      self.$selection.attr('aria-expanded', 'false');\r\n      self.$selection.removeAttr('aria-activedescendant');\r\n      self.$selection.removeAttr('aria-owns');\r\n\r\n      self.$selection.trigger('focus');\r\n\r\n      self._detachCloseHandler(container);\r\n    });\r\n\r\n    container.on('enable', function () {\r\n      self.$selection.attr('tabindex', self._tabindex);\r\n      self.$selection.attr('aria-disabled', 'false');\r\n    });\r\n\r\n    container.on('disable', function () {\r\n      self.$selection.attr('tabindex', '-1');\r\n      self.$selection.attr('aria-disabled', 'true');\r\n    });\r\n  };\r\n\r\n  BaseSelection.prototype._handleBlur = function (evt) {\r\n    var self = this;\r\n\r\n    // This needs to be delayed as the active element is the body when the tab\r\n    // key is pressed, possibly along with others.\r\n    window.setTimeout(function () {\r\n      // Don't trigger `blur` if the focus is still in the selection\r\n      if (\r\n        (document.activeElement == self.$selection[0]) ||\r\n        ($.contains(self.$selection[0], document.activeElement))\r\n      ) {\r\n        return;\r\n      }\r\n\r\n      self.trigger('blur', evt);\r\n    }, 1);\r\n  };\r\n\r\n  BaseSelection.prototype._attachCloseHandler = function (container) {\r\n\r\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\r\n      var $target = $(e.target);\r\n\r\n      var $select = $target.closest('.select2');\r\n\r\n      var $all = $('.select2.select2-container--open');\r\n\r\n      $all.each(function () {\r\n        if (this == $select[0]) {\r\n          return;\r\n        }\r\n\r\n        var $element = Utils.GetData(this, 'element');\r\n\r\n        $element.select2('close');\r\n      });\r\n    });\r\n  };\r\n\r\n  BaseSelection.prototype._detachCloseHandler = function (container) {\r\n    $(document.body).off('mousedown.select2.' + container.id);\r\n  };\r\n\r\n  BaseSelection.prototype.position = function ($selection, $container) {\r\n    var $selectionContainer = $container.find('.selection');\r\n    $selectionContainer.append($selection);\r\n  };\r\n\r\n  BaseSelection.prototype.destroy = function () {\r\n    this._detachCloseHandler(this.container);\r\n  };\r\n\r\n  BaseSelection.prototype.update = function (data) {\r\n    throw new Error('The `update` method must be defined in child classes.');\r\n  };\r\n\r\n  /**\r\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\r\n   * object.\r\n   *\r\n   * @return {true} if the instance is not disabled.\r\n   * @return {false} if the instance is disabled.\r\n   */\r\n  BaseSelection.prototype.isEnabled = function () {\r\n    return !this.isDisabled();\r\n  };\r\n\r\n  /**\r\n   * Helper method to abstract the \"disabled\" state of this object.\r\n   *\r\n   * @return {true} if the disabled option is true.\r\n   * @return {false} if the disabled option is false.\r\n   */\r\n  BaseSelection.prototype.isDisabled = function () {\r\n    return this.options.get('disabled');\r\n  };\r\n\r\n  return BaseSelection;\r\n});\r\n\r\nS2.define('select2/selection/single',[\r\n  'jquery',\r\n  './base',\r\n  '../utils',\r\n  '../keys'\r\n], function ($, BaseSelection, Utils, KEYS) {\r\n  function SingleSelection () {\r\n    SingleSelection.__super__.constructor.apply(this, arguments);\r\n  }\r\n\r\n  Utils.Extend(SingleSelection, BaseSelection);\r\n\r\n  SingleSelection.prototype.render = function () {\r\n    var $selection = SingleSelection.__super__.render.call(this);\r\n\r\n    $selection[0].classList.add('select2-selection--single');\r\n\r\n    $selection.html(\r\n      '<span class=\"select2-selection__rendered\"></span>' +\r\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\r\n        '<b role=\"presentation\"></b>' +\r\n      '</span>'\r\n    );\r\n\r\n    return $selection;\r\n  };\r\n\r\n  SingleSelection.prototype.bind = function (container, $container) {\r\n    var self = this;\r\n\r\n    SingleSelection.__super__.bind.apply(this, arguments);\r\n\r\n    var id = container.id + '-container';\r\n\r\n    this.$selection.find('.select2-selection__rendered')\r\n      .attr('id', id)\r\n      .attr('role', 'textbox')\r\n      .attr('aria-readonly', 'true');\r\n    this.$selection.attr('aria-labelledby', id);\r\n    this.$selection.attr('aria-controls', id);\r\n\r\n    this.$selection.on('mousedown', function (evt) {\r\n      // Only respond to left clicks\r\n      if (evt.which !== 1) {\r\n        return;\r\n      }\r\n\r\n      self.trigger('toggle', {\r\n        originalEvent: evt\r\n      });\r\n    });\r\n\r\n    this.$selection.on('focus', function (evt) {\r\n      // User focuses on the container\r\n    });\r\n\r\n    this.$selection.on('blur', function (evt) {\r\n      // User exits the container\r\n    });\r\n\r\n    container.on('focus', function (evt) {\r\n      if (!container.isOpen()) {\r\n        self.$selection.trigger('focus');\r\n      }\r\n    });\r\n  };\r\n\r\n  SingleSelection.prototype.clear = function () {\r\n    var $rendered = this.$selection.find('.select2-selection__rendered');\r\n    $rendered.empty();\r\n    $rendered.removeAttr('title'); // clear tooltip on empty\r\n  };\r\n\r\n  SingleSelection.prototype.display = function (data, container) {\r\n    var template = this.options.get('templateSelection');\r\n    var escapeMarkup = this.options.get('escapeMarkup');\r\n\r\n    return escapeMarkup(template(data, container));\r\n  };\r\n\r\n  SingleSelection.prototype.selectionContainer = function () {\r\n    return $('<span></span>');\r\n  };\r\n\r\n  SingleSelection.prototype.update = function (data) {\r\n    if (data.length === 0) {\r\n      this.clear();\r\n      return;\r\n    }\r\n\r\n    var selection = data[0];\r\n\r\n    var $rendered = this.$selection.find('.select2-selection__rendered');\r\n    var formatted = this.display(selection, $rendered);\r\n\r\n    $rendered.empty().append(formatted);\r\n\r\n    var title = selection.title || selection.text;\r\n\r\n    if (title) {\r\n      $rendered.attr('title', title);\r\n    } else {\r\n      $rendered.removeAttr('title');\r\n    }\r\n  };\r\n\r\n  return SingleSelection;\r\n});\r\n\r\nS2.define('select2/selection/multiple',[\r\n  'jquery',\r\n  './base',\r\n  '../utils'\r\n], function ($, BaseSelection, Utils) {\r\n  function MultipleSelection ($element, options) {\r\n    MultipleSelection.__super__.constructor.apply(this, arguments);\r\n  }\r\n\r\n  Utils.Extend(MultipleSelection, BaseSelection);\r\n\r\n  MultipleSelection.prototype.render = function () {\r\n    var $selection = MultipleSelection.__super__.render.call(this);\r\n\r\n    $selection[0].classList.add('select2-selection--multiple');\r\n\r\n    $selection.html(\r\n      '<ul class=\"select2-selection__rendered\"></ul>'\r\n    );\r\n\r\n    return $selection;\r\n  };\r\n\r\n  MultipleSelection.prototype.bind = function (container, $container) {\r\n    var self = this;\r\n\r\n    MultipleSelection.__super__.bind.apply(this, arguments);\r\n\r\n    var id = container.id + '-container';\r\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\r\n\r\n    this.$selection.on('click', function (evt) {\r\n      self.trigger('toggle', {\r\n        originalEvent: evt\r\n      });\r\n    });\r\n\r\n    this.$selection.on(\r\n      'click',\r\n      '.select2-selection__choice__remove',\r\n      function (evt) {\r\n        // Ignore the event if it is disabled\r\n        if (self.isDisabled()) {\r\n          return;\r\n        }\r\n\r\n        var $remove = $(this);\r\n        var $selection = $remove.parent();\r\n\r\n        var data = Utils.GetData($selection[0], 'data');\r\n\r\n        self.trigger('unselect', {\r\n          originalEvent: evt,\r\n          data: data\r\n        });\r\n      }\r\n    );\r\n\r\n    this.$selection.on(\r\n      'keydown',\r\n      '.select2-selection__choice__remove',\r\n      function (evt) {\r\n        // Ignore the event if it is disabled\r\n        if (self.isDisabled()) {\r\n          return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n      }\r\n    );\r\n  };\r\n\r\n  MultipleSelection.prototype.clear = function () {\r\n    var $rendered = this.$selection.find('.select2-selection__rendered');\r\n    $rendered.empty();\r\n    $rendered.removeAttr('title');\r\n  };\r\n\r\n  MultipleSelection.prototype.display = function (data, container) {\r\n    var template = this.options.get('templateSelection');\r\n    var escapeMarkup = this.options.get('escapeMarkup');\r\n\r\n    return escapeMarkup(template(data, container));\r\n  };\r\n\r\n  MultipleSelection.prototype.selectionContainer = function () {\r\n    var $container = $(\r\n      '<li class=\"select2-selection__choice\">' +\r\n        '<button type=\"button\" class=\"select2-selection__choice__remove\" ' +\r\n        'tabindex=\"-1\">' +\r\n          '<span aria-hidden=\"true\">&times;</span>' +\r\n        '</button>' +\r\n        '<span class=\"select2-selection__choice__display\"></span>' +\r\n      '</li>'\r\n    );\r\n\r\n    return $container;\r\n  };\r\n\r\n  MultipleSelection.prototype.update = function (data) {\r\n    this.clear();\r\n\r\n    if (data.length === 0) {\r\n      return;\r\n    }\r\n\r\n    var $selections = [];\r\n\r\n    var selectionIdPrefix = this.$selection.find('.select2-selection__rendered')\r\n      .attr('id') + '-choice-';\r\n\r\n    for (var d = 0; d < data.length; d++) {\r\n      var selection = data[d];\r\n\r\n      var $selection = this.selectionContainer();\r\n      var formatted = this.display(selection, $selection);\r\n\r\n      var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-';\r\n\r\n      if (selection.id) {\r\n        selectionId += selection.id;\r\n      } else {\r\n        selectionId += Utils.generateChars(4);\r\n      }\r\n\r\n      $selection.find('.select2-selection__choice__display')\r\n        .append(formatted)\r\n        .attr('id', selectionId);\r\n\r\n      var title = selection.title || selection.text;\r\n\r\n      if (title) {\r\n        $selection.attr('title', title);\r\n      }\r\n\r\n      var removeItem = this.options.get('translations').get('removeItem');\r\n\r\n      var $remove = $selection.find('.select2-selection__choice__remove');\r\n\r\n      $remove.attr('title', removeItem());\r\n      $remove.attr('aria-label', removeItem());\r\n      $remove.attr('aria-describedby', selectionId);\r\n\r\n      Utils.StoreData($selection[0], 'data', selection);\r\n\r\n      $selections.push($selection);\r\n    }\r\n\r\n    var $rendered = this.$selection.find('.select2-selection__rendered');\r\n\r\n    $rendered.append($selections);\r\n  };\r\n\r\n  return MultipleSelection;\r\n});\r\n\r\nS2.define('select2/selection/placeholder',[\r\n\r\n], function () {\r\n  function Placeholder (decorated, $element, options) {\r\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\r\n\r\n    decorated.call(this, $element, options);\r\n  }\r\n\r\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\r\n    if (typeof placeholder === 'string') {\r\n      placeholder = {\r\n        id: '',\r\n        text: placeholder\r\n      };\r\n    }\r\n\r\n    return placeholder;\r\n  };\r\n\r\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\r\n    var $placeholder = this.selectionContainer();\r\n\r\n    $placeholder.html(this.display(placeholder));\r\n    $placeholder[0].classList.add('select2-selection__placeholder');\r\n    $placeholder[0].classList.remove('select2-selection__choice');\r\n\r\n    var placeholderTitle = placeholder.title ||\r\n      placeholder.text ||\r\n      $placeholder.text();\r\n\r\n    this.$selection.find('.select2-selection__rendered').attr(\r\n      'title',\r\n      placeholderTitle\r\n    );\r\n\r\n    return $placeholder;\r\n  };\r\n\r\n  Placeholder.prototype.update = function (decorated, data) {\r\n    var singlePlaceholder = (\r\n      data.length == 1 && data[0].id != this.placeholder.id\r\n    );\r\n    var multipleSelections = data.length > 1;\r\n\r\n    if (multipleSelections || singlePlaceholder) {\r\n      return decorated.call(this, data);\r\n    }\r\n\r\n    this.clear();\r\n\r\n    var $placeholder = this.createPlaceholder(this.placeholder);\r\n\r\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\r\n  };\r\n\r\n  return Placeholder;\r\n});\r\n\r\nS2.define('select2/selection/allowClear',[\r\n  'jquery',\r\n  '../keys',\r\n  '../utils'\r\n], function ($, KEYS, Utils) {\r\n  function AllowClear () { }\r\n\r\n  AllowClear.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    if (this.placeholder == null) {\r\n      if (this.options.get('debug') && window.console && console.error) {\r\n        console.error(\r\n          'Select2: The `allowClear` option should be used in combination ' +\r\n          'with the `placeholder` option.'\r\n        );\r\n      }\r\n    }\r\n\r\n    this.$selection.on('mousedown', '.select2-selection__clear',\r\n      function (evt) {\r\n        self._handleClear(evt);\r\n    });\r\n\r\n    container.on('keypress', function (evt) {\r\n      self._handleKeyboardClear(evt, container);\r\n    });\r\n  };\r\n\r\n  AllowClear.prototype._handleClear = function (_, evt) {\r\n    // Ignore the event if it is disabled\r\n    if (this.isDisabled()) {\r\n      return;\r\n    }\r\n\r\n    var $clear = this.$selection.find('.select2-selection__clear');\r\n\r\n    // Ignore the event if nothing has been selected\r\n    if ($clear.length === 0) {\r\n      return;\r\n    }\r\n\r\n    evt.stopPropagation();\r\n\r\n    var data = Utils.GetData($clear[0], 'data');\r\n\r\n    var previousVal = this.$element.val();\r\n    this.$element.val(this.placeholder.id);\r\n\r\n    var unselectData = {\r\n      data: data\r\n    };\r\n    this.trigger('clear', unselectData);\r\n    if (unselectData.prevented) {\r\n      this.$element.val(previousVal);\r\n      return;\r\n    }\r\n\r\n    for (var d = 0; d < data.length; d++) {\r\n      unselectData = {\r\n        data: data[d]\r\n      };\r\n\r\n      // Trigger the `unselect` event, so people can prevent it from being\r\n      // cleared.\r\n      this.trigger('unselect', unselectData);\r\n\r\n      // If the event was prevented, don't clear it out.\r\n      if (unselectData.prevented) {\r\n        this.$element.val(previousVal);\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.$element.trigger('input').trigger('change');\r\n\r\n    this.trigger('toggle', {});\r\n  };\r\n\r\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\r\n    if (container.isOpen()) {\r\n      return;\r\n    }\r\n\r\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\r\n      this._handleClear(evt);\r\n    }\r\n  };\r\n\r\n  AllowClear.prototype.update = function (decorated, data) {\r\n    decorated.call(this, data);\r\n\r\n    this.$selection.find('.select2-selection__clear').remove();\r\n    this.$selection[0].classList.remove('select2-selection--clearable');\r\n\r\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\r\n        data.length === 0) {\r\n      return;\r\n    }\r\n\r\n    var selectionId = this.$selection.find('.select2-selection__rendered')\r\n      .attr('id');\r\n\r\n    var removeAll = this.options.get('translations').get('removeAllItems');\r\n\r\n    var $remove = $(\r\n      '<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\">' +\r\n        '<span aria-hidden=\"true\">&times;</span>' +\r\n      '</button>'\r\n    );\r\n    $remove.attr('title', removeAll());\r\n    $remove.attr('aria-label', removeAll());\r\n    $remove.attr('aria-describedby', selectionId);\r\n    Utils.StoreData($remove[0], 'data', data);\r\n\r\n    this.$selection.prepend($remove);\r\n    this.$selection[0].classList.add('select2-selection--clearable');\r\n  };\r\n\r\n  return AllowClear;\r\n});\r\n\r\nS2.define('select2/selection/search',[\r\n  'jquery',\r\n  '../utils',\r\n  '../keys'\r\n], function ($, Utils, KEYS) {\r\n  function Search (decorated, $element, options) {\r\n    decorated.call(this, $element, options);\r\n  }\r\n\r\n  Search.prototype.render = function (decorated) {\r\n    var searchLabel = this.options.get('translations').get('search');\r\n    var $search = $(\r\n      '<span class=\"select2-search select2-search--inline\">' +\r\n        '<textarea class=\"select2-search__field\"'+\r\n        ' type=\"search\" tabindex=\"-1\"' +\r\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\r\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" >' +\r\n        '</textarea>' +\r\n      '</span>'\r\n    );\r\n\r\n    this.$searchContainer = $search;\r\n    this.$search = $search.find('textarea');\r\n\r\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\r\n    this.$search.attr('aria-label', searchLabel());\r\n\r\n    var $rendered = decorated.call(this);\r\n\r\n    this._transferTabIndex();\r\n    $rendered.append(this.$searchContainer);\r\n\r\n    return $rendered;\r\n  };\r\n\r\n  Search.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    var resultsId = container.id + '-results';\r\n    var selectionId = container.id + '-container';\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    self.$search.attr('aria-describedby', selectionId);\r\n\r\n    container.on('open', function () {\r\n      self.$search.attr('aria-controls', resultsId);\r\n      self.$search.trigger('focus');\r\n    });\r\n\r\n    container.on('close', function () {\r\n      self.$search.val('');\r\n      self.resizeSearch();\r\n      self.$search.removeAttr('aria-controls');\r\n      self.$search.removeAttr('aria-activedescendant');\r\n      self.$search.trigger('focus');\r\n    });\r\n\r\n    container.on('enable', function () {\r\n      self.$search.prop('disabled', false);\r\n\r\n      self._transferTabIndex();\r\n    });\r\n\r\n    container.on('disable', function () {\r\n      self.$search.prop('disabled', true);\r\n    });\r\n\r\n    container.on('focus', function (evt) {\r\n      self.$search.trigger('focus');\r\n    });\r\n\r\n    container.on('results:focus', function (params) {\r\n      if (params.data._resultId) {\r\n        self.$search.attr('aria-activedescendant', params.data._resultId);\r\n      } else {\r\n        self.$search.removeAttr('aria-activedescendant');\r\n      }\r\n    });\r\n\r\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\r\n      self.trigger('focus', evt);\r\n    });\r\n\r\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\r\n      self._handleBlur(evt);\r\n    });\r\n\r\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\r\n      evt.stopPropagation();\r\n\r\n      self.trigger('keypress', evt);\r\n\r\n      self._keyUpPrevented = evt.isDefaultPrevented();\r\n\r\n      var key = evt.which;\r\n\r\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\r\n        var $previousChoice = self.$selection\r\n          .find('.select2-selection__choice').last();\r\n\r\n        if ($previousChoice.length > 0) {\r\n          var item = Utils.GetData($previousChoice[0], 'data');\r\n\r\n          self.searchRemoveChoice(item);\r\n\r\n          evt.preventDefault();\r\n        }\r\n      }\r\n    });\r\n\r\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\r\n      if (self.$search.val()) {\r\n        evt.stopPropagation();\r\n      }\r\n    });\r\n\r\n    // Try to detect the IE version should the `documentMode` property that\r\n    // is stored on the document. This is only implemented in IE and is\r\n    // slightly cleaner than doing a user agent check.\r\n    // This property is not available in Edge, but Edge also doesn't have\r\n    // this bug.\r\n    var msie = document.documentMode;\r\n    var disableInputEvents = msie && msie <= 11;\r\n\r\n    // Workaround for browsers which do not support the `input` event\r\n    // This will prevent double-triggering of events for browsers which support\r\n    // both the `keyup` and `input` events.\r\n    this.$selection.on(\r\n      'input.searchcheck',\r\n      '.select2-search--inline',\r\n      function (evt) {\r\n        // IE will trigger the `input` event when a placeholder is used on a\r\n        // search box. To get around this issue, we are forced to ignore all\r\n        // `input` events in IE and keep using `keyup`.\r\n        if (disableInputEvents) {\r\n          self.$selection.off('input.search input.searchcheck');\r\n          return;\r\n        }\r\n\r\n        // Unbind the duplicated `keyup` event\r\n        self.$selection.off('keyup.search');\r\n      }\r\n    );\r\n\r\n    this.$selection.on(\r\n      'keyup.search input.search',\r\n      '.select2-search--inline',\r\n      function (evt) {\r\n        // IE will trigger the `input` event when a placeholder is used on a\r\n        // search box. To get around this issue, we are forced to ignore all\r\n        // `input` events in IE and keep using `keyup`.\r\n        if (disableInputEvents && evt.type === 'input') {\r\n          self.$selection.off('input.search input.searchcheck');\r\n          return;\r\n        }\r\n\r\n        var key = evt.which;\r\n\r\n        // We can freely ignore events from modifier keys\r\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\r\n          return;\r\n        }\r\n\r\n        // Tabbing will be handled during the `keydown` phase\r\n        if (key == KEYS.TAB) {\r\n          return;\r\n        }\r\n\r\n        self.handleSearch(evt);\r\n      }\r\n    );\r\n  };\r\n\r\n  /**\r\n   * This method will transfer the tabindex attribute from the rendered\r\n   * selection to the search box. This allows for the search box to be used as\r\n   * the primary focus instead of the selection container.\r\n   *\r\n   * @private\r\n   */\r\n  Search.prototype._transferTabIndex = function (decorated) {\r\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\r\n    this.$selection.attr('tabindex', '-1');\r\n  };\r\n\r\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\r\n    this.$search.attr('placeholder', placeholder.text);\r\n  };\r\n\r\n  Search.prototype.update = function (decorated, data) {\r\n    var searchHadFocus = this.$search[0] == document.activeElement;\r\n\r\n    this.$search.attr('placeholder', '');\r\n\r\n    decorated.call(this, data);\r\n\r\n    this.resizeSearch();\r\n    if (searchHadFocus) {\r\n      this.$search.trigger('focus');\r\n    }\r\n  };\r\n\r\n  Search.prototype.handleSearch = function () {\r\n    this.resizeSearch();\r\n\r\n    if (!this._keyUpPrevented) {\r\n      var input = this.$search.val();\r\n\r\n      this.trigger('query', {\r\n        term: input\r\n      });\r\n    }\r\n\r\n    this._keyUpPrevented = false;\r\n  };\r\n\r\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\r\n    this.trigger('unselect', {\r\n      data: item\r\n    });\r\n\r\n    this.$search.val(item.text);\r\n    this.handleSearch();\r\n  };\r\n\r\n  Search.prototype.resizeSearch = function () {\r\n    this.$search.css('width', '25px');\r\n\r\n    var width = '100%';\r\n\r\n    if (this.$search.attr('placeholder') === '') {\r\n      var minimumWidth = this.$search.val().length + 1;\r\n\r\n      width = (minimumWidth * 0.75) + 'em';\r\n    }\r\n\r\n    this.$search.css('width', width);\r\n  };\r\n\r\n  return Search;\r\n});\r\n\r\nS2.define('select2/selection/selectionCss',[\r\n  '../utils'\r\n], function (Utils) {\r\n  function SelectionCSS () { }\r\n\r\n  SelectionCSS.prototype.render = function (decorated) {\r\n    var $selection = decorated.call(this);\r\n\r\n    var selectionCssClass = this.options.get('selectionCssClass') || '';\r\n\r\n    if (selectionCssClass.indexOf(':all:') !== -1) {\r\n      selectionCssClass = selectionCssClass.replace(':all:', '');\r\n\r\n      Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);\r\n    }\r\n\r\n    $selection.addClass(selectionCssClass);\r\n\r\n    return $selection;\r\n  };\r\n\r\n  return SelectionCSS;\r\n});\r\n\r\nS2.define('select2/selection/eventRelay',[\r\n  'jquery'\r\n], function ($) {\r\n  function EventRelay () { }\r\n\r\n  EventRelay.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n    var relayEvents = [\r\n      'open', 'opening',\r\n      'close', 'closing',\r\n      'select', 'selecting',\r\n      'unselect', 'unselecting',\r\n      'clear', 'clearing'\r\n    ];\r\n\r\n    var preventableEvents = [\r\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\r\n    ];\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    container.on('*', function (name, params) {\r\n      // Ignore events that should not be relayed\r\n      if (relayEvents.indexOf(name) === -1) {\r\n        return;\r\n      }\r\n\r\n      // The parameters should always be an object\r\n      params = params || {};\r\n\r\n      // Generate the jQuery event for the Select2 event\r\n      var evt = $.Event('select2:' + name, {\r\n        params: params\r\n      });\r\n\r\n      self.$element.trigger(evt);\r\n\r\n      // Only handle preventable events if it was one\r\n      if (preventableEvents.indexOf(name) === -1) {\r\n        return;\r\n      }\r\n\r\n      params.prevented = evt.isDefaultPrevented();\r\n    });\r\n  };\r\n\r\n  return EventRelay;\r\n});\r\n\r\nS2.define('select2/translation',[\r\n  'jquery',\r\n  'require'\r\n], function ($, require) {\r\n  function Translation (dict) {\r\n    this.dict = dict || {};\r\n  }\r\n\r\n  Translation.prototype.all = function () {\r\n    return this.dict;\r\n  };\r\n\r\n  Translation.prototype.get = function (key) {\r\n    return this.dict[key];\r\n  };\r\n\r\n  Translation.prototype.extend = function (translation) {\r\n    this.dict = $.extend({}, translation.all(), this.dict);\r\n  };\r\n\r\n  // Static functions\r\n\r\n  Translation._cache = {};\r\n\r\n  Translation.loadPath = function (path) {\r\n    if (!(path in Translation._cache)) {\r\n      var translations = require(path);\r\n\r\n      Translation._cache[path] = translations;\r\n    }\r\n\r\n    return new Translation(Translation._cache[path]);\r\n  };\r\n\r\n  return Translation;\r\n});\r\n\r\nS2.define('select2/diacritics',[\r\n\r\n], function () {\r\n  var diacritics = {\r\n    '\\u24B6': 'A',\r\n    '\\uFF21': 'A',\r\n    '\\u00C0': 'A',\r\n    '\\u00C1': 'A',\r\n    '\\u00C2': 'A',\r\n    '\\u1EA6': 'A',\r\n    '\\u1EA4': 'A',\r\n    '\\u1EAA': 'A',\r\n    '\\u1EA8': 'A',\r\n    '\\u00C3': 'A',\r\n    '\\u0100': 'A',\r\n    '\\u0102': 'A',\r\n    '\\u1EB0': 'A',\r\n    '\\u1EAE': 'A',\r\n    '\\u1EB4': 'A',\r\n    '\\u1EB2': 'A',\r\n    '\\u0226': 'A',\r\n    '\\u01E0': 'A',\r\n    '\\u00C4': 'A',\r\n    '\\u01DE': 'A',\r\n    '\\u1EA2': 'A',\r\n    '\\u00C5': 'A',\r\n    '\\u01FA': 'A',\r\n    '\\u01CD': 'A',\r\n    '\\u0200': 'A',\r\n    '\\u0202': 'A',\r\n    '\\u1EA0': 'A',\r\n    '\\u1EAC': 'A',\r\n    '\\u1EB6': 'A',\r\n    '\\u1E00': 'A',\r\n    '\\u0104': 'A',\r\n    '\\u023A': 'A',\r\n    '\\u2C6F': 'A',\r\n    '\\uA732': 'AA',\r\n    '\\u00C6': 'AE',\r\n    '\\u01FC': 'AE',\r\n    '\\u01E2': 'AE',\r\n    '\\uA734': 'AO',\r\n    '\\uA736': 'AU',\r\n    '\\uA738': 'AV',\r\n    '\\uA73A': 'AV',\r\n    '\\uA73C': 'AY',\r\n    '\\u24B7': 'B',\r\n    '\\uFF22': 'B',\r\n    '\\u1E02': 'B',\r\n    '\\u1E04': 'B',\r\n    '\\u1E06': 'B',\r\n    '\\u0243': 'B',\r\n    '\\u0182': 'B',\r\n    '\\u0181': 'B',\r\n    '\\u24B8': 'C',\r\n    '\\uFF23': 'C',\r\n    '\\u0106': 'C',\r\n    '\\u0108': 'C',\r\n    '\\u010A': 'C',\r\n    '\\u010C': 'C',\r\n    '\\u00C7': 'C',\r\n    '\\u1E08': 'C',\r\n    '\\u0187': 'C',\r\n    '\\u023B': 'C',\r\n    '\\uA73E': 'C',\r\n    '\\u24B9': 'D',\r\n    '\\uFF24': 'D',\r\n    '\\u1E0A': 'D',\r\n    '\\u010E': 'D',\r\n    '\\u1E0C': 'D',\r\n    '\\u1E10': 'D',\r\n    '\\u1E12': 'D',\r\n    '\\u1E0E': 'D',\r\n    '\\u0110': 'D',\r\n    '\\u018B': 'D',\r\n    '\\u018A': 'D',\r\n    '\\u0189': 'D',\r\n    '\\uA779': 'D',\r\n    '\\u01F1': 'DZ',\r\n    '\\u01C4': 'DZ',\r\n    '\\u01F2': 'Dz',\r\n    '\\u01C5': 'Dz',\r\n    '\\u24BA': 'E',\r\n    '\\uFF25': 'E',\r\n    '\\u00C8': 'E',\r\n    '\\u00C9': 'E',\r\n    '\\u00CA': 'E',\r\n    '\\u1EC0': 'E',\r\n    '\\u1EBE': 'E',\r\n    '\\u1EC4': 'E',\r\n    '\\u1EC2': 'E',\r\n    '\\u1EBC': 'E',\r\n    '\\u0112': 'E',\r\n    '\\u1E14': 'E',\r\n    '\\u1E16': 'E',\r\n    '\\u0114': 'E',\r\n    '\\u0116': 'E',\r\n    '\\u00CB': 'E',\r\n    '\\u1EBA': 'E',\r\n    '\\u011A': 'E',\r\n    '\\u0204': 'E',\r\n    '\\u0206': 'E',\r\n    '\\u1EB8': 'E',\r\n    '\\u1EC6': 'E',\r\n    '\\u0228': 'E',\r\n    '\\u1E1C': 'E',\r\n    '\\u0118': 'E',\r\n    '\\u1E18': 'E',\r\n    '\\u1E1A': 'E',\r\n    '\\u0190': 'E',\r\n    '\\u018E': 'E',\r\n    '\\u24BB': 'F',\r\n    '\\uFF26': 'F',\r\n    '\\u1E1E': 'F',\r\n    '\\u0191': 'F',\r\n    '\\uA77B': 'F',\r\n    '\\u24BC': 'G',\r\n    '\\uFF27': 'G',\r\n    '\\u01F4': 'G',\r\n    '\\u011C': 'G',\r\n    '\\u1E20': 'G',\r\n    '\\u011E': 'G',\r\n    '\\u0120': 'G',\r\n    '\\u01E6': 'G',\r\n    '\\u0122': 'G',\r\n    '\\u01E4': 'G',\r\n    '\\u0193': 'G',\r\n    '\\uA7A0': 'G',\r\n    '\\uA77D': 'G',\r\n    '\\uA77E': 'G',\r\n    '\\u24BD': 'H',\r\n    '\\uFF28': 'H',\r\n    '\\u0124': 'H',\r\n    '\\u1E22': 'H',\r\n    '\\u1E26': 'H',\r\n    '\\u021E': 'H',\r\n    '\\u1E24': 'H',\r\n    '\\u1E28': 'H',\r\n    '\\u1E2A': 'H',\r\n    '\\u0126': 'H',\r\n    '\\u2C67': 'H',\r\n    '\\u2C75': 'H',\r\n    '\\uA78D': 'H',\r\n    '\\u24BE': 'I',\r\n    '\\uFF29': 'I',\r\n    '\\u00CC': 'I',\r\n    '\\u00CD': 'I',\r\n    '\\u00CE': 'I',\r\n    '\\u0128': 'I',\r\n    '\\u012A': 'I',\r\n    '\\u012C': 'I',\r\n    '\\u0130': 'I',\r\n    '\\u00CF': 'I',\r\n    '\\u1E2E': 'I',\r\n    '\\u1EC8': 'I',\r\n    '\\u01CF': 'I',\r\n    '\\u0208': 'I',\r\n    '\\u020A': 'I',\r\n    '\\u1ECA': 'I',\r\n    '\\u012E': 'I',\r\n    '\\u1E2C': 'I',\r\n    '\\u0197': 'I',\r\n    '\\u24BF': 'J',\r\n    '\\uFF2A': 'J',\r\n    '\\u0134': 'J',\r\n    '\\u0248': 'J',\r\n    '\\u24C0': 'K',\r\n    '\\uFF2B': 'K',\r\n    '\\u1E30': 'K',\r\n    '\\u01E8': 'K',\r\n    '\\u1E32': 'K',\r\n    '\\u0136': 'K',\r\n    '\\u1E34': 'K',\r\n    '\\u0198': 'K',\r\n    '\\u2C69': 'K',\r\n    '\\uA740': 'K',\r\n    '\\uA742': 'K',\r\n    '\\uA744': 'K',\r\n    '\\uA7A2': 'K',\r\n    '\\u24C1': 'L',\r\n    '\\uFF2C': 'L',\r\n    '\\u013F': 'L',\r\n    '\\u0139': 'L',\r\n    '\\u013D': 'L',\r\n    '\\u1E36': 'L',\r\n    '\\u1E38': 'L',\r\n    '\\u013B': 'L',\r\n    '\\u1E3C': 'L',\r\n    '\\u1E3A': 'L',\r\n    '\\u0141': 'L',\r\n    '\\u023D': 'L',\r\n    '\\u2C62': 'L',\r\n    '\\u2C60': 'L',\r\n    '\\uA748': 'L',\r\n    '\\uA746': 'L',\r\n    '\\uA780': 'L',\r\n    '\\u01C7': 'LJ',\r\n    '\\u01C8': 'Lj',\r\n    '\\u24C2': 'M',\r\n    '\\uFF2D': 'M',\r\n    '\\u1E3E': 'M',\r\n    '\\u1E40': 'M',\r\n    '\\u1E42': 'M',\r\n    '\\u2C6E': 'M',\r\n    '\\u019C': 'M',\r\n    '\\u24C3': 'N',\r\n    '\\uFF2E': 'N',\r\n    '\\u01F8': 'N',\r\n    '\\u0143': 'N',\r\n    '\\u00D1': 'N',\r\n    '\\u1E44': 'N',\r\n    '\\u0147': 'N',\r\n    '\\u1E46': 'N',\r\n    '\\u0145': 'N',\r\n    '\\u1E4A': 'N',\r\n    '\\u1E48': 'N',\r\n    '\\u0220': 'N',\r\n    '\\u019D': 'N',\r\n    '\\uA790': 'N',\r\n    '\\uA7A4': 'N',\r\n    '\\u01CA': 'NJ',\r\n    '\\u01CB': 'Nj',\r\n    '\\u24C4': 'O',\r\n    '\\uFF2F': 'O',\r\n    '\\u00D2': 'O',\r\n    '\\u00D3': 'O',\r\n    '\\u00D4': 'O',\r\n    '\\u1ED2': 'O',\r\n    '\\u1ED0': 'O',\r\n    '\\u1ED6': 'O',\r\n    '\\u1ED4': 'O',\r\n    '\\u00D5': 'O',\r\n    '\\u1E4C': 'O',\r\n    '\\u022C': 'O',\r\n    '\\u1E4E': 'O',\r\n    '\\u014C': 'O',\r\n    '\\u1E50': 'O',\r\n    '\\u1E52': 'O',\r\n    '\\u014E': 'O',\r\n    '\\u022E': 'O',\r\n    '\\u0230': 'O',\r\n    '\\u00D6': 'O',\r\n    '\\u022A': 'O',\r\n    '\\u1ECE': 'O',\r\n    '\\u0150': 'O',\r\n    '\\u01D1': 'O',\r\n    '\\u020C': 'O',\r\n    '\\u020E': 'O',\r\n    '\\u01A0': 'O',\r\n    '\\u1EDC': 'O',\r\n    '\\u1EDA': 'O',\r\n    '\\u1EE0': 'O',\r\n    '\\u1EDE': 'O',\r\n    '\\u1EE2': 'O',\r\n    '\\u1ECC': 'O',\r\n    '\\u1ED8': 'O',\r\n    '\\u01EA': 'O',\r\n    '\\u01EC': 'O',\r\n    '\\u00D8': 'O',\r\n    '\\u01FE': 'O',\r\n    '\\u0186': 'O',\r\n    '\\u019F': 'O',\r\n    '\\uA74A': 'O',\r\n    '\\uA74C': 'O',\r\n    '\\u0152': 'OE',\r\n    '\\u01A2': 'OI',\r\n    '\\uA74E': 'OO',\r\n    '\\u0222': 'OU',\r\n    '\\u24C5': 'P',\r\n    '\\uFF30': 'P',\r\n    '\\u1E54': 'P',\r\n    '\\u1E56': 'P',\r\n    '\\u01A4': 'P',\r\n    '\\u2C63': 'P',\r\n    '\\uA750': 'P',\r\n    '\\uA752': 'P',\r\n    '\\uA754': 'P',\r\n    '\\u24C6': 'Q',\r\n    '\\uFF31': 'Q',\r\n    '\\uA756': 'Q',\r\n    '\\uA758': 'Q',\r\n    '\\u024A': 'Q',\r\n    '\\u24C7': 'R',\r\n    '\\uFF32': 'R',\r\n    '\\u0154': 'R',\r\n    '\\u1E58': 'R',\r\n    '\\u0158': 'R',\r\n    '\\u0210': 'R',\r\n    '\\u0212': 'R',\r\n    '\\u1E5A': 'R',\r\n    '\\u1E5C': 'R',\r\n    '\\u0156': 'R',\r\n    '\\u1E5E': 'R',\r\n    '\\u024C': 'R',\r\n    '\\u2C64': 'R',\r\n    '\\uA75A': 'R',\r\n    '\\uA7A6': 'R',\r\n    '\\uA782': 'R',\r\n    '\\u24C8': 'S',\r\n    '\\uFF33': 'S',\r\n    '\\u1E9E': 'S',\r\n    '\\u015A': 'S',\r\n    '\\u1E64': 'S',\r\n    '\\u015C': 'S',\r\n    '\\u1E60': 'S',\r\n    '\\u0160': 'S',\r\n    '\\u1E66': 'S',\r\n    '\\u1E62': 'S',\r\n    '\\u1E68': 'S',\r\n    '\\u0218': 'S',\r\n    '\\u015E': 'S',\r\n    '\\u2C7E': 'S',\r\n    '\\uA7A8': 'S',\r\n    '\\uA784': 'S',\r\n    '\\u24C9': 'T',\r\n    '\\uFF34': 'T',\r\n    '\\u1E6A': 'T',\r\n    '\\u0164': 'T',\r\n    '\\u1E6C': 'T',\r\n    '\\u021A': 'T',\r\n    '\\u0162': 'T',\r\n    '\\u1E70': 'T',\r\n    '\\u1E6E': 'T',\r\n    '\\u0166': 'T',\r\n    '\\u01AC': 'T',\r\n    '\\u01AE': 'T',\r\n    '\\u023E': 'T',\r\n    '\\uA786': 'T',\r\n    '\\uA728': 'TZ',\r\n    '\\u24CA': 'U',\r\n    '\\uFF35': 'U',\r\n    '\\u00D9': 'U',\r\n    '\\u00DA': 'U',\r\n    '\\u00DB': 'U',\r\n    '\\u0168': 'U',\r\n    '\\u1E78': 'U',\r\n    '\\u016A': 'U',\r\n    '\\u1E7A': 'U',\r\n    '\\u016C': 'U',\r\n    '\\u00DC': 'U',\r\n    '\\u01DB': 'U',\r\n    '\\u01D7': 'U',\r\n    '\\u01D5': 'U',\r\n    '\\u01D9': 'U',\r\n    '\\u1EE6': 'U',\r\n    '\\u016E': 'U',\r\n    '\\u0170': 'U',\r\n    '\\u01D3': 'U',\r\n    '\\u0214': 'U',\r\n    '\\u0216': 'U',\r\n    '\\u01AF': 'U',\r\n    '\\u1EEA': 'U',\r\n    '\\u1EE8': 'U',\r\n    '\\u1EEE': 'U',\r\n    '\\u1EEC': 'U',\r\n    '\\u1EF0': 'U',\r\n    '\\u1EE4': 'U',\r\n    '\\u1E72': 'U',\r\n    '\\u0172': 'U',\r\n    '\\u1E76': 'U',\r\n    '\\u1E74': 'U',\r\n    '\\u0244': 'U',\r\n    '\\u24CB': 'V',\r\n    '\\uFF36': 'V',\r\n    '\\u1E7C': 'V',\r\n    '\\u1E7E': 'V',\r\n    '\\u01B2': 'V',\r\n    '\\uA75E': 'V',\r\n    '\\u0245': 'V',\r\n    '\\uA760': 'VY',\r\n    '\\u24CC': 'W',\r\n    '\\uFF37': 'W',\r\n    '\\u1E80': 'W',\r\n    '\\u1E82': 'W',\r\n    '\\u0174': 'W',\r\n    '\\u1E86': 'W',\r\n    '\\u1E84': 'W',\r\n    '\\u1E88': 'W',\r\n    '\\u2C72': 'W',\r\n    '\\u24CD': 'X',\r\n    '\\uFF38': 'X',\r\n    '\\u1E8A': 'X',\r\n    '\\u1E8C': 'X',\r\n    '\\u24CE': 'Y',\r\n    '\\uFF39': 'Y',\r\n    '\\u1EF2': 'Y',\r\n    '\\u00DD': 'Y',\r\n    '\\u0176': 'Y',\r\n    '\\u1EF8': 'Y',\r\n    '\\u0232': 'Y',\r\n    '\\u1E8E': 'Y',\r\n    '\\u0178': 'Y',\r\n    '\\u1EF6': 'Y',\r\n    '\\u1EF4': 'Y',\r\n    '\\u01B3': 'Y',\r\n    '\\u024E': 'Y',\r\n    '\\u1EFE': 'Y',\r\n    '\\u24CF': 'Z',\r\n    '\\uFF3A': 'Z',\r\n    '\\u0179': 'Z',\r\n    '\\u1E90': 'Z',\r\n    '\\u017B': 'Z',\r\n    '\\u017D': 'Z',\r\n    '\\u1E92': 'Z',\r\n    '\\u1E94': 'Z',\r\n    '\\u01B5': 'Z',\r\n    '\\u0224': 'Z',\r\n    '\\u2C7F': 'Z',\r\n    '\\u2C6B': 'Z',\r\n    '\\uA762': 'Z',\r\n    '\\u24D0': 'a',\r\n    '\\uFF41': 'a',\r\n    '\\u1E9A': 'a',\r\n    '\\u00E0': 'a',\r\n    '\\u00E1': 'a',\r\n    '\\u00E2': 'a',\r\n    '\\u1EA7': 'a',\r\n    '\\u1EA5': 'a',\r\n    '\\u1EAB': 'a',\r\n    '\\u1EA9': 'a',\r\n    '\\u00E3': 'a',\r\n    '\\u0101': 'a',\r\n    '\\u0103': 'a',\r\n    '\\u1EB1': 'a',\r\n    '\\u1EAF': 'a',\r\n    '\\u1EB5': 'a',\r\n    '\\u1EB3': 'a',\r\n    '\\u0227': 'a',\r\n    '\\u01E1': 'a',\r\n    '\\u00E4': 'a',\r\n    '\\u01DF': 'a',\r\n    '\\u1EA3': 'a',\r\n    '\\u00E5': 'a',\r\n    '\\u01FB': 'a',\r\n    '\\u01CE': 'a',\r\n    '\\u0201': 'a',\r\n    '\\u0203': 'a',\r\n    '\\u1EA1': 'a',\r\n    '\\u1EAD': 'a',\r\n    '\\u1EB7': 'a',\r\n    '\\u1E01': 'a',\r\n    '\\u0105': 'a',\r\n    '\\u2C65': 'a',\r\n    '\\u0250': 'a',\r\n    '\\uA733': 'aa',\r\n    '\\u00E6': 'ae',\r\n    '\\u01FD': 'ae',\r\n    '\\u01E3': 'ae',\r\n    '\\uA735': 'ao',\r\n    '\\uA737': 'au',\r\n    '\\uA739': 'av',\r\n    '\\uA73B': 'av',\r\n    '\\uA73D': 'ay',\r\n    '\\u24D1': 'b',\r\n    '\\uFF42': 'b',\r\n    '\\u1E03': 'b',\r\n    '\\u1E05': 'b',\r\n    '\\u1E07': 'b',\r\n    '\\u0180': 'b',\r\n    '\\u0183': 'b',\r\n    '\\u0253': 'b',\r\n    '\\u24D2': 'c',\r\n    '\\uFF43': 'c',\r\n    '\\u0107': 'c',\r\n    '\\u0109': 'c',\r\n    '\\u010B': 'c',\r\n    '\\u010D': 'c',\r\n    '\\u00E7': 'c',\r\n    '\\u1E09': 'c',\r\n    '\\u0188': 'c',\r\n    '\\u023C': 'c',\r\n    '\\uA73F': 'c',\r\n    '\\u2184': 'c',\r\n    '\\u24D3': 'd',\r\n    '\\uFF44': 'd',\r\n    '\\u1E0B': 'd',\r\n    '\\u010F': 'd',\r\n    '\\u1E0D': 'd',\r\n    '\\u1E11': 'd',\r\n    '\\u1E13': 'd',\r\n    '\\u1E0F': 'd',\r\n    '\\u0111': 'd',\r\n    '\\u018C': 'd',\r\n    '\\u0256': 'd',\r\n    '\\u0257': 'd',\r\n    '\\uA77A': 'd',\r\n    '\\u01F3': 'dz',\r\n    '\\u01C6': 'dz',\r\n    '\\u24D4': 'e',\r\n    '\\uFF45': 'e',\r\n    '\\u00E8': 'e',\r\n    '\\u00E9': 'e',\r\n    '\\u00EA': 'e',\r\n    '\\u1EC1': 'e',\r\n    '\\u1EBF': 'e',\r\n    '\\u1EC5': 'e',\r\n    '\\u1EC3': 'e',\r\n    '\\u1EBD': 'e',\r\n    '\\u0113': 'e',\r\n    '\\u1E15': 'e',\r\n    '\\u1E17': 'e',\r\n    '\\u0115': 'e',\r\n    '\\u0117': 'e',\r\n    '\\u00EB': 'e',\r\n    '\\u1EBB': 'e',\r\n    '\\u011B': 'e',\r\n    '\\u0205': 'e',\r\n    '\\u0207': 'e',\r\n    '\\u1EB9': 'e',\r\n    '\\u1EC7': 'e',\r\n    '\\u0229': 'e',\r\n    '\\u1E1D': 'e',\r\n    '\\u0119': 'e',\r\n    '\\u1E19': 'e',\r\n    '\\u1E1B': 'e',\r\n    '\\u0247': 'e',\r\n    '\\u025B': 'e',\r\n    '\\u01DD': 'e',\r\n    '\\u24D5': 'f',\r\n    '\\uFF46': 'f',\r\n    '\\u1E1F': 'f',\r\n    '\\u0192': 'f',\r\n    '\\uA77C': 'f',\r\n    '\\u24D6': 'g',\r\n    '\\uFF47': 'g',\r\n    '\\u01F5': 'g',\r\n    '\\u011D': 'g',\r\n    '\\u1E21': 'g',\r\n    '\\u011F': 'g',\r\n    '\\u0121': 'g',\r\n    '\\u01E7': 'g',\r\n    '\\u0123': 'g',\r\n    '\\u01E5': 'g',\r\n    '\\u0260': 'g',\r\n    '\\uA7A1': 'g',\r\n    '\\u1D79': 'g',\r\n    '\\uA77F': 'g',\r\n    '\\u24D7': 'h',\r\n    '\\uFF48': 'h',\r\n    '\\u0125': 'h',\r\n    '\\u1E23': 'h',\r\n    '\\u1E27': 'h',\r\n    '\\u021F': 'h',\r\n    '\\u1E25': 'h',\r\n    '\\u1E29': 'h',\r\n    '\\u1E2B': 'h',\r\n    '\\u1E96': 'h',\r\n    '\\u0127': 'h',\r\n    '\\u2C68': 'h',\r\n    '\\u2C76': 'h',\r\n    '\\u0265': 'h',\r\n    '\\u0195': 'hv',\r\n    '\\u24D8': 'i',\r\n    '\\uFF49': 'i',\r\n    '\\u00EC': 'i',\r\n    '\\u00ED': 'i',\r\n    '\\u00EE': 'i',\r\n    '\\u0129': 'i',\r\n    '\\u012B': 'i',\r\n    '\\u012D': 'i',\r\n    '\\u00EF': 'i',\r\n    '\\u1E2F': 'i',\r\n    '\\u1EC9': 'i',\r\n    '\\u01D0': 'i',\r\n    '\\u0209': 'i',\r\n    '\\u020B': 'i',\r\n    '\\u1ECB': 'i',\r\n    '\\u012F': 'i',\r\n    '\\u1E2D': 'i',\r\n    '\\u0268': 'i',\r\n    '\\u0131': 'i',\r\n    '\\u24D9': 'j',\r\n    '\\uFF4A': 'j',\r\n    '\\u0135': 'j',\r\n    '\\u01F0': 'j',\r\n    '\\u0249': 'j',\r\n    '\\u24DA': 'k',\r\n    '\\uFF4B': 'k',\r\n    '\\u1E31': 'k',\r\n    '\\u01E9': 'k',\r\n    '\\u1E33': 'k',\r\n    '\\u0137': 'k',\r\n    '\\u1E35': 'k',\r\n    '\\u0199': 'k',\r\n    '\\u2C6A': 'k',\r\n    '\\uA741': 'k',\r\n    '\\uA743': 'k',\r\n    '\\uA745': 'k',\r\n    '\\uA7A3': 'k',\r\n    '\\u24DB': 'l',\r\n    '\\uFF4C': 'l',\r\n    '\\u0140': 'l',\r\n    '\\u013A': 'l',\r\n    '\\u013E': 'l',\r\n    '\\u1E37': 'l',\r\n    '\\u1E39': 'l',\r\n    '\\u013C': 'l',\r\n    '\\u1E3D': 'l',\r\n    '\\u1E3B': 'l',\r\n    '\\u017F': 'l',\r\n    '\\u0142': 'l',\r\n    '\\u019A': 'l',\r\n    '\\u026B': 'l',\r\n    '\\u2C61': 'l',\r\n    '\\uA749': 'l',\r\n    '\\uA781': 'l',\r\n    '\\uA747': 'l',\r\n    '\\u01C9': 'lj',\r\n    '\\u24DC': 'm',\r\n    '\\uFF4D': 'm',\r\n    '\\u1E3F': 'm',\r\n    '\\u1E41': 'm',\r\n    '\\u1E43': 'm',\r\n    '\\u0271': 'm',\r\n    '\\u026F': 'm',\r\n    '\\u24DD': 'n',\r\n    '\\uFF4E': 'n',\r\n    '\\u01F9': 'n',\r\n    '\\u0144': 'n',\r\n    '\\u00F1': 'n',\r\n    '\\u1E45': 'n',\r\n    '\\u0148': 'n',\r\n    '\\u1E47': 'n',\r\n    '\\u0146': 'n',\r\n    '\\u1E4B': 'n',\r\n    '\\u1E49': 'n',\r\n    '\\u019E': 'n',\r\n    '\\u0272': 'n',\r\n    '\\u0149': 'n',\r\n    '\\uA791': 'n',\r\n    '\\uA7A5': 'n',\r\n    '\\u01CC': 'nj',\r\n    '\\u24DE': 'o',\r\n    '\\uFF4F': 'o',\r\n    '\\u00F2': 'o',\r\n    '\\u00F3': 'o',\r\n    '\\u00F4': 'o',\r\n    '\\u1ED3': 'o',\r\n    '\\u1ED1': 'o',\r\n    '\\u1ED7': 'o',\r\n    '\\u1ED5': 'o',\r\n    '\\u00F5': 'o',\r\n    '\\u1E4D': 'o',\r\n    '\\u022D': 'o',\r\n    '\\u1E4F': 'o',\r\n    '\\u014D': 'o',\r\n    '\\u1E51': 'o',\r\n    '\\u1E53': 'o',\r\n    '\\u014F': 'o',\r\n    '\\u022F': 'o',\r\n    '\\u0231': 'o',\r\n    '\\u00F6': 'o',\r\n    '\\u022B': 'o',\r\n    '\\u1ECF': 'o',\r\n    '\\u0151': 'o',\r\n    '\\u01D2': 'o',\r\n    '\\u020D': 'o',\r\n    '\\u020F': 'o',\r\n    '\\u01A1': 'o',\r\n    '\\u1EDD': 'o',\r\n    '\\u1EDB': 'o',\r\n    '\\u1EE1': 'o',\r\n    '\\u1EDF': 'o',\r\n    '\\u1EE3': 'o',\r\n    '\\u1ECD': 'o',\r\n    '\\u1ED9': 'o',\r\n    '\\u01EB': 'o',\r\n    '\\u01ED': 'o',\r\n    '\\u00F8': 'o',\r\n    '\\u01FF': 'o',\r\n    '\\u0254': 'o',\r\n    '\\uA74B': 'o',\r\n    '\\uA74D': 'o',\r\n    '\\u0275': 'o',\r\n    '\\u0153': 'oe',\r\n    '\\u01A3': 'oi',\r\n    '\\u0223': 'ou',\r\n    '\\uA74F': 'oo',\r\n    '\\u24DF': 'p',\r\n    '\\uFF50': 'p',\r\n    '\\u1E55': 'p',\r\n    '\\u1E57': 'p',\r\n    '\\u01A5': 'p',\r\n    '\\u1D7D': 'p',\r\n    '\\uA751': 'p',\r\n    '\\uA753': 'p',\r\n    '\\uA755': 'p',\r\n    '\\u24E0': 'q',\r\n    '\\uFF51': 'q',\r\n    '\\u024B': 'q',\r\n    '\\uA757': 'q',\r\n    '\\uA759': 'q',\r\n    '\\u24E1': 'r',\r\n    '\\uFF52': 'r',\r\n    '\\u0155': 'r',\r\n    '\\u1E59': 'r',\r\n    '\\u0159': 'r',\r\n    '\\u0211': 'r',\r\n    '\\u0213': 'r',\r\n    '\\u1E5B': 'r',\r\n    '\\u1E5D': 'r',\r\n    '\\u0157': 'r',\r\n    '\\u1E5F': 'r',\r\n    '\\u024D': 'r',\r\n    '\\u027D': 'r',\r\n    '\\uA75B': 'r',\r\n    '\\uA7A7': 'r',\r\n    '\\uA783': 'r',\r\n    '\\u24E2': 's',\r\n    '\\uFF53': 's',\r\n    '\\u00DF': 's',\r\n    '\\u015B': 's',\r\n    '\\u1E65': 's',\r\n    '\\u015D': 's',\r\n    '\\u1E61': 's',\r\n    '\\u0161': 's',\r\n    '\\u1E67': 's',\r\n    '\\u1E63': 's',\r\n    '\\u1E69': 's',\r\n    '\\u0219': 's',\r\n    '\\u015F': 's',\r\n    '\\u023F': 's',\r\n    '\\uA7A9': 's',\r\n    '\\uA785': 's',\r\n    '\\u1E9B': 's',\r\n    '\\u24E3': 't',\r\n    '\\uFF54': 't',\r\n    '\\u1E6B': 't',\r\n    '\\u1E97': 't',\r\n    '\\u0165': 't',\r\n    '\\u1E6D': 't',\r\n    '\\u021B': 't',\r\n    '\\u0163': 't',\r\n    '\\u1E71': 't',\r\n    '\\u1E6F': 't',\r\n    '\\u0167': 't',\r\n    '\\u01AD': 't',\r\n    '\\u0288': 't',\r\n    '\\u2C66': 't',\r\n    '\\uA787': 't',\r\n    '\\uA729': 'tz',\r\n    '\\u24E4': 'u',\r\n    '\\uFF55': 'u',\r\n    '\\u00F9': 'u',\r\n    '\\u00FA': 'u',\r\n    '\\u00FB': 'u',\r\n    '\\u0169': 'u',\r\n    '\\u1E79': 'u',\r\n    '\\u016B': 'u',\r\n    '\\u1E7B': 'u',\r\n    '\\u016D': 'u',\r\n    '\\u00FC': 'u',\r\n    '\\u01DC': 'u',\r\n    '\\u01D8': 'u',\r\n    '\\u01D6': 'u',\r\n    '\\u01DA': 'u',\r\n    '\\u1EE7': 'u',\r\n    '\\u016F': 'u',\r\n    '\\u0171': 'u',\r\n    '\\u01D4': 'u',\r\n    '\\u0215': 'u',\r\n    '\\u0217': 'u',\r\n    '\\u01B0': 'u',\r\n    '\\u1EEB': 'u',\r\n    '\\u1EE9': 'u',\r\n    '\\u1EEF': 'u',\r\n    '\\u1EED': 'u',\r\n    '\\u1EF1': 'u',\r\n    '\\u1EE5': 'u',\r\n    '\\u1E73': 'u',\r\n    '\\u0173': 'u',\r\n    '\\u1E77': 'u',\r\n    '\\u1E75': 'u',\r\n    '\\u0289': 'u',\r\n    '\\u24E5': 'v',\r\n    '\\uFF56': 'v',\r\n    '\\u1E7D': 'v',\r\n    '\\u1E7F': 'v',\r\n    '\\u028B': 'v',\r\n    '\\uA75F': 'v',\r\n    '\\u028C': 'v',\r\n    '\\uA761': 'vy',\r\n    '\\u24E6': 'w',\r\n    '\\uFF57': 'w',\r\n    '\\u1E81': 'w',\r\n    '\\u1E83': 'w',\r\n    '\\u0175': 'w',\r\n    '\\u1E87': 'w',\r\n    '\\u1E85': 'w',\r\n    '\\u1E98': 'w',\r\n    '\\u1E89': 'w',\r\n    '\\u2C73': 'w',\r\n    '\\u24E7': 'x',\r\n    '\\uFF58': 'x',\r\n    '\\u1E8B': 'x',\r\n    '\\u1E8D': 'x',\r\n    '\\u24E8': 'y',\r\n    '\\uFF59': 'y',\r\n    '\\u1EF3': 'y',\r\n    '\\u00FD': 'y',\r\n    '\\u0177': 'y',\r\n    '\\u1EF9': 'y',\r\n    '\\u0233': 'y',\r\n    '\\u1E8F': 'y',\r\n    '\\u00FF': 'y',\r\n    '\\u1EF7': 'y',\r\n    '\\u1E99': 'y',\r\n    '\\u1EF5': 'y',\r\n    '\\u01B4': 'y',\r\n    '\\u024F': 'y',\r\n    '\\u1EFF': 'y',\r\n    '\\u24E9': 'z',\r\n    '\\uFF5A': 'z',\r\n    '\\u017A': 'z',\r\n    '\\u1E91': 'z',\r\n    '\\u017C': 'z',\r\n    '\\u017E': 'z',\r\n    '\\u1E93': 'z',\r\n    '\\u1E95': 'z',\r\n    '\\u01B6': 'z',\r\n    '\\u0225': 'z',\r\n    '\\u0240': 'z',\r\n    '\\u2C6C': 'z',\r\n    '\\uA763': 'z',\r\n    '\\u0386': '\\u0391',\r\n    '\\u0388': '\\u0395',\r\n    '\\u0389': '\\u0397',\r\n    '\\u038A': '\\u0399',\r\n    '\\u03AA': '\\u0399',\r\n    '\\u038C': '\\u039F',\r\n    '\\u038E': '\\u03A5',\r\n    '\\u03AB': '\\u03A5',\r\n    '\\u038F': '\\u03A9',\r\n    '\\u03AC': '\\u03B1',\r\n    '\\u03AD': '\\u03B5',\r\n    '\\u03AE': '\\u03B7',\r\n    '\\u03AF': '\\u03B9',\r\n    '\\u03CA': '\\u03B9',\r\n    '\\u0390': '\\u03B9',\r\n    '\\u03CC': '\\u03BF',\r\n    '\\u03CD': '\\u03C5',\r\n    '\\u03CB': '\\u03C5',\r\n    '\\u03B0': '\\u03C5',\r\n    '\\u03CE': '\\u03C9',\r\n    '\\u03C2': '\\u03C3',\r\n    '\\u2019': '\\''\r\n  };\r\n\r\n  return diacritics;\r\n});\r\n\r\nS2.define('select2/data/base',[\r\n  '../utils'\r\n], function (Utils) {\r\n  function BaseAdapter ($element, options) {\r\n    BaseAdapter.__super__.constructor.call(this);\r\n  }\r\n\r\n  Utils.Extend(BaseAdapter, Utils.Observable);\r\n\r\n  BaseAdapter.prototype.current = function (callback) {\r\n    throw new Error('The `current` method must be defined in child classes.');\r\n  };\r\n\r\n  BaseAdapter.prototype.query = function (params, callback) {\r\n    throw new Error('The `query` method must be defined in child classes.');\r\n  };\r\n\r\n  BaseAdapter.prototype.bind = function (container, $container) {\r\n    // Can be implemented in subclasses\r\n  };\r\n\r\n  BaseAdapter.prototype.destroy = function () {\r\n    // Can be implemented in subclasses\r\n  };\r\n\r\n  BaseAdapter.prototype.generateResultId = function (container, data) {\r\n    var id = container.id + '-result-';\r\n\r\n    id += Utils.generateChars(4);\r\n\r\n    if (data.id != null) {\r\n      id += '-' + data.id.toString();\r\n    } else {\r\n      id += '-' + Utils.generateChars(4);\r\n    }\r\n    return id;\r\n  };\r\n\r\n  return BaseAdapter;\r\n});\r\n\r\nS2.define('select2/data/select',[\r\n  './base',\r\n  '../utils',\r\n  'jquery'\r\n], function (BaseAdapter, Utils, $) {\r\n  function SelectAdapter ($element, options) {\r\n    this.$element = $element;\r\n    this.options = options;\r\n\r\n    SelectAdapter.__super__.constructor.call(this);\r\n  }\r\n\r\n  Utils.Extend(SelectAdapter, BaseAdapter);\r\n\r\n  SelectAdapter.prototype.current = function (callback) {\r\n    var self = this;\r\n\r\n    var data = Array.prototype.map.call(\r\n      this.$element[0].querySelectorAll(':checked'),\r\n      function (selectedElement) {\r\n        return self.item($(selectedElement));\r\n      }\r\n    );\r\n\r\n    callback(data);\r\n  };\r\n\r\n  SelectAdapter.prototype.select = function (data) {\r\n    var self = this;\r\n\r\n    data.selected = true;\r\n\r\n    // If data.element is a DOM node, use it instead\r\n    if (\r\n      data.element != null && data.element.tagName.toLowerCase() === 'option'\r\n    ) {\r\n      data.element.selected = true;\r\n\r\n      this.$element.trigger('input').trigger('change');\r\n\r\n      return;\r\n    }\r\n\r\n    if (this.$element.prop('multiple')) {\r\n      this.current(function (currentData) {\r\n        var val = [];\r\n\r\n        data = [data];\r\n        data.push.apply(data, currentData);\r\n\r\n        for (var d = 0; d < data.length; d++) {\r\n          var id = data[d].id;\r\n\r\n          if (val.indexOf(id) === -1) {\r\n            val.push(id);\r\n          }\r\n        }\r\n\r\n        self.$element.val(val);\r\n        self.$element.trigger('input').trigger('change');\r\n      });\r\n    } else {\r\n      var val = data.id;\r\n\r\n      this.$element.val(val);\r\n      this.$element.trigger('input').trigger('change');\r\n    }\r\n  };\r\n\r\n  SelectAdapter.prototype.unselect = function (data) {\r\n    var self = this;\r\n\r\n    if (!this.$element.prop('multiple')) {\r\n      return;\r\n    }\r\n\r\n    data.selected = false;\r\n\r\n    if (\r\n      data.element != null &&\r\n      data.element.tagName.toLowerCase() === 'option'\r\n    ) {\r\n      data.element.selected = false;\r\n\r\n      this.$element.trigger('input').trigger('change');\r\n\r\n      return;\r\n    }\r\n\r\n    this.current(function (currentData) {\r\n      var val = [];\r\n\r\n      for (var d = 0; d < currentData.length; d++) {\r\n        var id = currentData[d].id;\r\n\r\n        if (id != data.id && val.indexOf(id) === -1) { //***\r\n          val.push(id);\r\n        }\r\n      }\r\n\r\n      self.$element.val(val);\r\n\r\n      self.$element.trigger('input').trigger('change');\r\n    });\r\n  };\r\n\r\n  SelectAdapter.prototype.bind = function (container, $container) {\r\n    var self = this;\r\n\r\n    this.container = container;\r\n\r\n    container.on('select', function (params) {\r\n      self.select(params.data);\r\n    });\r\n\r\n    container.on('unselect', function (params) {\r\n      self.unselect(params.data);\r\n    });\r\n  };\r\n\r\n  SelectAdapter.prototype.destroy = function () {\r\n    // Remove anything added to child elements\r\n    this.$element.find('*').each(function () {\r\n      // Remove any custom data set by Select2\r\n      Utils.RemoveData(this);\r\n    });\r\n  };\r\n\r\n  SelectAdapter.prototype.query = function (params, callback) {\r\n    var data = [];\r\n    var self = this;\r\n\r\n    var $options = this.$element.children();\r\n\r\n    $options.each(function () {\r\n      if (\r\n        this.tagName.toLowerCase() !== 'option' &&\r\n        this.tagName.toLowerCase() !== 'optgroup'\r\n      ) {\r\n        return;\r\n      }\r\n\r\n      var $option = $(this);\r\n\r\n      var option = self.item($option);\r\n\r\n      var matches = self.matches(params, option);\r\n\r\n      if (matches !== null) {\r\n        data.push(matches);\r\n      }\r\n    });\r\n\r\n    callback({\r\n      results: data\r\n    });\r\n  };\r\n\r\n  SelectAdapter.prototype.addOptions = function ($options) {\r\n    this.$element.append($options);\r\n  };\r\n\r\n  SelectAdapter.prototype.option = function (data) {\r\n    var option;\r\n\r\n    if (data.children) {\r\n      option = document.createElement('optgroup');\r\n      option.label = data.text;\r\n    } else {\r\n      option = document.createElement('option');\r\n\r\n      if (option.textContent !== undefined) {\r\n        option.textContent = data.text;\r\n      } else {\r\n        option.innerText = data.text;\r\n      }\r\n    }\r\n\r\n    if (data.id !== undefined) {\r\n      option.value = data.id;\r\n    }\r\n\r\n    if (data.disabled) {\r\n      option.disabled = true;\r\n    }\r\n\r\n    if (data.selected) {\r\n      option.selected = true;\r\n    }\r\n\r\n    if (data.title) {\r\n      option.title = data.title;\r\n    }\r\n\r\n    var normalizedData = this._normalizeItem(data);\r\n    normalizedData.element = option;\r\n\r\n    // Override the option's data with the combined data\r\n    Utils.StoreData(option, 'data', normalizedData);\r\n\r\n    return $(option);\r\n  };\r\n\r\n  SelectAdapter.prototype.item = function ($option) {\r\n    var data = {};\r\n\r\n    data = Utils.GetData($option[0], 'data');\r\n\r\n    if (data != null) {\r\n      return data;\r\n    }\r\n\r\n    var option = $option[0];\r\n\r\n    if (option.tagName.toLowerCase() === 'option') {\r\n      data = {\r\n        id: $option.val(),\r\n        text: $option.text(),\r\n        disabled: $option.prop('disabled'),\r\n        selected: $option.prop('selected'),\r\n        title: $option.prop('title')\r\n      };\r\n    } else if (option.tagName.toLowerCase() === 'optgroup') {\r\n      data = {\r\n        text: $option.prop('label'),\r\n        children: [],\r\n        title: $option.prop('title')\r\n      };\r\n\r\n      var $children = $option.children('option');\r\n      var children = [];\r\n\r\n      for (var c = 0; c < $children.length; c++) {\r\n        var $child = $($children[c]);\r\n\r\n        var child = this.item($child);\r\n\r\n        children.push(child);\r\n      }\r\n\r\n      data.children = children;\r\n    }\r\n\r\n    data = this._normalizeItem(data);\r\n    data.element = $option[0];\r\n\r\n    Utils.StoreData($option[0], 'data', data);\r\n\r\n    return data;\r\n  };\r\n\r\n  SelectAdapter.prototype._normalizeItem = function (item) {\r\n    if (item !== Object(item)) {\r\n      item = {\r\n        id: item,\r\n        text: item\r\n      };\r\n    }\r\n\r\n    item = $.extend({}, {\r\n      text: ''\r\n    }, item);\r\n\r\n    var defaults = {\r\n      selected: false,\r\n      disabled: false\r\n    };\r\n\r\n    if (item.id != null) {\r\n      item.id = item.id.toString();\r\n    }\r\n\r\n    if (item.text != null) {\r\n      item.text = item.text.toString();\r\n    }\r\n\r\n    if (item._resultId == null && item.id && this.container != null) {\r\n      item._resultId = this.generateResultId(this.container, item);\r\n    }\r\n\r\n    return $.extend({}, defaults, item);\r\n  };\r\n\r\n  SelectAdapter.prototype.matches = function (params, data) {\r\n    var matcher = this.options.get('matcher');\r\n\r\n    return matcher(params, data);\r\n  };\r\n\r\n  return SelectAdapter;\r\n});\r\n\r\nS2.define('select2/data/array',[\r\n  './select',\r\n  '../utils',\r\n  'jquery'\r\n], function (SelectAdapter, Utils, $) {\r\n  function ArrayAdapter ($element, options) {\r\n    this._dataToConvert = options.get('data') || [];\r\n\r\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\r\n  }\r\n\r\n  Utils.Extend(ArrayAdapter, SelectAdapter);\r\n\r\n  ArrayAdapter.prototype.bind = function (container, $container) {\r\n    ArrayAdapter.__super__.bind.call(this, container, $container);\r\n\r\n    this.addOptions(this.convertToOptions(this._dataToConvert));\r\n  };\r\n\r\n  ArrayAdapter.prototype.select = function (data) {\r\n    var $option = this.$element.find('option').filter(function (i, elm) {\r\n      return elm.value == data.id.toString();\r\n    });\r\n\r\n    if ($option.length === 0) {\r\n      $option = this.option(data);\r\n\r\n      this.addOptions($option);\r\n    }\r\n\r\n    ArrayAdapter.__super__.select.call(this, data);\r\n  };\r\n\r\n  ArrayAdapter.prototype.convertToOptions = function (data) {\r\n    var self = this;\r\n\r\n    var $existing = this.$element.find('option');\r\n    var existingIds = $existing.map(function () {\r\n      return self.item($(this)).id;\r\n    }).get();\r\n\r\n    var $options = [];\r\n\r\n    // Filter out all items except for the one passed in the argument\r\n    function onlyItem (item) {\r\n      return function () {\r\n        return $(this).val() == item.id;\r\n      };\r\n    }\r\n\r\n    for (var d = 0; d < data.length; d++) {\r\n      var item = this._normalizeItem(data[d]);\r\n\r\n      // Skip items which were pre-loaded, only merge the data\r\n      if (existingIds.indexOf(item.id) >= 0) {\r\n        var $existingOption = $existing.filter(onlyItem(item));\r\n\r\n        var existingData = this.item($existingOption);\r\n        var newData = $.extend(true, {}, item, existingData);\r\n\r\n        var $newOption = this.option(newData);\r\n\r\n        $existingOption.replaceWith($newOption);\r\n\r\n        continue;\r\n      }\r\n\r\n      var $option = this.option(item);\r\n\r\n      if (item.children) {\r\n        var $children = this.convertToOptions(item.children);\r\n\r\n        $option.append($children);\r\n      }\r\n\r\n      $options.push($option);\r\n    }\r\n\r\n    return $options;\r\n  };\r\n\r\n  return ArrayAdapter;\r\n});\r\n\r\nS2.define('select2/data/ajax',[\r\n  './array',\r\n  '../utils',\r\n  'jquery'\r\n], function (ArrayAdapter, Utils, $) {\r\n  function AjaxAdapter ($element, options) {\r\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\r\n\r\n    if (this.ajaxOptions.processResults != null) {\r\n      this.processResults = this.ajaxOptions.processResults;\r\n    }\r\n\r\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\r\n  }\r\n\r\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\r\n\r\n  AjaxAdapter.prototype._applyDefaults = function (options) {\r\n    var defaults = {\r\n      data: function (params) {\r\n        return $.extend({}, params, {\r\n          q: params.term\r\n        });\r\n      },\r\n      transport: function (params, success, failure) {\r\n        var $request = $.ajax(params);\r\n\r\n        $request.then(success);\r\n        $request.fail(failure);\r\n\r\n        return $request;\r\n      }\r\n    };\r\n\r\n    return $.extend({}, defaults, options, true);\r\n  };\r\n\r\n  AjaxAdapter.prototype.processResults = function (results) {\r\n    return results;\r\n  };\r\n\r\n  AjaxAdapter.prototype.query = function (params, callback) {\r\n    var matches = [];\r\n    var self = this;\r\n\r\n    if (this._request != null) {\r\n      // JSONP requests cannot always be aborted\r\n      if (typeof this._request.abort === 'function') {\r\n        this._request.abort();\r\n      }\r\n\r\n      this._request = null;\r\n    }\r\n\r\n    var options = $.extend({\r\n      type: 'GET'\r\n    }, this.ajaxOptions);\r\n\r\n    if (typeof options.url === 'function') {\r\n      options.url = options.url.call(this.$element, params);\r\n    }\r\n\r\n    if (typeof options.data === 'function') {\r\n      options.data = options.data.call(this.$element, params);\r\n    }\r\n\r\n    function request () {\r\n      var $request = options.transport(options, function (data) {\r\n        var results = self.processResults(data, params);\r\n\r\n        if (self.options.get('debug') && window.console && console.error) {\r\n          // Check to make sure that the response included a `results` key.\r\n          if (!results || !results.results || !Array.isArray(results.results)) {\r\n            console.error(\r\n              'Select2: The AJAX results did not return an array in the ' +\r\n              '`results` key of the response.'\r\n            );\r\n          }\r\n        }\r\n\r\n        callback(results);\r\n      }, function () {\r\n        // Attempt to detect if a request was aborted\r\n        // Only works if the transport exposes a status property\r\n        if ('status' in $request &&\r\n            ($request.status === 0 || $request.status === '0')) {\r\n          return;\r\n        }\r\n\r\n        self.trigger('results:message', {\r\n          message: 'errorLoading'\r\n        });\r\n      });\r\n\r\n      self._request = $request;\r\n    }\r\n\r\n    if (this.ajaxOptions.delay && params.term != null) {\r\n      if (this._queryTimeout) {\r\n        window.clearTimeout(this._queryTimeout);\r\n      }\r\n\r\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\r\n    } else {\r\n      request();\r\n    }\r\n  };\r\n\r\n  return AjaxAdapter;\r\n});\r\n\r\nS2.define('select2/data/tags',[\r\n  'jquery'\r\n], function ($) {\r\n  function Tags (decorated, $element, options) {\r\n    var tags = options.get('tags');\r\n\r\n    var createTag = options.get('createTag');\r\n\r\n    if (createTag !== undefined) {\r\n      this.createTag = createTag;\r\n    }\r\n\r\n    var insertTag = options.get('insertTag');\r\n\r\n    if (insertTag !== undefined) {\r\n        this.insertTag = insertTag;\r\n    }\r\n\r\n    decorated.call(this, $element, options);\r\n\r\n    if (Array.isArray(tags)) {\r\n      for (var t = 0; t < tags.length; t++) {\r\n        var tag = tags[t];\r\n        var item = this._normalizeItem(tag);\r\n\r\n        var $option = this.option(item);\r\n\r\n        this.$element.append($option);\r\n      }\r\n    }\r\n  }\r\n\r\n  Tags.prototype.query = function (decorated, params, callback) {\r\n    var self = this;\r\n\r\n    this._removeOldTags();\r\n\r\n    if (params.term == null || params.page != null) {\r\n      decorated.call(this, params, callback);\r\n      return;\r\n    }\r\n\r\n    function wrapper (obj, child) {\r\n      var data = obj.results;\r\n\r\n      for (var i = 0; i < data.length; i++) {\r\n        var option = data[i];\r\n\r\n        var checkChildren = (\r\n          option.children != null &&\r\n          !wrapper({\r\n            results: option.children\r\n          }, true)\r\n        );\r\n\r\n        var optionText = (option.text || '').toUpperCase();\r\n        var paramsTerm = (params.term || '').toUpperCase();\r\n\r\n        var checkText = optionText === paramsTerm;\r\n\r\n        if (checkText || checkChildren) {\r\n          if (child) {\r\n            return false;\r\n          }\r\n\r\n          obj.data = data;\r\n          callback(obj);\r\n\r\n          return;\r\n        }\r\n      }\r\n\r\n      if (child) {\r\n        return true;\r\n      }\r\n\r\n      var tag = self.createTag(params);\r\n\r\n      if (tag != null) {\r\n        var $option = self.option(tag);\r\n        $option.attr('data-select2-tag', 'true');\r\n\r\n        self.addOptions([$option]);\r\n\r\n        self.insertTag(data, tag);\r\n      }\r\n\r\n      obj.results = data;\r\n\r\n      callback(obj);\r\n    }\r\n\r\n    decorated.call(this, params, wrapper);\r\n  };\r\n\r\n  Tags.prototype.createTag = function (decorated, params) {\r\n    if (params.term == null) {\r\n      return null;\r\n    }\r\n\r\n    var term = params.term.trim();\r\n\r\n    if (term === '') {\r\n      return null;\r\n    }\r\n\r\n    return {\r\n      id: term,\r\n      text: term\r\n    };\r\n  };\r\n\r\n  Tags.prototype.insertTag = function (_, data, tag) {\r\n    data.unshift(tag);\r\n  };\r\n\r\n  Tags.prototype._removeOldTags = function (_) {\r\n    var $options = this.$element.find('option[data-select2-tag]');\r\n\r\n    $options.each(function () {\r\n      if (this.selected) {\r\n        return;\r\n      }\r\n\r\n      $(this).remove();\r\n    });\r\n  };\r\n\r\n  return Tags;\r\n});\r\n\r\nS2.define('select2/data/tokenizer',[\r\n  'jquery'\r\n], function ($) {\r\n  function Tokenizer (decorated, $element, options) {\r\n    var tokenizer = options.get('tokenizer');\r\n\r\n    if (tokenizer !== undefined) {\r\n      this.tokenizer = tokenizer;\r\n    }\r\n\r\n    decorated.call(this, $element, options);\r\n  }\r\n\r\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\r\n    decorated.call(this, container, $container);\r\n\r\n    this.$search =  container.dropdown.$search || container.selection.$search ||\r\n      $container.find('.select2-search__field');\r\n  };\r\n\r\n  Tokenizer.prototype.query = function (decorated, params, callback) {\r\n    var self = this;\r\n\r\n    function createAndSelect (data) {\r\n      // Normalize the data object so we can use it for checks\r\n      var item = self._normalizeItem(data);\r\n\r\n      // Check if the data object already exists as a tag\r\n      // Select it if it doesn't\r\n      var $existingOptions = self.$element.find('option').filter(function () {\r\n        return $(this).val() === item.id;\r\n      });\r\n\r\n      // If an existing option wasn't found for it, create the option\r\n      if (!$existingOptions.length) {\r\n        var $option = self.option(item);\r\n        $option.attr('data-select2-tag', true);\r\n\r\n        self._removeOldTags();\r\n        self.addOptions([$option]);\r\n      }\r\n\r\n      // Select the item, now that we know there is an option for it\r\n      select(item);\r\n    }\r\n\r\n    function select (data) {\r\n      self.trigger('select', {\r\n        data: data\r\n      });\r\n    }\r\n\r\n    params.term = params.term || '';\r\n\r\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\r\n\r\n    if (tokenData.term !== params.term) {\r\n      // Replace the search term if we have the search box\r\n      if (this.$search.length) {\r\n        this.$search.val(tokenData.term);\r\n        this.$search.trigger('focus');\r\n      }\r\n\r\n      params.term = tokenData.term;\r\n    }\r\n\r\n    decorated.call(this, params, callback);\r\n  };\r\n\r\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\r\n    var separators = options.get('tokenSeparators') || [];\r\n    var term = params.term;\r\n    var i = 0;\r\n\r\n    var createTag = this.createTag || function (params) {\r\n      return {\r\n        id: params.term,\r\n        text: params.term\r\n      };\r\n    };\r\n\r\n    while (i < term.length) {\r\n      var termChar = term[i];\r\n\r\n      if (separators.indexOf(termChar) === -1) {\r\n        i++;\r\n\r\n        continue;\r\n      }\r\n\r\n      var part = term.substr(0, i);\r\n      var partParams = $.extend({}, params, {\r\n        term: part\r\n      });\r\n\r\n      var data = createTag(partParams);\r\n\r\n      if (data == null) {\r\n        i++;\r\n        continue;\r\n      }\r\n\r\n      callback(data);\r\n\r\n      // Reset the term to not include the tokenized portion\r\n      term = term.substr(i + 1) || '';\r\n      i = 0;\r\n    }\r\n\r\n    return {\r\n      term: term\r\n    };\r\n  };\r\n\r\n  return Tokenizer;\r\n});\r\n\r\nS2.define('select2/data/minimumInputLength',[\r\n\r\n], function () {\r\n  function MinimumInputLength (decorated, $e, options) {\r\n    this.minimumInputLength = options.get('minimumInputLength');\r\n\r\n    decorated.call(this, $e, options);\r\n  }\r\n\r\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\r\n    params.term = params.term || '';\r\n\r\n    if (params.term.length < this.minimumInputLength) {\r\n      this.trigger('results:message', {\r\n        message: 'inputTooShort',\r\n        args: {\r\n          minimum: this.minimumInputLength,\r\n          input: params.term,\r\n          params: params\r\n        }\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    decorated.call(this, params, callback);\r\n  };\r\n\r\n  return MinimumInputLength;\r\n});\r\n\r\nS2.define('select2/data/maximumInputLength',[\r\n\r\n], function () {\r\n  function MaximumInputLength (decorated, $e, options) {\r\n    this.maximumInputLength = options.get('maximumInputLength');\r\n\r\n    decorated.call(this, $e, options);\r\n  }\r\n\r\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\r\n    params.term = params.term || '';\r\n\r\n    if (this.maximumInputLength > 0 &&\r\n        params.term.length > this.maximumInputLength) {\r\n      this.trigger('results:message', {\r\n        message: 'inputTooLong',\r\n        args: {\r\n          maximum: this.maximumInputLength,\r\n          input: params.term,\r\n          params: params\r\n        }\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    decorated.call(this, params, callback);\r\n  };\r\n\r\n  return MaximumInputLength;\r\n});\r\n\r\nS2.define('select2/data/maximumSelectionLength',[\r\n\r\n], function (){\r\n  function MaximumSelectionLength (decorated, $e, options) {\r\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\r\n\r\n    decorated.call(this, $e, options);\r\n  }\r\n\r\n  MaximumSelectionLength.prototype.bind =\r\n    function (decorated, container, $container) {\r\n      var self = this;\r\n\r\n      decorated.call(this, container, $container);\r\n\r\n      container.on('select', function () {\r\n        self._checkIfMaximumSelected();\r\n      });\r\n  };\r\n\r\n  MaximumSelectionLength.prototype.query =\r\n    function (decorated, params, callback) {\r\n      var self = this;\r\n\r\n      this._checkIfMaximumSelected(function () {\r\n        decorated.call(self, params, callback);\r\n      });\r\n  };\r\n\r\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\r\n    function (_, successCallback) {\r\n      var self = this;\r\n\r\n      this.current(function (currentData) {\r\n        var count = currentData != null ? currentData.length : 0;\r\n        if (self.maximumSelectionLength > 0 &&\r\n          count >= self.maximumSelectionLength) {\r\n          self.trigger('results:message', {\r\n            message: 'maximumSelected',\r\n            args: {\r\n              maximum: self.maximumSelectionLength\r\n            }\r\n          });\r\n          return;\r\n        }\r\n\r\n        if (successCallback) {\r\n          successCallback();\r\n        }\r\n      });\r\n  };\r\n\r\n  return MaximumSelectionLength;\r\n});\r\n\r\nS2.define('select2/dropdown',[\r\n  'jquery',\r\n  './utils'\r\n], function ($, Utils) {\r\n  function Dropdown ($element, options) {\r\n    this.$element = $element;\r\n    this.options = options;\r\n\r\n    Dropdown.__super__.constructor.call(this);\r\n  }\r\n\r\n  Utils.Extend(Dropdown, Utils.Observable);\r\n\r\n  Dropdown.prototype.render = function () {\r\n    var $dropdown = $(\r\n      '<span class=\"select2-dropdown\">' +\r\n        '<span class=\"select2-results\"></span>' +\r\n      '</span>'\r\n    );\r\n\r\n    $dropdown.attr('dir', this.options.get('dir'));\r\n\r\n    this.$dropdown = $dropdown;\r\n\r\n    return $dropdown;\r\n  };\r\n\r\n  Dropdown.prototype.bind = function () {\r\n    // Should be implemented in subclasses\r\n  };\r\n\r\n  Dropdown.prototype.position = function ($dropdown, $container) {\r\n    // Should be implemented in subclasses\r\n  };\r\n\r\n  Dropdown.prototype.destroy = function () {\r\n    // Remove the dropdown from the DOM\r\n    this.$dropdown.remove();\r\n  };\r\n\r\n  return Dropdown;\r\n});\r\n\r\nS2.define('select2/dropdown/search',[\r\n  'jquery'\r\n], function ($) {\r\n  function Search () { }\r\n\r\n  Search.prototype.render = function (decorated) {\r\n    var $rendered = decorated.call(this);\r\n    var searchLabel = this.options.get('translations').get('search');\r\n\r\n    var $search = $(\r\n      '<span class=\"select2-search select2-search--dropdown\">' +\r\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\r\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\r\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\r\n      '</span>'\r\n    );\r\n\r\n    this.$searchContainer = $search;\r\n    this.$search = $search.find('input');\r\n\r\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\r\n    this.$search.attr('aria-label', searchLabel());\r\n\r\n    $rendered.prepend($search);\r\n\r\n    return $rendered;\r\n  };\r\n\r\n  Search.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    var resultsId = container.id + '-results';\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    this.$search.on('keydown', function (evt) {\r\n      self.trigger('keypress', evt);\r\n\r\n      self._keyUpPrevented = evt.isDefaultPrevented();\r\n    });\r\n\r\n    // Workaround for browsers which do not support the `input` event\r\n    // This will prevent double-triggering of events for browsers which support\r\n    // both the `keyup` and `input` events.\r\n    this.$search.on('input', function (evt) {\r\n      // Unbind the duplicated `keyup` event\r\n      $(this).off('keyup');\r\n    });\r\n\r\n    this.$search.on('keyup input', function (evt) {\r\n      self.handleSearch(evt);\r\n    });\r\n\r\n    container.on('open', function () {\r\n      self.$search.attr('tabindex', 0);\r\n      self.$search.attr('aria-controls', resultsId);\r\n\r\n      self.$search.trigger('focus');\r\n\r\n      window.setTimeout(function () {\r\n        self.$search.trigger('focus');\r\n      }, 0);\r\n    });\r\n\r\n    container.on('close', function () {\r\n      self.$search.attr('tabindex', -1);\r\n      self.$search.removeAttr('aria-controls');\r\n      self.$search.removeAttr('aria-activedescendant');\r\n\r\n      self.$search.val('');\r\n      self.$search.trigger('blur');\r\n    });\r\n\r\n    container.on('focus', function () {\r\n      if (!container.isOpen()) {\r\n        self.$search.trigger('focus');\r\n      }\r\n    });\r\n\r\n    container.on('results:all', function (params) {\r\n      if (params.query.term == null || params.query.term === '') {\r\n        var showSearch = self.showSearch(params);\r\n\r\n        if (showSearch) {\r\n          self.$searchContainer[0].classList.remove('select2-search--hide');\r\n        } else {\r\n          self.$searchContainer[0].classList.add('select2-search--hide');\r\n        }\r\n      }\r\n    });\r\n\r\n    container.on('results:focus', function (params) {\r\n      if (params.data._resultId) {\r\n        self.$search.attr('aria-activedescendant', params.data._resultId);\r\n      } else {\r\n        self.$search.removeAttr('aria-activedescendant');\r\n      }\r\n    });\r\n  };\r\n\r\n  Search.prototype.handleSearch = function (evt) {\r\n    if (!this._keyUpPrevented) {\r\n      var input = this.$search.val();\r\n\r\n      this.trigger('query', {\r\n        term: input\r\n      });\r\n    }\r\n\r\n    this._keyUpPrevented = false;\r\n  };\r\n\r\n  Search.prototype.showSearch = function (_, params) {\r\n    return true;\r\n  };\r\n\r\n  return Search;\r\n});\r\n\r\nS2.define('select2/dropdown/hidePlaceholder',[\r\n\r\n], function () {\r\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\r\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\r\n\r\n    decorated.call(this, $element, options, dataAdapter);\r\n  }\r\n\r\n  HidePlaceholder.prototype.append = function (decorated, data) {\r\n    data.results = this.removePlaceholder(data.results);\r\n\r\n    decorated.call(this, data);\r\n  };\r\n\r\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\r\n    if (typeof placeholder === 'string') {\r\n      placeholder = {\r\n        id: '',\r\n        text: placeholder\r\n      };\r\n    }\r\n\r\n    return placeholder;\r\n  };\r\n\r\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\r\n    var modifiedData = data.slice(0);\r\n\r\n    for (var d = data.length - 1; d >= 0; d--) {\r\n      var item = data[d];\r\n\r\n      if (this.placeholder.id === item.id) {\r\n        modifiedData.splice(d, 1);\r\n      }\r\n    }\r\n\r\n    return modifiedData;\r\n  };\r\n\r\n  return HidePlaceholder;\r\n});\r\n\r\nS2.define('select2/dropdown/infiniteScroll',[\r\n  'jquery'\r\n], function ($) {\r\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\r\n    this.lastParams = {};\r\n\r\n    decorated.call(this, $element, options, dataAdapter);\r\n\r\n    this.$loadingMore = this.createLoadingMore();\r\n    this.loading = false;\r\n  }\r\n\r\n  InfiniteScroll.prototype.append = function (decorated, data) {\r\n    this.$loadingMore.remove();\r\n    this.loading = false;\r\n\r\n    decorated.call(this, data);\r\n\r\n    if (this.showLoadingMore(data)) {\r\n      this.$results.append(this.$loadingMore);\r\n      this.loadMoreIfNeeded();\r\n    }\r\n  };\r\n\r\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    container.on('query', function (params) {\r\n      self.lastParams = params;\r\n      self.loading = true;\r\n    });\r\n\r\n    container.on('query:append', function (params) {\r\n      self.lastParams = params;\r\n      self.loading = true;\r\n    });\r\n\r\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\r\n  };\r\n\r\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\r\n    var isLoadMoreVisible = $.contains(\r\n      document.documentElement,\r\n      this.$loadingMore[0]\r\n    );\r\n\r\n    if (this.loading || !isLoadMoreVisible) {\r\n      return;\r\n    }\r\n\r\n    var currentOffset = this.$results.offset().top +\r\n      this.$results.outerHeight(false);\r\n    var loadingMoreOffset = this.$loadingMore.offset().top +\r\n      this.$loadingMore.outerHeight(false);\r\n\r\n    if (currentOffset + 50 >= loadingMoreOffset) {\r\n      this.loadMore();\r\n    }\r\n  };\r\n\r\n  InfiniteScroll.prototype.loadMore = function () {\r\n    this.loading = true;\r\n\r\n    var params = $.extend({}, {page: 1}, this.lastParams);\r\n\r\n    params.page++;\r\n\r\n    this.trigger('query:append', params);\r\n  };\r\n\r\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\r\n    return data.pagination && data.pagination.more;\r\n  };\r\n\r\n  InfiniteScroll.prototype.createLoadingMore = function () {\r\n    var $option = $(\r\n      '<li ' +\r\n      'class=\"select2-results__option select2-results__option--load-more\"' +\r\n      'role=\"option\" aria-disabled=\"true\"></li>'\r\n    );\r\n\r\n    var message = this.options.get('translations').get('loadingMore');\r\n\r\n    $option.html(message(this.lastParams));\r\n\r\n    return $option;\r\n  };\r\n\r\n  return InfiniteScroll;\r\n});\r\n\r\nS2.define('select2/dropdown/attachBody',[\r\n  'jquery',\r\n  '../utils'\r\n], function ($, Utils) {\r\n  function AttachBody (decorated, $element, options) {\r\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\r\n\r\n    decorated.call(this, $element, options);\r\n  }\r\n\r\n  AttachBody.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    container.on('open', function () {\r\n      self._showDropdown();\r\n      self._attachPositioningHandler(container);\r\n\r\n      // Must bind after the results handlers to ensure correct sizing\r\n      self._bindContainerResultHandlers(container);\r\n    });\r\n\r\n    container.on('close', function () {\r\n      self._hideDropdown();\r\n      self._detachPositioningHandler(container);\r\n    });\r\n\r\n    this.$dropdownContainer.on('mousedown', function (evt) {\r\n      evt.stopPropagation();\r\n    });\r\n  };\r\n\r\n  AttachBody.prototype.destroy = function (decorated) {\r\n    decorated.call(this);\r\n\r\n    this.$dropdownContainer.remove();\r\n  };\r\n\r\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\r\n    // Clone all of the container classes\r\n    $dropdown.attr('class', $container.attr('class'));\r\n\r\n    $dropdown[0].classList.remove('select2');\r\n    $dropdown[0].classList.add('select2-container--open');\r\n\r\n    $dropdown.css({\r\n      position: 'absolute',\r\n      top: -999999\r\n    });\r\n\r\n    this.$container = $container;\r\n  };\r\n\r\n  AttachBody.prototype.render = function (decorated) {\r\n    var $container = $('<span></span>');\r\n\r\n    var $dropdown = decorated.call(this);\r\n    $container.append($dropdown);\r\n\r\n    this.$dropdownContainer = $container;\r\n\r\n    return $container;\r\n  };\r\n\r\n  AttachBody.prototype._hideDropdown = function (decorated) {\r\n    this.$dropdownContainer.detach();\r\n  };\r\n\r\n  AttachBody.prototype._bindContainerResultHandlers =\r\n      function (decorated, container) {\r\n\r\n    // These should only be bound once\r\n    if (this._containerResultsHandlersBound) {\r\n      return;\r\n    }\r\n\r\n    var self = this;\r\n\r\n    container.on('results:all', function () {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n\r\n    container.on('results:append', function () {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n\r\n    container.on('results:message', function () {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n\r\n    container.on('select', function () {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n\r\n    container.on('unselect', function () {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n\r\n    this._containerResultsHandlersBound = true;\r\n  };\r\n\r\n  AttachBody.prototype._attachPositioningHandler =\r\n      function (decorated, container) {\r\n    var self = this;\r\n\r\n    var scrollEvent = 'scroll.select2.' + container.id;\r\n    var resizeEvent = 'resize.select2.' + container.id;\r\n    var orientationEvent = 'orientationchange.select2.' + container.id;\r\n\r\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\r\n    $watchers.each(function () {\r\n      Utils.StoreData(this, 'select2-scroll-position', {\r\n        x: $(this).scrollLeft(),\r\n        y: $(this).scrollTop()\r\n      });\r\n    });\r\n\r\n    $watchers.on(scrollEvent, function (ev) {\r\n      var position = Utils.GetData(this, 'select2-scroll-position');\r\n      $(this).scrollTop(position.y);\r\n    });\r\n\r\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\r\n      function (e) {\r\n      self._positionDropdown();\r\n      self._resizeDropdown();\r\n    });\r\n  };\r\n\r\n  AttachBody.prototype._detachPositioningHandler =\r\n      function (decorated, container) {\r\n    var scrollEvent = 'scroll.select2.' + container.id;\r\n    var resizeEvent = 'resize.select2.' + container.id;\r\n    var orientationEvent = 'orientationchange.select2.' + container.id;\r\n\r\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\r\n    $watchers.off(scrollEvent);\r\n\r\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\r\n  };\r\n\r\n  AttachBody.prototype._positionDropdown = function () {\r\n    var $window = $(window);\r\n\r\n    var isCurrentlyAbove = this.$dropdown[0].classList\r\n      .contains('select2-dropdown--above');\r\n    var isCurrentlyBelow = this.$dropdown[0].classList\r\n      .contains('select2-dropdown--below');\r\n\r\n    var newDirection = null;\r\n\r\n    var offset = this.$container.offset();\r\n\r\n    offset.bottom = offset.top + this.$container.outerHeight(false);\r\n\r\n    var container = {\r\n      height: this.$container.outerHeight(false)\r\n    };\r\n\r\n    container.top = offset.top;\r\n    container.bottom = offset.top + container.height;\r\n\r\n    var dropdown = {\r\n      height: this.$dropdown.outerHeight(false)\r\n    };\r\n\r\n    var viewport = {\r\n      top: $window.scrollTop(),\r\n      bottom: $window.scrollTop() + $window.height()\r\n    };\r\n\r\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\r\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\r\n\r\n    var css = {\r\n      left: offset.left,\r\n      top: container.bottom\r\n    };\r\n\r\n    // Determine what the parent element is to use for calculating the offset\r\n    var $offsetParent = this.$dropdownParent;\r\n\r\n    // For statically positioned elements, we need to get the element\r\n    // that is determining the offset\r\n    if ($offsetParent.css('position') === 'static') {\r\n      $offsetParent = $offsetParent.offsetParent();\r\n    }\r\n\r\n    var parentOffset = {\r\n      top: 0,\r\n      left: 0\r\n    };\r\n\r\n    if (\r\n      $.contains(document.body, $offsetParent[0]) ||\r\n      $offsetParent[0].isConnected\r\n      ) {\r\n      parentOffset = $offsetParent.offset();\r\n    }\r\n\r\n    css.top -= parentOffset.top;\r\n    css.left -= parentOffset.left;\r\n\r\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\r\n      newDirection = 'below';\r\n    }\r\n\r\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\r\n      newDirection = 'above';\r\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\r\n      newDirection = 'below';\r\n    }\r\n\r\n    if (newDirection == 'above' ||\r\n      (isCurrentlyAbove && newDirection !== 'below')) {\r\n      css.top = container.top - parentOffset.top - dropdown.height;\r\n    }\r\n\r\n    if (newDirection != null) {\r\n      this.$dropdown[0].classList.remove('select2-dropdown--below');\r\n      this.$dropdown[0].classList.remove('select2-dropdown--above');\r\n      this.$dropdown[0].classList.add('select2-dropdown--' + newDirection);\r\n\r\n      this.$container[0].classList.remove('select2-container--below');\r\n      this.$container[0].classList.remove('select2-container--above');\r\n      this.$container[0].classList.add('select2-container--' + newDirection);\r\n    }\r\n\r\n    this.$dropdownContainer.css(css);\r\n  };\r\n\r\n  AttachBody.prototype._resizeDropdown = function () {\r\n    var css = {\r\n      width: this.$container.outerWidth(false) + 'px'\r\n    };\r\n\r\n    if (this.options.get('dropdownAutoWidth')) {\r\n      css.minWidth = css.width;\r\n      css.position = 'relative';\r\n      css.width = 'auto';\r\n    }\r\n\r\n    this.$dropdown.css(css);\r\n  };\r\n\r\n  AttachBody.prototype._showDropdown = function (decorated) {\r\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\r\n\r\n    this._positionDropdown();\r\n    this._resizeDropdown();\r\n  };\r\n\r\n  return AttachBody;\r\n});\r\n\r\nS2.define('select2/dropdown/minimumResultsForSearch',[\r\n\r\n], function () {\r\n  function countResults (data) {\r\n    var count = 0;\r\n\r\n    for (var d = 0; d < data.length; d++) {\r\n      var item = data[d];\r\n\r\n      if (item.children) {\r\n        count += countResults(item.children);\r\n      } else {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\r\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\r\n\r\n    if (this.minimumResultsForSearch < 0) {\r\n      this.minimumResultsForSearch = Infinity;\r\n    }\r\n\r\n    decorated.call(this, $element, options, dataAdapter);\r\n  }\r\n\r\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\r\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\r\n      return false;\r\n    }\r\n\r\n    return decorated.call(this, params);\r\n  };\r\n\r\n  return MinimumResultsForSearch;\r\n});\r\n\r\nS2.define('select2/dropdown/selectOnClose',[\r\n  '../utils'\r\n], function (Utils) {\r\n  function SelectOnClose () { }\r\n\r\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    container.on('close', function (params) {\r\n      self._handleSelectOnClose(params);\r\n    });\r\n  };\r\n\r\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\r\n    if (params && params.originalSelect2Event != null) {\r\n      var event = params.originalSelect2Event;\r\n\r\n      // Don't select an item if the close event was triggered from a select or\r\n      // unselect event\r\n      if (event._type === 'select' || event._type === 'unselect') {\r\n        return;\r\n      }\r\n    }\r\n\r\n    var $highlightedResults = this.getHighlightedResults();\r\n\r\n    // Only select highlighted results\r\n    if ($highlightedResults.length < 1) {\r\n      return;\r\n    }\r\n\r\n    var data = Utils.GetData($highlightedResults[0], 'data');\r\n\r\n    // Don't re-select already selected resulte\r\n    if (\r\n      (data.element != null && data.element.selected) ||\r\n      (data.element == null && data.selected)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this.trigger('select', {\r\n        data: data\r\n    });\r\n  };\r\n\r\n  return SelectOnClose;\r\n});\r\n\r\nS2.define('select2/dropdown/closeOnSelect',[\r\n\r\n], function () {\r\n  function CloseOnSelect () { }\r\n\r\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\r\n    var self = this;\r\n\r\n    decorated.call(this, container, $container);\r\n\r\n    container.on('select', function (evt) {\r\n      self._selectTriggered(evt);\r\n    });\r\n\r\n    container.on('unselect', function (evt) {\r\n      self._selectTriggered(evt);\r\n    });\r\n  };\r\n\r\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\r\n    var originalEvent = evt.originalEvent;\r\n\r\n    // Don't close if the control key is being held\r\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\r\n      return;\r\n    }\r\n\r\n    this.trigger('close', {\r\n      originalEvent: originalEvent,\r\n      originalSelect2Event: evt\r\n    });\r\n  };\r\n\r\n  return CloseOnSelect;\r\n});\r\n\r\nS2.define('select2/dropdown/dropdownCss',[\r\n  '../utils'\r\n], function (Utils) {\r\n  function DropdownCSS () { }\r\n\r\n  DropdownCSS.prototype.render = function (decorated) {\r\n    var $dropdown = decorated.call(this);\r\n\r\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\r\n\r\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\r\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\r\n\r\n      Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);\r\n    }\r\n\r\n    $dropdown.addClass(dropdownCssClass);\r\n\r\n    return $dropdown;\r\n  };\r\n\r\n  return DropdownCSS;\r\n});\r\n\r\nS2.define('select2/dropdown/tagsSearchHighlight',[\r\n  '../utils'\r\n], function (Utils) {\r\n  function TagsSearchHighlight () { }\r\n\r\n  TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {\r\n    var $options = this.$results\r\n    .find(\r\n      '.select2-results__option--selectable' +\r\n      ':not(.select2-results__option--selected)'\r\n    );\r\n\r\n    if ($options.length > 0) {\r\n      var $firstOption = $options.first();\r\n      var data = Utils.GetData($firstOption[0], 'data');\r\n      var firstElement = data.element;\r\n\r\n      if (firstElement && firstElement.getAttribute) {\r\n        if (firstElement.getAttribute('data-select2-tag') === 'true') {\r\n          $firstOption.trigger('mouseenter');\r\n\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    decorated.call(this);\r\n  };\r\n\r\n  return TagsSearchHighlight;\r\n});\r\n\r\nS2.define('select2/i18n/en',[],function () {\r\n  // English\r\n  return {\r\n    errorLoading: function () {\r\n      return 'The results could not be loaded.';\r\n    },\r\n    inputTooLong: function (args) {\r\n      var overChars = args.input.length - args.maximum;\r\n\r\n      var message = 'Please delete ' + overChars + ' character';\r\n\r\n      if (overChars != 1) {\r\n        message += 's';\r\n      }\r\n\r\n      return message;\r\n    },\r\n    inputTooShort: function (args) {\r\n      var remainingChars = args.minimum - args.input.length;\r\n\r\n      var message = 'Please enter ' + remainingChars + ' or more characters';\r\n\r\n      return message;\r\n    },\r\n    loadingMore: function () {\r\n      return 'Loading more results…';\r\n    },\r\n    maximumSelected: function (args) {\r\n      var message = 'You can only select ' + args.maximum + ' item';\r\n\r\n      if (args.maximum != 1) {\r\n        message += 's';\r\n      }\r\n\r\n      return message;\r\n    },\r\n    noResults: function () {\r\n      return 'No results found';\r\n    },\r\n    searching: function () {\r\n      return 'Searching…';\r\n    },\r\n    removeAllItems: function () {\r\n      return 'Remove all items';\r\n    },\r\n    removeItem: function () {\r\n      return 'Remove item';\r\n    },\r\n    search: function() {\r\n      return 'Search';\r\n    }\r\n  };\r\n});\r\n\r\nS2.define('select2/defaults',[\r\n  'jquery',\r\n\r\n  './results',\r\n\r\n  './selection/single',\r\n  './selection/multiple',\r\n  './selection/placeholder',\r\n  './selection/allowClear',\r\n  './selection/search',\r\n  './selection/selectionCss',\r\n  './selection/eventRelay',\r\n\r\n  './utils',\r\n  './translation',\r\n  './diacritics',\r\n\r\n  './data/select',\r\n  './data/array',\r\n  './data/ajax',\r\n  './data/tags',\r\n  './data/tokenizer',\r\n  './data/minimumInputLength',\r\n  './data/maximumInputLength',\r\n  './data/maximumSelectionLength',\r\n\r\n  './dropdown',\r\n  './dropdown/search',\r\n  './dropdown/hidePlaceholder',\r\n  './dropdown/infiniteScroll',\r\n  './dropdown/attachBody',\r\n  './dropdown/minimumResultsForSearch',\r\n  './dropdown/selectOnClose',\r\n  './dropdown/closeOnSelect',\r\n  './dropdown/dropdownCss',\r\n  './dropdown/tagsSearchHighlight',\r\n\r\n  './i18n/en'\r\n], function ($,\r\n\r\n             ResultsList,\r\n\r\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\r\n             SelectionSearch, SelectionCSS, EventRelay,\r\n\r\n             Utils, Translation, DIACRITICS,\r\n\r\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\r\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\r\n\r\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\r\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\r\n             DropdownCSS, TagsSearchHighlight,\r\n\r\n             EnglishTranslation) {\r\n  function Defaults () {\r\n    this.reset();\r\n  }\r\n\r\n  Defaults.prototype.apply = function (options) {\r\n    options = $.extend(true, {}, this.defaults, options);\r\n\r\n    if (options.dataAdapter == null) {\r\n      if (options.ajax != null) {\r\n        options.dataAdapter = AjaxData;\r\n      } else if (options.data != null) {\r\n        options.dataAdapter = ArrayData;\r\n      } else {\r\n        options.dataAdapter = SelectData;\r\n      }\r\n\r\n      if (options.minimumInputLength > 0) {\r\n        options.dataAdapter = Utils.Decorate(\r\n          options.dataAdapter,\r\n          MinimumInputLength\r\n        );\r\n      }\r\n\r\n      if (options.maximumInputLength > 0) {\r\n        options.dataAdapter = Utils.Decorate(\r\n          options.dataAdapter,\r\n          MaximumInputLength\r\n        );\r\n      }\r\n\r\n      if (options.maximumSelectionLength > 0) {\r\n        options.dataAdapter = Utils.Decorate(\r\n          options.dataAdapter,\r\n          MaximumSelectionLength\r\n        );\r\n      }\r\n\r\n      if (options.tags) {\r\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\r\n      }\r\n\r\n      if (options.tokenSeparators != null || options.tokenizer != null) {\r\n        options.dataAdapter = Utils.Decorate(\r\n          options.dataAdapter,\r\n          Tokenizer\r\n        );\r\n      }\r\n    }\r\n\r\n    if (options.resultsAdapter == null) {\r\n      options.resultsAdapter = ResultsList;\r\n\r\n      if (options.ajax != null) {\r\n        options.resultsAdapter = Utils.Decorate(\r\n          options.resultsAdapter,\r\n          InfiniteScroll\r\n        );\r\n      }\r\n\r\n      if (options.placeholder != null) {\r\n        options.resultsAdapter = Utils.Decorate(\r\n          options.resultsAdapter,\r\n          HidePlaceholder\r\n        );\r\n      }\r\n\r\n      if (options.selectOnClose) {\r\n        options.resultsAdapter = Utils.Decorate(\r\n          options.resultsAdapter,\r\n          SelectOnClose\r\n        );\r\n      }\r\n\r\n      if (options.tags) {\r\n        options.resultsAdapter = Utils.Decorate(\r\n          options.resultsAdapter,\r\n          TagsSearchHighlight\r\n        );\r\n      }\r\n    }\r\n\r\n    if (options.dropdownAdapter == null) {\r\n      if (options.multiple) {\r\n        options.dropdownAdapter = Dropdown;\r\n      } else {\r\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\r\n\r\n        options.dropdownAdapter = SearchableDropdown;\r\n      }\r\n\r\n      if (options.minimumResultsForSearch !== 0) {\r\n        options.dropdownAdapter = Utils.Decorate(\r\n          options.dropdownAdapter,\r\n          MinimumResultsForSearch\r\n        );\r\n      }\r\n\r\n      if (options.closeOnSelect) {\r\n        options.dropdownAdapter = Utils.Decorate(\r\n          options.dropdownAdapter,\r\n          CloseOnSelect\r\n        );\r\n      }\r\n\r\n      if (options.dropdownCssClass != null) {\r\n        options.dropdownAdapter = Utils.Decorate(\r\n          options.dropdownAdapter,\r\n          DropdownCSS\r\n        );\r\n      }\r\n\r\n      options.dropdownAdapter = Utils.Decorate(\r\n        options.dropdownAdapter,\r\n        AttachBody\r\n      );\r\n    }\r\n\r\n    if (options.selectionAdapter == null) {\r\n      if (options.multiple) {\r\n        options.selectionAdapter = MultipleSelection;\r\n      } else {\r\n        options.selectionAdapter = SingleSelection;\r\n      }\r\n\r\n      // Add the placeholder mixin if a placeholder was specified\r\n      if (options.placeholder != null) {\r\n        options.selectionAdapter = Utils.Decorate(\r\n          options.selectionAdapter,\r\n          Placeholder\r\n        );\r\n      }\r\n\r\n      if (options.allowClear) {\r\n        options.selectionAdapter = Utils.Decorate(\r\n          options.selectionAdapter,\r\n          AllowClear\r\n        );\r\n      }\r\n\r\n      if (options.multiple) {\r\n        options.selectionAdapter = Utils.Decorate(\r\n          options.selectionAdapter,\r\n          SelectionSearch\r\n        );\r\n      }\r\n\r\n      if (options.selectionCssClass != null) {\r\n        options.selectionAdapter = Utils.Decorate(\r\n          options.selectionAdapter,\r\n          SelectionCSS\r\n        );\r\n      }\r\n\r\n      options.selectionAdapter = Utils.Decorate(\r\n        options.selectionAdapter,\r\n        EventRelay\r\n      );\r\n    }\r\n\r\n    // If the defaults were not previously applied from an element, it is\r\n    // possible for the language option to have not been resolved\r\n    options.language = this._resolveLanguage(options.language);\r\n\r\n    // Always fall back to English since it will always be complete\r\n    options.language.push('en');\r\n\r\n    var uniqueLanguages = [];\r\n\r\n    for (var l = 0; l < options.language.length; l++) {\r\n      var language = options.language[l];\r\n\r\n      if (uniqueLanguages.indexOf(language) === -1) {\r\n        uniqueLanguages.push(language);\r\n      }\r\n    }\r\n\r\n    options.language = uniqueLanguages;\r\n\r\n    options.translations = this._processTranslations(\r\n      options.language,\r\n      options.debug\r\n    );\r\n\r\n    return options;\r\n  };\r\n\r\n  Defaults.prototype.reset = function () {\r\n    function stripDiacritics (text) {\r\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\r\n      function match(a) {\r\n        return DIACRITICS[a] || a;\r\n      }\r\n\r\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\r\n    }\r\n\r\n    function matcher (params, data) {\r\n      // Always return the object if there is nothing to compare\r\n      if (params.term == null || params.term.trim() === '') {\r\n        return data;\r\n      }\r\n\r\n      // Do a recursive check for options with children\r\n      if (data.children && data.children.length > 0) {\r\n        // Clone the data object if there are children\r\n        // This is required as we modify the object to remove any non-matches\r\n        var match = $.extend(true, {}, data);\r\n\r\n        // Check each child of the option\r\n        for (var c = data.children.length - 1; c >= 0; c--) {\r\n          var child = data.children[c];\r\n\r\n          var matches = matcher(params, child);\r\n\r\n          // If there wasn't a match, remove the object in the array\r\n          if (matches == null) {\r\n            match.children.splice(c, 1);\r\n          }\r\n        }\r\n\r\n        // If any children matched, return the new object\r\n        if (match.children.length > 0) {\r\n          return match;\r\n        }\r\n\r\n        // If there were no matching children, check just the plain object\r\n        return matcher(params, match);\r\n      }\r\n\r\n      var original = stripDiacritics(data.text).toUpperCase();\r\n      var term = stripDiacritics(params.term).toUpperCase();\r\n\r\n      // Check if the text contains the term\r\n      if (original.indexOf(term) > -1) {\r\n        return data;\r\n      }\r\n\r\n      // If it doesn't contain the term, don't return anything\r\n      return null;\r\n    }\r\n\r\n    this.defaults = {\r\n      amdLanguageBase: './i18n/',\r\n      autocomplete: 'off',\r\n      closeOnSelect: true,\r\n      debug: false,\r\n      dropdownAutoWidth: false,\r\n      escapeMarkup: Utils.escapeMarkup,\r\n      language: {},\r\n      matcher: matcher,\r\n      minimumInputLength: 0,\r\n      maximumInputLength: 0,\r\n      maximumSelectionLength: 0,\r\n      minimumResultsForSearch: 0,\r\n      selectOnClose: false,\r\n      scrollAfterSelect: false,\r\n      sorter: function (data) {\r\n        return data;\r\n      },\r\n      templateResult: function (result) {\r\n        return result.text;\r\n      },\r\n      templateSelection: function (selection) {\r\n        return selection.text;\r\n      },\r\n      theme: 'default',\r\n      width: 'resolve'\r\n    };\r\n  };\r\n\r\n  Defaults.prototype.applyFromElement = function (options, $element) {\r\n    var optionLanguage = options.language;\r\n    var defaultLanguage = this.defaults.language;\r\n    var elementLanguage = $element.prop('lang');\r\n    var parentLanguage = $element.closest('[lang]').prop('lang');\r\n\r\n    var languages = Array.prototype.concat.call(\r\n      this._resolveLanguage(elementLanguage),\r\n      this._resolveLanguage(optionLanguage),\r\n      this._resolveLanguage(defaultLanguage),\r\n      this._resolveLanguage(parentLanguage)\r\n    );\r\n\r\n    options.language = languages;\r\n\r\n    return options;\r\n  };\r\n\r\n  Defaults.prototype._resolveLanguage = function (language) {\r\n    if (!language) {\r\n      return [];\r\n    }\r\n\r\n    if ($.isEmptyObject(language)) {\r\n      return [];\r\n    }\r\n\r\n    if ($.isPlainObject(language)) {\r\n      return [language];\r\n    }\r\n\r\n    var languages;\r\n\r\n    if (!Array.isArray(language)) {\r\n      languages = [language];\r\n    } else {\r\n      languages = language;\r\n    }\r\n\r\n    var resolvedLanguages = [];\r\n\r\n    for (var l = 0; l < languages.length; l++) {\r\n      resolvedLanguages.push(languages[l]);\r\n\r\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\r\n        // Extract the region information if it is included\r\n        var languageParts = languages[l].split('-');\r\n        var baseLanguage = languageParts[0];\r\n\r\n        resolvedLanguages.push(baseLanguage);\r\n      }\r\n    }\r\n\r\n    return resolvedLanguages;\r\n  };\r\n\r\n  Defaults.prototype._processTranslations = function (languages, debug) {\r\n    var translations = new Translation();\r\n\r\n    for (var l = 0; l < languages.length; l++) {\r\n      var languageData = new Translation();\r\n\r\n      var language = languages[l];\r\n\r\n      if (typeof language === 'string') {\r\n        try {\r\n          // Try to load it with the original name\r\n          languageData = Translation.loadPath(language);\r\n        } catch (e) {\r\n          try {\r\n            // If we couldn't load it, check if it wasn't the full path\r\n            language = this.defaults.amdLanguageBase + language;\r\n            languageData = Translation.loadPath(language);\r\n          } catch (ex) {\r\n            // The translation could not be loaded at all. Sometimes this is\r\n            // because of a configuration problem, other times this can be\r\n            // because of how Select2 helps load all possible translation files\r\n            if (debug && window.console && console.warn) {\r\n              console.warn(\r\n                'Select2: The language file for \"' + language + '\" could ' +\r\n                'not be automatically loaded. A fallback will be used instead.'\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if ($.isPlainObject(language)) {\r\n        languageData = new Translation(language);\r\n      } else {\r\n        languageData = language;\r\n      }\r\n\r\n      translations.extend(languageData);\r\n    }\r\n\r\n    return translations;\r\n  };\r\n\r\n  Defaults.prototype.set = function (key, value) {\r\n    var camelKey = $.camelCase(key);\r\n\r\n    var data = {};\r\n    data[camelKey] = value;\r\n\r\n    var convertedData = Utils._convertData(data);\r\n\r\n    $.extend(true, this.defaults, convertedData);\r\n  };\r\n\r\n  var defaults = new Defaults();\r\n\r\n  return defaults;\r\n});\r\n\r\nS2.define('select2/options',[\r\n  'jquery',\r\n  './defaults',\r\n  './utils'\r\n], function ($, Defaults, Utils) {\r\n  function Options (options, $element) {\r\n    this.options = options;\r\n\r\n    if ($element != null) {\r\n      this.fromElement($element);\r\n    }\r\n\r\n    if ($element != null) {\r\n      this.options = Defaults.applyFromElement(this.options, $element);\r\n    }\r\n\r\n    this.options = Defaults.apply(this.options);\r\n  }\r\n\r\n  Options.prototype.fromElement = function ($e) {\r\n    var excludedData = ['select2'];\r\n\r\n    if (this.options.multiple == null) {\r\n      this.options.multiple = $e.prop('multiple');\r\n    }\r\n\r\n    if (this.options.disabled == null) {\r\n      this.options.disabled = $e.prop('disabled');\r\n    }\r\n\r\n    if (this.options.autocomplete == null && $e.prop('autocomplete')) {\r\n      this.options.autocomplete = $e.prop('autocomplete');\r\n    }\r\n\r\n    if (this.options.dir == null) {\r\n      if ($e.prop('dir')) {\r\n        this.options.dir = $e.prop('dir');\r\n      } else if ($e.closest('[dir]').prop('dir')) {\r\n        this.options.dir = $e.closest('[dir]').prop('dir');\r\n      } else {\r\n        this.options.dir = 'ltr';\r\n      }\r\n    }\r\n\r\n    $e.prop('disabled', this.options.disabled);\r\n    $e.prop('multiple', this.options.multiple);\r\n\r\n    if (Utils.GetData($e[0], 'select2Tags')) {\r\n      if (this.options.debug && window.console && console.warn) {\r\n        console.warn(\r\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\r\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\r\n          'removed in future versions of Select2.'\r\n        );\r\n      }\r\n\r\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\r\n      Utils.StoreData($e[0], 'tags', true);\r\n    }\r\n\r\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\r\n      if (this.options.debug && window.console && console.warn) {\r\n        console.warn(\r\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\r\n          '`data-ajax--url` and support for the old attribute will be removed' +\r\n          ' in future versions of Select2.'\r\n        );\r\n      }\r\n\r\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\r\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\r\n    }\r\n\r\n    var dataset = {};\r\n\r\n    function upperCaseLetter(_, letter) {\r\n      return letter.toUpperCase();\r\n    }\r\n\r\n    // Pre-load all of the attributes which are prefixed with `data-`\r\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\r\n      var attributeName = $e[0].attributes[attr].name;\r\n      var prefix = 'data-';\r\n\r\n      if (attributeName.substr(0, prefix.length) == prefix) {\r\n        // Get the contents of the attribute after `data-`\r\n        var dataName = attributeName.substring(prefix.length);\r\n\r\n        // Get the data contents from the consistent source\r\n        // This is more than likely the jQuery data helper\r\n        var dataValue = Utils.GetData($e[0], dataName);\r\n\r\n        // camelCase the attribute name to match the spec\r\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\r\n\r\n        // Store the data attribute contents into the dataset since\r\n        dataset[camelDataName] = dataValue;\r\n      }\r\n    }\r\n\r\n    // Prefer the element's `dataset` attribute if it exists\r\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\r\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\r\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\r\n    }\r\n\r\n    // Prefer our internal data cache if it exists\r\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\r\n\r\n    data = Utils._convertData(data);\r\n\r\n    for (var key in data) {\r\n      if (excludedData.indexOf(key) > -1) {\r\n        continue;\r\n      }\r\n\r\n      if ($.isPlainObject(this.options[key])) {\r\n        $.extend(this.options[key], data[key]);\r\n      } else {\r\n        this.options[key] = data[key];\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  Options.prototype.get = function (key) {\r\n    return this.options[key];\r\n  };\r\n\r\n  Options.prototype.set = function (key, val) {\r\n    this.options[key] = val;\r\n  };\r\n\r\n  return Options;\r\n});\r\n\r\nS2.define('select2/core',[\r\n  'jquery',\r\n  './options',\r\n  './utils',\r\n  './keys'\r\n], function ($, Options, Utils, KEYS) {\r\n  var Select2 = function ($element, options) {\r\n    if (Utils.GetData($element[0], 'select2') != null) {\r\n      Utils.GetData($element[0], 'select2').destroy();\r\n    }\r\n\r\n    this.$element = $element;\r\n\r\n    this.id = this._generateId($element);\r\n\r\n    options = options || {};\r\n\r\n    this.options = new Options(options, $element);\r\n\r\n    Select2.__super__.constructor.call(this);\r\n\r\n    // Set up the tabindex\r\n\r\n    var tabindex = $element.attr('tabindex') || 0;\r\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\r\n    $element.attr('tabindex', '-1');\r\n\r\n    // Set up containers and adapters\r\n\r\n    var DataAdapter = this.options.get('dataAdapter');\r\n    this.dataAdapter = new DataAdapter($element, this.options);\r\n\r\n    var $container = this.render();\r\n\r\n    this._placeContainer($container);\r\n\r\n    var SelectionAdapter = this.options.get('selectionAdapter');\r\n    this.selection = new SelectionAdapter($element, this.options);\r\n    this.$selection = this.selection.render();\r\n\r\n    this.selection.position(this.$selection, $container);\r\n\r\n    var DropdownAdapter = this.options.get('dropdownAdapter');\r\n    this.dropdown = new DropdownAdapter($element, this.options);\r\n    this.$dropdown = this.dropdown.render();\r\n\r\n    this.dropdown.position(this.$dropdown, $container);\r\n\r\n    var ResultsAdapter = this.options.get('resultsAdapter');\r\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\r\n    this.$results = this.results.render();\r\n\r\n    this.results.position(this.$results, this.$dropdown);\r\n\r\n    // Bind events\r\n\r\n    var self = this;\r\n\r\n    // Bind the container to all of the adapters\r\n    this._bindAdapters();\r\n\r\n    // Register any DOM event handlers\r\n    this._registerDomEvents();\r\n\r\n    // Register any internal event handlers\r\n    this._registerDataEvents();\r\n    this._registerSelectionEvents();\r\n    this._registerDropdownEvents();\r\n    this._registerResultsEvents();\r\n    this._registerEvents();\r\n\r\n    // Set the initial state\r\n    this.dataAdapter.current(function (initialData) {\r\n      self.trigger('selection:update', {\r\n        data: initialData\r\n      });\r\n    });\r\n\r\n    // Hide the original select\r\n    $element[0].classList.add('select2-hidden-accessible');\r\n    $element.attr('aria-hidden', 'true');\r\n\r\n    // Synchronize any monitored attributes\r\n    this._syncAttributes();\r\n\r\n    Utils.StoreData($element[0], 'select2', this);\r\n\r\n    // Ensure backwards compatibility with $element.data('select2').\r\n    $element.data('select2', this);\r\n  };\r\n\r\n  Utils.Extend(Select2, Utils.Observable);\r\n\r\n  Select2.prototype._generateId = function ($element) {\r\n    var id = '';\r\n\r\n    if ($element.attr('id') != null) {\r\n      id = $element.attr('id');\r\n    } else if ($element.attr('name') != null) {\r\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\r\n    } else {\r\n      id = Utils.generateChars(4);\r\n    }\r\n\r\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\r\n    id = 'select2-' + id;\r\n\r\n    return id;\r\n  };\r\n\r\n  Select2.prototype._placeContainer = function ($container) {\r\n    $container.insertAfter(this.$element);\r\n\r\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\r\n\r\n    if (width != null) {\r\n      $container.css('width', width);\r\n    }\r\n  };\r\n\r\n  Select2.prototype._resolveWidth = function ($element, method) {\r\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\r\n\r\n    if (method == 'resolve') {\r\n      var styleWidth = this._resolveWidth($element, 'style');\r\n\r\n      if (styleWidth != null) {\r\n        return styleWidth;\r\n      }\r\n\r\n      return this._resolveWidth($element, 'element');\r\n    }\r\n\r\n    if (method == 'element') {\r\n      var elementWidth = $element.outerWidth(false);\r\n\r\n      if (elementWidth <= 0) {\r\n        return 'auto';\r\n      }\r\n\r\n      return elementWidth + 'px';\r\n    }\r\n\r\n    if (method == 'style') {\r\n      var style = $element.attr('style');\r\n\r\n      if (typeof(style) !== 'string') {\r\n        return null;\r\n      }\r\n\r\n      var attrs = style.split(';');\r\n\r\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\r\n        var attr = attrs[i].replace(/\\s/g, '');\r\n        var matches = attr.match(WIDTH);\r\n\r\n        if (matches !== null && matches.length >= 1) {\r\n          return matches[1];\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    if (method == 'computedstyle') {\r\n      var computedStyle = window.getComputedStyle($element[0]);\r\n\r\n      return computedStyle.width;\r\n    }\r\n\r\n    return method;\r\n  };\r\n\r\n  Select2.prototype._bindAdapters = function () {\r\n    this.dataAdapter.bind(this, this.$container);\r\n    this.selection.bind(this, this.$container);\r\n\r\n    this.dropdown.bind(this, this.$container);\r\n    this.results.bind(this, this.$container);\r\n  };\r\n\r\n  Select2.prototype._registerDomEvents = function () {\r\n    var self = this;\r\n\r\n    this.$element.on('change.select2', function () {\r\n      self.dataAdapter.current(function (data) {\r\n        self.trigger('selection:update', {\r\n          data: data\r\n        });\r\n      });\r\n    });\r\n\r\n    this.$element.on('focus.select2', function (evt) {\r\n      self.trigger('focus', evt);\r\n    });\r\n\r\n    this._syncA = Utils.bind(this._syncAttributes, this);\r\n    this._syncS = Utils.bind(this._syncSubtree, this);\r\n\r\n    this._observer = new window.MutationObserver(function (mutations) {\r\n      self._syncA();\r\n      self._syncS(mutations);\r\n    });\r\n    this._observer.observe(this.$element[0], {\r\n      attributes: true,\r\n      childList: true,\r\n      subtree: false\r\n    });\r\n  };\r\n\r\n  Select2.prototype._registerDataEvents = function () {\r\n    var self = this;\r\n\r\n    this.dataAdapter.on('*', function (name, params) {\r\n      self.trigger(name, params);\r\n    });\r\n  };\r\n\r\n  Select2.prototype._registerSelectionEvents = function () {\r\n    var self = this;\r\n    var nonRelayEvents = ['toggle', 'focus'];\r\n\r\n    this.selection.on('toggle', function () {\r\n      self.toggleDropdown();\r\n    });\r\n\r\n    this.selection.on('focus', function (params) {\r\n      self.focus(params);\r\n    });\r\n\r\n    this.selection.on('*', function (name, params) {\r\n      if (nonRelayEvents.indexOf(name) !== -1) {\r\n        return;\r\n      }\r\n\r\n      self.trigger(name, params);\r\n    });\r\n  };\r\n\r\n  Select2.prototype._registerDropdownEvents = function () {\r\n    var self = this;\r\n\r\n    this.dropdown.on('*', function (name, params) {\r\n      self.trigger(name, params);\r\n    });\r\n  };\r\n\r\n  Select2.prototype._registerResultsEvents = function () {\r\n    var self = this;\r\n\r\n    this.results.on('*', function (name, params) {\r\n      self.trigger(name, params);\r\n    });\r\n  };\r\n\r\n  Select2.prototype._registerEvents = function () {\r\n    var self = this;\r\n\r\n    this.on('open', function () {\r\n      self.$container[0].classList.add('select2-container--open');\r\n    });\r\n\r\n    this.on('close', function () {\r\n      self.$container[0].classList.remove('select2-container--open');\r\n    });\r\n\r\n    this.on('enable', function () {\r\n      self.$container[0].classList.remove('select2-container--disabled');\r\n    });\r\n\r\n    this.on('disable', function () {\r\n      self.$container[0].classList.add('select2-container--disabled');\r\n    });\r\n\r\n    this.on('blur', function () {\r\n      self.$container[0].classList.remove('select2-container--focus');\r\n    });\r\n\r\n    this.on('query', function (params) {\r\n      if (!self.isOpen()) {\r\n        self.trigger('open', {});\r\n      }\r\n\r\n      this.dataAdapter.query(params, function (data) {\r\n        self.trigger('results:all', {\r\n          data: data,\r\n          query: params\r\n        });\r\n      });\r\n    });\r\n\r\n    this.on('query:append', function (params) {\r\n      this.dataAdapter.query(params, function (data) {\r\n        self.trigger('results:append', {\r\n          data: data,\r\n          query: params\r\n        });\r\n      });\r\n    });\r\n\r\n    this.on('keypress', function (evt) {\r\n      var key = evt.which;\r\n\r\n      if (self.isOpen()) {\r\n        if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {\r\n          self.close(evt);\r\n\r\n          evt.preventDefault();\r\n        } else if (key === KEYS.ENTER || key === KEYS.TAB) {\r\n          self.trigger('results:select', {});\r\n\r\n          evt.preventDefault();\r\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\r\n          self.trigger('results:toggle', {});\r\n\r\n          evt.preventDefault();\r\n        } else if (key === KEYS.UP) {\r\n          self.trigger('results:previous', {});\r\n\r\n          evt.preventDefault();\r\n        } else if (key === KEYS.DOWN) {\r\n          self.trigger('results:next', {});\r\n\r\n          evt.preventDefault();\r\n        }\r\n      } else {\r\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\r\n            (key === KEYS.DOWN && evt.altKey)) {\r\n          self.open();\r\n\r\n          evt.preventDefault();\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  Select2.prototype._syncAttributes = function () {\r\n    this.options.set('disabled', this.$element.prop('disabled'));\r\n\r\n    if (this.isDisabled()) {\r\n      if (this.isOpen()) {\r\n        this.close();\r\n      }\r\n\r\n      this.trigger('disable', {});\r\n    } else {\r\n      this.trigger('enable', {});\r\n    }\r\n  };\r\n\r\n  Select2.prototype._isChangeMutation = function (mutations) {\r\n    var self = this;\r\n\r\n    if (mutations.addedNodes && mutations.addedNodes.length > 0) {\r\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\r\n        var node = mutations.addedNodes[n];\r\n\r\n        if (node.selected) {\r\n          return true;\r\n        }\r\n      }\r\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\r\n      return true;\r\n    } else if (Array.isArray(mutations)) {\r\n      return mutations.some(function (mutation) {\r\n        return self._isChangeMutation(mutation);\r\n      });\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  Select2.prototype._syncSubtree = function (mutations) {\r\n    var changed = this._isChangeMutation(mutations);\r\n    var self = this;\r\n\r\n    // Only re-pull the data if we think there is a change\r\n    if (changed) {\r\n      this.dataAdapter.current(function (currentData) {\r\n        self.trigger('selection:update', {\r\n          data: currentData\r\n        });\r\n      });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Override the trigger method to automatically trigger pre-events when\r\n   * there are events that can be prevented.\r\n   */\r\n  Select2.prototype.trigger = function (name, args) {\r\n    var actualTrigger = Select2.__super__.trigger;\r\n    var preTriggerMap = {\r\n      'open': 'opening',\r\n      'close': 'closing',\r\n      'select': 'selecting',\r\n      'unselect': 'unselecting',\r\n      'clear': 'clearing'\r\n    };\r\n\r\n    if (args === undefined) {\r\n      args = {};\r\n    }\r\n\r\n    if (name in preTriggerMap) {\r\n      var preTriggerName = preTriggerMap[name];\r\n      var preTriggerArgs = {\r\n        prevented: false,\r\n        name: name,\r\n        args: args\r\n      };\r\n\r\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\r\n\r\n      if (preTriggerArgs.prevented) {\r\n        args.prevented = true;\r\n\r\n        return;\r\n      }\r\n    }\r\n\r\n    actualTrigger.call(this, name, args);\r\n  };\r\n\r\n  Select2.prototype.toggleDropdown = function () {\r\n    if (this.isDisabled()) {\r\n      return;\r\n    }\r\n\r\n    if (this.isOpen()) {\r\n      this.close();\r\n    } else {\r\n      this.open();\r\n    }\r\n  };\r\n\r\n  Select2.prototype.open = function () {\r\n    if (this.isOpen()) {\r\n      return;\r\n    }\r\n\r\n    if (this.isDisabled()) {\r\n      return;\r\n    }\r\n\r\n    this.trigger('query', {});\r\n  };\r\n\r\n  Select2.prototype.close = function (evt) {\r\n    if (!this.isOpen()) {\r\n      return;\r\n    }\r\n\r\n    this.trigger('close', { originalEvent : evt });\r\n  };\r\n\r\n  /**\r\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\r\n   * object.\r\n   *\r\n   * @return {true} if the instance is not disabled.\r\n   * @return {false} if the instance is disabled.\r\n   */\r\n  Select2.prototype.isEnabled = function () {\r\n    return !this.isDisabled();\r\n  };\r\n\r\n  /**\r\n   * Helper method to abstract the \"disabled\" state of this object.\r\n   *\r\n   * @return {true} if the disabled option is true.\r\n   * @return {false} if the disabled option is false.\r\n   */\r\n  Select2.prototype.isDisabled = function () {\r\n    return this.options.get('disabled');\r\n  };\r\n\r\n  Select2.prototype.isOpen = function () {\r\n    return this.$container[0].classList.contains('select2-container--open');\r\n  };\r\n\r\n  Select2.prototype.hasFocus = function () {\r\n    return this.$container[0].classList.contains('select2-container--focus');\r\n  };\r\n\r\n  Select2.prototype.focus = function (data) {\r\n    // No need to re-trigger focus events if we are already focused\r\n    if (this.hasFocus()) {\r\n      return;\r\n    }\r\n\r\n    this.$container[0].classList.add('select2-container--focus');\r\n    this.trigger('focus', {});\r\n  };\r\n\r\n  Select2.prototype.enable = function (args) {\r\n    if (this.options.get('debug') && window.console && console.warn) {\r\n      console.warn(\r\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\r\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\r\n        ' instead.'\r\n      );\r\n    }\r\n\r\n    if (args == null || args.length === 0) {\r\n      args = [true];\r\n    }\r\n\r\n    var disabled = !args[0];\r\n\r\n    this.$element.prop('disabled', disabled);\r\n  };\r\n\r\n  Select2.prototype.data = function () {\r\n    if (this.options.get('debug') &&\r\n        arguments.length > 0 && window.console && console.warn) {\r\n      console.warn(\r\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\r\n        'should consider setting the value instead using `$element.val()`.'\r\n      );\r\n    }\r\n\r\n    var data = [];\r\n\r\n    this.dataAdapter.current(function (currentData) {\r\n      data = currentData;\r\n    });\r\n\r\n    return data;\r\n  };\r\n\r\n  Select2.prototype.val = function (args) {\r\n    if (this.options.get('debug') && window.console && console.warn) {\r\n      console.warn(\r\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\r\n        ' removed in later Select2 versions. Use $element.val() instead.'\r\n      );\r\n    }\r\n\r\n    if (args == null || args.length === 0) {\r\n      return this.$element.val();\r\n    }\r\n\r\n    var newVal = args[0];\r\n\r\n    if (Array.isArray(newVal)) {\r\n      newVal = newVal.map(function (obj) {\r\n        return obj.toString();\r\n      });\r\n    }\r\n\r\n    this.$element.val(newVal).trigger('input').trigger('change');\r\n  };\r\n\r\n  Select2.prototype.destroy = function () {\r\n    Utils.RemoveData(this.$container[0]);\r\n    this.$container.remove();\r\n\r\n    this._observer.disconnect();\r\n    this._observer = null;\r\n\r\n    this._syncA = null;\r\n    this._syncS = null;\r\n\r\n    this.$element.off('.select2');\r\n    this.$element.attr('tabindex',\r\n    Utils.GetData(this.$element[0], 'old-tabindex'));\r\n\r\n    this.$element[0].classList.remove('select2-hidden-accessible');\r\n    this.$element.attr('aria-hidden', 'false');\r\n    Utils.RemoveData(this.$element[0]);\r\n    this.$element.removeData('select2');\r\n\r\n    this.dataAdapter.destroy();\r\n    this.selection.destroy();\r\n    this.dropdown.destroy();\r\n    this.results.destroy();\r\n\r\n    this.dataAdapter = null;\r\n    this.selection = null;\r\n    this.dropdown = null;\r\n    this.results = null;\r\n  };\r\n\r\n  Select2.prototype.render = function () {\r\n    var $container = $(\r\n      '<span class=\"select2 select2-container\">' +\r\n        '<span class=\"selection\"></span>' +\r\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\r\n      '</span>'\r\n    );\r\n\r\n    $container.attr('dir', this.options.get('dir'));\r\n\r\n    this.$container = $container;\r\n\r\n    this.$container[0].classList\r\n      .add('select2-container--' + this.options.get('theme'));\r\n\r\n    Utils.StoreData($container[0], 'element', this.$element);\r\n\r\n    return $container;\r\n  };\r\n\r\n  return Select2;\r\n});\r\n\r\nS2.define('select2/dropdown/attachContainer',[\r\n\r\n], function () {\r\n  function AttachContainer (decorated, $element, options) {\r\n    decorated.call(this, $element, options);\r\n  }\r\n\r\n  AttachContainer.prototype.position =\r\n    function (decorated, $dropdown, $container) {\r\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\r\n    $dropdownContainer.append($dropdown);\r\n\r\n    $dropdown[0].classList.add('select2-dropdown--below');\r\n    $container[0].classList.add('select2-container--below');\r\n  };\r\n\r\n  return AttachContainer;\r\n});\r\n\r\nS2.define('select2/dropdown/stopPropagation',[\r\n\r\n], function () {\r\n  function StopPropagation () { }\r\n\r\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\r\n    decorated.call(this, container, $container);\r\n\r\n    var stoppedEvents = [\r\n    'blur',\r\n    'change',\r\n    'click',\r\n    'dblclick',\r\n    'focus',\r\n    'focusin',\r\n    'focusout',\r\n    'input',\r\n    'keydown',\r\n    'keyup',\r\n    'keypress',\r\n    'mousedown',\r\n    'mouseenter',\r\n    'mouseleave',\r\n    'mousemove',\r\n    'mouseover',\r\n    'mouseup',\r\n    'search',\r\n    'touchend',\r\n    'touchstart'\r\n    ];\r\n\r\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\r\n      evt.stopPropagation();\r\n    });\r\n  };\r\n\r\n  return StopPropagation;\r\n});\r\n\r\nS2.define('select2/selection/stopPropagation',[\r\n\r\n], function () {\r\n  function StopPropagation () { }\r\n\r\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\r\n    decorated.call(this, container, $container);\r\n\r\n    var stoppedEvents = [\r\n      'blur',\r\n      'change',\r\n      'click',\r\n      'dblclick',\r\n      'focus',\r\n      'focusin',\r\n      'focusout',\r\n      'input',\r\n      'keydown',\r\n      'keyup',\r\n      'keypress',\r\n      'mousedown',\r\n      'mouseenter',\r\n      'mouseleave',\r\n      'mousemove',\r\n      'mouseover',\r\n      'mouseup',\r\n      'search',\r\n      'touchend',\r\n      'touchstart'\r\n    ];\r\n\r\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\r\n      evt.stopPropagation();\r\n    });\r\n  };\r\n\r\n  return StopPropagation;\r\n});\r\n\r\n/*!\r\n * jQuery Mousewheel 3.1.13\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n */\r\n\r\n(function (factory) {\r\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\r\n        // AMD. Register as an anonymous module.\r\n        S2.define('jquery-mousewheel',['jquery'], factory);\r\n    } else if (typeof exports === 'object') {\r\n        // Node/CommonJS style for Browserify\r\n        module.exports = factory;\r\n    } else {\r\n        // Browser globals\r\n        factory(jQuery);\r\n    }\r\n}(function ($) {\r\n\r\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\r\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\r\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\r\n        slice  = Array.prototype.slice,\r\n        nullLowestDeltaTimeout, lowestDelta;\r\n\r\n    if ( $.event.fixHooks ) {\r\n        for ( var i = toFix.length; i; ) {\r\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\r\n        }\r\n    }\r\n\r\n    var special = $.event.special.mousewheel = {\r\n        version: '3.1.12',\r\n\r\n        setup: function() {\r\n            if ( this.addEventListener ) {\r\n                for ( var i = toBind.length; i; ) {\r\n                    this.addEventListener( toBind[--i], handler, { passive: true } ); //***\r\n                }\r\n            } else {\r\n                this.onmousewheel = handler;\r\n            }\r\n            // Store the line height and page height for this particular element\r\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\r\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\r\n        },\r\n\r\n        teardown: function() {\r\n            if ( this.removeEventListener ) {\r\n                for ( var i = toBind.length; i; ) {\r\n                    this.removeEventListener( toBind[--i], handler, { passive: true } ); //***\r\n                }\r\n            } else {\r\n                this.onmousewheel = null;\r\n            }\r\n            // Clean up the data we added to the element\r\n            $.removeData(this, 'mousewheel-line-height');\r\n            $.removeData(this, 'mousewheel-page-height');\r\n        },\r\n\r\n        getLineHeight: function(elem) {\r\n            var $elem = $(elem),\r\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\r\n            if (!$parent.length) {\r\n                $parent = $('body');\r\n            }\r\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\r\n        },\r\n\r\n        getPageHeight: function(elem) {\r\n            return $(elem).height();\r\n        },\r\n\r\n        settings: {\r\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\r\n            normalizeOffset: true  // calls getBoundingClientRect for each event\r\n        }\r\n    };\r\n\r\n    $.fn.extend({\r\n        mousewheel: function(fn) {\r\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\r\n        },\r\n\r\n        unmousewheel: function(fn) {\r\n            return this.unbind('mousewheel', fn);\r\n        }\r\n    });\r\n\r\n\r\n    function handler(event) {\r\n        var orgEvent   = event || window.event,\r\n            args       = slice.call(arguments, 1),\r\n            delta      = 0,\r\n            deltaX     = 0,\r\n            deltaY     = 0,\r\n            absDelta   = 0,\r\n            offsetX    = 0,\r\n            offsetY    = 0;\r\n        event = $.event.fix(orgEvent);\r\n        event.type = 'mousewheel';\r\n\r\n        // Old school scrollwheel delta\r\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\r\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\r\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\r\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\r\n\r\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\r\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\r\n            deltaX = deltaY * -1;\r\n            deltaY = 0;\r\n        }\r\n\r\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\r\n        delta = deltaY === 0 ? deltaX : deltaY;\r\n\r\n        // New school wheel delta (wheel event)\r\n        if ( 'deltaY' in orgEvent ) {\r\n            deltaY = orgEvent.deltaY * -1;\r\n            delta  = deltaY;\r\n        }\r\n        if ( 'deltaX' in orgEvent ) {\r\n            deltaX = orgEvent.deltaX;\r\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\r\n        }\r\n\r\n        // No change actually happened, no reason to go any further\r\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\r\n\r\n        // Need to convert lines and pages to pixels if we aren't already in pixels\r\n        // There are three delta modes:\r\n        //   * deltaMode 0 is by pixels, nothing to do\r\n        //   * deltaMode 1 is by lines\r\n        //   * deltaMode 2 is by pages\r\n        if ( orgEvent.deltaMode === 1 ) {\r\n            var lineHeight = $.data(this, 'mousewheel-line-height');\r\n            delta  *= lineHeight;\r\n            deltaY *= lineHeight;\r\n            deltaX *= lineHeight;\r\n        } else if ( orgEvent.deltaMode === 2 ) {\r\n            var pageHeight = $.data(this, 'mousewheel-page-height');\r\n            delta  *= pageHeight;\r\n            deltaY *= pageHeight;\r\n            deltaX *= pageHeight;\r\n        }\r\n\r\n        // Store lowest absolute delta to normalize the delta values\r\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\r\n\r\n        if ( !lowestDelta || absDelta < lowestDelta ) {\r\n            lowestDelta = absDelta;\r\n\r\n            // Adjust older deltas if necessary\r\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n                lowestDelta /= 40;\r\n            }\r\n        }\r\n\r\n        // Adjust older deltas if necessary\r\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\r\n            // Divide all the things by 40!\r\n            delta  /= 40;\r\n            deltaX /= 40;\r\n            deltaY /= 40;\r\n        }\r\n\r\n        // Get a whole, normalized value for the deltas\r\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\r\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\r\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\r\n\r\n        // Normalise offsetX and offsetY properties\r\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\r\n            var boundingRect = this.getBoundingClientRect();\r\n            offsetX = event.clientX - boundingRect.left;\r\n            offsetY = event.clientY - boundingRect.top;\r\n        }\r\n\r\n        // Add information to the event object\r\n        event.deltaX = deltaX;\r\n        event.deltaY = deltaY;\r\n        event.deltaFactor = lowestDelta;\r\n        event.offsetX = offsetX;\r\n        event.offsetY = offsetY;\r\n        // Go ahead and set deltaMode to 0 since we converted to pixels\r\n        // Although this is a little odd since we overwrite the deltaX/Y\r\n        // properties with normalized deltas.\r\n        event.deltaMode = 0;\r\n\r\n        // Add event and delta to the front of the arguments\r\n        args.unshift(event, delta, deltaX, deltaY);\r\n\r\n        // Clearout lowestDelta after sometime to better\r\n        // handle multiple device types that give different\r\n        // a different lowestDelta\r\n        // Ex: trackpad = 3 and mouse wheel = 120\r\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\r\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\r\n\r\n        return ($.event.dispatch || $.event.handle).apply(this, args);\r\n    }\r\n\r\n    function nullLowestDelta() {\r\n        lowestDelta = null;\r\n    }\r\n\r\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\r\n        // If this is an older event and the delta is divisable by 120,\r\n        // then we are assuming that the browser is treating this as an\r\n        // older mouse wheel event and that we should divide the deltas\r\n        // by 40 to try and get a more usable deltaFactor.\r\n        // Side note, this actually impacts the reported scroll distance\r\n        // in older browsers and can cause scrolling to be slower than native.\r\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\r\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\r\n    }\r\n\r\n}));\r\n\r\nS2.define('jquery.select2',[\r\n  'jquery',\r\n  'jquery-mousewheel',\r\n\r\n  './select2/core',\r\n  './select2/defaults',\r\n  './select2/utils'\r\n], function ($, _, Select2, Defaults, Utils) {\r\n  if ($.fn.select2 == null) {\r\n    // All methods that should return the element\r\n    var thisMethods = ['open', 'close', 'destroy'];\r\n\r\n    $.fn.select2 = function (options) {\r\n      options = options || {};\r\n\r\n      if (typeof options === 'object') {\r\n        this.each(function () {\r\n          var instanceOptions = $.extend(true, {}, options);\r\n\r\n          var instance = new Select2($(this), instanceOptions);\r\n        });\r\n\r\n        return this;\r\n      } else if (typeof options === 'string') {\r\n        var ret;\r\n        var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n        this.each(function () {\r\n          var instance = Utils.GetData(this, 'select2');\r\n\r\n          if (instance == null && window.console && console.error) {\r\n            console.error(\r\n              'The select2(\\'' + options + '\\') method was called on an ' +\r\n              'element that is not using Select2.'\r\n            );\r\n          }\r\n\r\n          ret = instance[options].apply(instance, args);\r\n        });\r\n\r\n        // Check if we should be returning `this`\r\n        if (thisMethods.indexOf(options) > -1) {\r\n          return this;\r\n        }\r\n\r\n        return ret;\r\n      } else {\r\n        throw new Error('Invalid arguments for Select2: ' + options);\r\n      }\r\n    };\r\n  }\r\n\r\n  if ($.fn.select2.defaults == null) {\r\n    $.fn.select2.defaults = Defaults;\r\n  }\r\n\r\n  return Select2;\r\n});\r\n\r\n  // Return the AMD loader configuration so it can be used outside of this file\r\n  return {\r\n    define: S2.define,\r\n    require: S2.require\r\n  };\r\n}());\r\n\r\n  // Autoload the jQuery bindings\r\n  // We know that all of the modules exist above this, so we're safe\r\n  var select2 = S2.require('jquery.select2');\r\n\r\n  // Hold the AMD module references on the jQuery function that was just loaded\r\n  // This allows Select2 to use the internal loader outside of this file, such\r\n  // as in the language files.\r\n  jQuery.fn.select2.amd = S2;\r\n\r\n  // Return the Select2 instance for anyone who is importing it.\r\n  return select2;\r\n}));\r\n"]}